diff --git a/docs/source/manual/arch_lang/config_protocol.rst b/docs/source/manual/arch_lang/config_protocol.rst
index 1c124ddc0..26f9a304d 100644
--- a/docs/source/manual/arch_lang/config_protocol.rst
+++ b/docs/source/manual/arch_lang/config_protocol.rst
@@ -167,8 +167,8 @@ The BL and WL protocols can be customized through the XML syntax ``bl`` and ``wl
-
-
+
+
@@ -203,6 +203,14 @@ The BL and WL protocols can be customized through the XML syntax ``bl`` and ``wl
Example of (a) a memory organization using shift register chains to control BL/WLs; (b) single memory bank across the fabric; and (c) multiple memory banks across the fabric.
+.. option:: num_banks=""
+
+ Specify the number of shift register banks (i.e., independent shift register chains) to be used in each configuration region. When enabled, the length of each shift register chain will be sized by OpenFPGA automatically based on the number of BL/WLs in each configuration region. OpenFPGA will try to create similar sizes for the shift register chains, in order to minimize the number of HDL modules. If not specified, the default number of banks will be ``1``.
+
+
+ .. note:: This is available applicable to shift-register-based BL/WL protocols
+
+ .. note:: More customization on the shift register chains can be enabled through :ref:`fabric_key`
.. note:: The flip-flop for WL shift register requires an enable signal to gate WL signals when loading WL shift registers
diff --git a/docs/source/manual/file_formats/fabric_key.rst b/docs/source/manual/file_formats/fabric_key.rst
index 185e1b40a..b3088aa6b 100644
--- a/docs/source/manual/file_formats/fabric_key.rst
+++ b/docs/source/manual/file_formats/fabric_key.rst
@@ -24,21 +24,54 @@ The following example shows how to define multiple configuration regions in the
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -200,3 +233,46 @@ This key contains only ``name``, ``value``, ``row`` and ``column``.
+
+BL Shift Register Banks
+^^^^^^^^^^^^^^^^^^^^^^^
+
+.. note:: The customizable is only available when the shift-register-based memory bank is selected in :ref:`config_protocol`
+
+Each Bit-Line (BL) shift register bank is defined in the code block ````.
+A shift register bank may contain multiple shift register chains.
+- each shift register chain can be defined using the ``bank`` syntax
+- the BLs controlled by each chain can be customized through the ``range`` syntax.
+
+.. option::
+
+ - ``id`` indicates the sequence of the shift register chain in the bank. The id denotes the index in the head or tail bus. For example, ``id="0"`` means the head or tail of the shift register will be in the first bit of a head bus ``head[0:4]``
+
+ - ``range`` indicates ``BL`` port to be controlled by this shift register chain. Multiple BL ports can be defined but the sequence matters. For example, ``bl[0:3], bl[6:10]`` infers a 9-bit shift register chain whose output ports are connected from ``bl[0]`` to ``bl[10]``.
+
+ .. note:: When creating the range, you must know the number of BLs in the configuration region
+
+ .. note:: ports must use ``bl`` as the reserved port name
+
+
+WL Shift Register Banks
+^^^^^^^^^^^^^^^^^^^^^^^
+
+.. note:: The customizable is only available when the shift-register-based memory bank is selected in :ref:`config_protocol`
+
+Each Word-Line (WL) shift register bank is defined in the code block ````.
+A shift register bank may contain multiple shift register chains.
+- each shift register chain can be defined using the ``bank`` syntax
+- the BLs controlled by each chain can be customized through the ``range`` syntax.
+
+
+.. option::
+
+ - ``id`` indicates the sequence of the shift register chain in the bank. The id denotes the index in the head or tail bus. For example, ``id="0"`` means the head or tail of the shift register will be in the first bit of a head bus ``head[0:4]``
+
+ - ``range`` indicates ``WL`` port to be controlled by this shift register chain. Multiple WL ports can be defined but the sequence matters. For example, ``wl[0:3], wl[6:10]`` infers a 9-bit shift register chain whose output ports are connected from ``wl[0]`` to ``wl[10]``.
+
+ .. note:: When creating the range, you must know the number of BLs in the configuration region
+
+ .. note:: ports must use ``wl`` as the reserved port name
+