diff --git a/.github/workflows/quick_test.sh b/.github/workflows/quick_test.sh
index aff8aec..6c3b403 100755
--- a/.github/workflows/quick_test.sh
+++ b/.github/workflows/quick_test.sh
@@ -9,9 +9,17 @@ set -e
##############################################
# Initialize the repository
# - Generate final version of architecture files
-# - Run FPGA tasks to validate netlist generations
+# - Run FPGA tasks to validate netlist generations
python3 SCRIPT/repo_setup.py --openfpga_root_path ./OpenFPGA
+# Post processing netlist to use custom cells
+python3 HDL/common/custom_cell_mux_primitive_generator.py --template_netlist HDL/k4_N8_reset_softadder_caravel_io_FPGA_12x12_customhd_cc/SRC/sub_module/mux_primitives.v --output_verilog HDL/k4_N8_reset_softadder_caravel_io_FPGA_12x12_customhd_cc/SRC/sub_module/mux_primitives_hd.v
+
+##############################################
+# Generate wrapper HDL codes to bridge Caravel I/Os and FPGA I/Os
+python3 HDL/common/wrapper_lines_generator.py --template_netlist HDL/common/caravel_fpga_wrapper_hd_template.v --pin_assignment_file HDL/common/caravel_wrapper_pin_assignment_v1.0.json --output_verilog HDL/common/caravel_fpga_wrapper_hd_v1.0.v
+python3 HDL/common/wrapper_lines_generator.py --template_netlist HDL/common/caravel_fpga_wrapper_hd_template.v --pin_assignment_file HDL/common/caravel_wrapper_pin_assignment_v1.1.json --output_verilog HDL/common/caravel_fpga_wrapper_hd_v1.1.v
+
##############################################
# Generate wrapper HDL codes to bridge Caravel I/Os and FPGA I/Os
python3 HDL/common/wrapper_lines_generator.py --template_netlist HDL/common/caravel_fpga_wrapper_hd_template.v --pin_assignment_file HDL/common/caravel_wrapper_pin_assignment_v1.0.json --output_verilog HDL/common/caravel_fpga_wrapper_hd_v1.0.v
@@ -20,7 +28,5 @@ python3 HDL/common/wrapper_lines_generator.py --template_netlist HDL/common/cara
##############################################
# Generate post-PnR testbenches
python3 TESTBENCH/common/generate_post_pnr_testbenches.py --pre_pnr_testbench_dir_name ./TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc --pin_assignment_file ./HDL/common/caravel_wrapper_pin_assignment_v1.0.json
-python3 TESTBENCH/common/generate_post_pnr_testbenches.py --pre_pnr_testbench_dir_name ./TESTBENCH/k4_N8_reset_caravel_io_FPGA_12x12_fdhd_cc --pin_assignment_file ./HDL/common/caravel_wrapper_pin_assignment_v1.1.json
-python3 TESTBENCH/common/generate_post_pnr_testbenches.py --pre_pnr_testbench_dir_name ./TESTBENCH/k4_N8_softadder_caravel_io_FPGA_12x12_fdhd_cc --pin_assignment_file ./HDL/common/caravel_wrapper_pin_assignment_v1.0.json
python3 TESTBENCH/common/generate_post_pnr_testbenches.py --pre_pnr_testbench_dir_name ./TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc --pin_assignment_file ./HDL/common/caravel_wrapper_pin_assignment_v1.1.json
python3 TESTBENCH/common/generate_post_pnr_testbenches.py --pre_pnr_testbench_dir_name ./TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_customhd_cc --pin_assignment_file ./HDL/common/caravel_wrapper_pin_assignment_v1.1.json
diff --git a/ARCH/openfpga_arch_template/k4_frac_N8_reset_softadder_register_scan_chain_caravel_io_skywater130nm_customhd_cc_openfpga.xml b/ARCH/openfpga_arch_template/k4_frac_N8_reset_softadder_register_scan_chain_caravel_io_skywater130nm_customhd_cc_openfpga.xml
index b427d66..6c7ef58 100644
--- a/ARCH/openfpga_arch_template/k4_frac_N8_reset_softadder_register_scan_chain_caravel_io_skywater130nm_customhd_cc_openfpga.xml
+++ b/ARCH/openfpga_arch_template/k4_frac_N8_reset_softadder_register_scan_chain_caravel_io_skywater130nm_customhd_cc_openfpga.xml
@@ -160,7 +160,11 @@
+<<<<<<< HEAD
+=======
+
+>>>>>>> origin/master
@@ -169,7 +173,11 @@
+<<<<<<< HEAD
+=======
+
+>>>>>>> origin/master
@@ -201,7 +209,7 @@
-
+
@@ -228,7 +236,7 @@
-
+
@@ -282,9 +290,9 @@
-
-
-
+
+
+
diff --git a/ARCH/openfpga_arch_template/k4_frac_N8_reset_softadder_register_scan_chain_caravel_io_skywater130nm_fdhd_cc_openfpga.xml b/ARCH/openfpga_arch_template/k4_frac_N8_reset_softadder_register_scan_chain_caravel_io_skywater130nm_fdhd_cc_openfpga.xml
index 97989e2..06558f6 100644
--- a/ARCH/openfpga_arch_template/k4_frac_N8_reset_softadder_register_scan_chain_caravel_io_skywater130nm_fdhd_cc_openfpga.xml
+++ b/ARCH/openfpga_arch_template/k4_frac_N8_reset_softadder_register_scan_chain_caravel_io_skywater130nm_fdhd_cc_openfpga.xml
@@ -230,7 +230,7 @@
-
+
diff --git a/DOC/source/arch/index.rst b/DOC/source/arch/index.rst
deleted file mode 100644
index d28ed8e..0000000
--- a/DOC/source/arch/index.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-.. _arch:
- Architecture
-
-.. toctree::
- :maxdepth: 2
-
- fpga_arch
-
- io_resource
-
- clb_arch
diff --git a/DOC/source/arch/io_resource.rst b/DOC/source/arch/io_resource.rst
deleted file mode 100644
index 4773ef0..0000000
--- a/DOC/source/arch/io_resource.rst
+++ /dev/null
@@ -1,107 +0,0 @@
-.. _io_resource:
-
-I/O Resources
--------------
-
-.. _io_resource_overview:
-
-Overview
-~~~~~~~~
-
-The *High-Density* (HD) FPGA IP has 144 I/O pins as shown in :numref:`fig_fpga_io_switch`.
-
-Among the 144 I/Os,
-
-- **29 external I/Os** are accessible through the Caravel SoC's *General-Purpose I/Os* (GPIOs).
-
-- **115 internal I/Os** are accessible through the Caravel SOC's logic analyzer and wishbone interfaces, which are controlled by the RISC-V processor. See :ref:`io_resource_debug` and :ref:`io_resource_accelerator` for details.
-
-.. warning:: For all the unused GPIOs, please set them to **input** mode, so that the FPGA will not output any noise signals to damage other SoC components.
-
-.. note:: The connectivity of the 115 internal I/Os can be switched through a GPIO of Caravel SoC. As a result, the FPGA can operate in different modes.
-
-.. warning:: The internal I/O pins will drive either Wishbone or the logic analyzer, following the same truth table as mode-switch bit in :numref:`fig_fpga_io_switch`.
-
-.. _fig_fpga_io_switch:
-
-.. figure:: ./figures/fpga_io_switch.svg
- :scale: 20%
- :alt: I/O arrangement of FPGA IP
-
- I/O arrangement of *High-Density* (HD) FPGA IP: switchable between logic analyzer and wishbone bus interface
-
-
-.. _io_resource_accelerator:
-
-Accelerator Mode
-~~~~~~~~~~~~~~~~
-
-When the Wishbone interface is enabled, the FPGA can operate as an accelerator for the RISC-V processor.
-:numref:`fig_fpga_io_map_wishbone_mode` illustrates the detailed I/O arrangement for the FPGA, where the wishbone bus signals are connected to fixed FPGA I/O locations.
-
-.. note:: Not all the 115 internal I/Os are used by the Wishbone interface. Especially, the I/O[21:29] are not connected.
-
-.. warning:: The FPGA does not contain a Wishbone slave IP. Users have to implement a soft Wishbone slave when use the FPGA as an accelerator.
-
-.. _fig_fpga_io_map_wishbone_mode:
-
-.. figure:: ./figures/fpga_io_map_wishbone_mode.svg
- :scale: 20%
- :alt: I/O arrangement of FPGA IP when interfacing wishbone bus
-
- I/O arrangement of *High-Density* (HD) FPGA IP when interfacing wishbone bus
-
-.. _io_resource_debug:
-
-Debug Mode
-~~~~~~~~~~
-
-When the logic analyzer interface is enabled, the FPGA can operate in debug mode, whose internal signals can be readback through the registers of the RISC-V processor.
-:numref:`fig_fpga_io_map_logic_analyzer_mode` illustrates the detailed I/O arrangement for the FPGA, where the logic analyzer signals are connected to fixed FPGA I/O locations.
-
-.. note:: The logic analyzer is 128-bit, while 115 bits can drive or be driven by the FPGA I/O. The other 14 bits are connected to internal spots of the FPGA fabric, monitoring critical signal activities of the FPGA in debugging purpose.
-
-.. warning:: If the logic analyzer is not used, please configure both the management SoC and the FPGA as follows:
-
- - all the I/O directionality is set to **input mode**.
- - all the output ports is pulled down to **logic ``0``**.
-
-.. _fig_fpga_io_map_logic_analyzer_mode:
-
-.. figure:: ./figures/fpga_io_map_logic_analyzer_mode.svg
- :scale: 20%
- :alt: I/O arrangement of FPGA IP when interfacing logic analyzer
-
- I/O arrangement of *High-Density* (HD) FPGA IP when interfacing logic analyzer
-
-.. _io_resource_circuit:
-
-FPGA I/O Circuit
-~~~~~~~~~~~~~~~~
-
-As shown in :numref:`fig_embedded_io_schematic`, the I/O circuit used in the I/O tiles of the FPGA fabric (see :numref:`fig_fpga_arch`) is an digital I/O cell with
-
-- An **active-low** I/O isolation signal ``IO_ISOL_N`` to set the I/O in input mode. This is to avoid any unexpected output signals to damage circuits outside the FPGA due to configurable memories are not properly initialized.
-
- .. warning:: This feature may not be needed if the configurable memory cell has a built-in set/reset functionality!
-
-- An internal protection circuitry to ensure clean signals at all the SOC I/O ports. This is to avoid
-
- - ``SOC_OUT`` port outputs any random signal when the I/O is in input mode
- - ``FPGA_IN`` port is driven by any random signal when the I/O is output mode
-
-- An internal configurable memory element to control the direction of I/O cell
-
-The truth table of the I/O cell is consistent with the GPIO cell of Caravel SoC, where
-
-- When configuration bit (FF output) is logic ``1``, the I/O cell is in input mode
-
-- When configuration bit (FF output) is logic ``0``, the I/O cell is in output mode
-
-.. _fig_embedded_io_schematic:
-
-.. figure:: ./figures/embedded_io_schematic.svg
- :scale: 30%
- :alt: Schematic of embedded I/O cell used in FPGA
-
- Schematic of embedded I/O cell used in FPGA
diff --git a/DOC/source/datasheet/index.rst b/DOC/source/datasheet/index.rst
new file mode 100644
index 0000000..ef6404f
--- /dev/null
+++ b/DOC/source/datasheet/index.rst
@@ -0,0 +1,9 @@
+.. _datasheet:
+ Datasheets
+
+.. toctree::
+ :maxdepth: 2
+
+ sofa_hd/index
+
+ qlsofa_hd/index
diff --git a/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_clb_arch.svg b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_clb_arch.svg
new file mode 100644
index 0000000..bbda53b
--- /dev/null
+++ b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_clb_arch.svg
@@ -0,0 +1,751 @@
+
+
+
diff --git a/DOC/source/arch/figures/embedded_io_schematic.svg b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_embedded_io_schematic.svg
similarity index 100%
rename from DOC/source/arch/figures/embedded_io_schematic.svg
rename to DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_embedded_io_schematic.svg
diff --git a/DOC/source/arch/figures/fabric_scan_chain.svg b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fabric_scan_chain.svg
similarity index 100%
rename from DOC/source/arch/figures/fabric_scan_chain.svg
rename to DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fabric_scan_chain.svg
diff --git a/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fle_arch_dual_lut3_mode.svg b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fle_arch_dual_lut3_mode.svg
new file mode 100644
index 0000000..a559eef
--- /dev/null
+++ b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fle_arch_dual_lut3_mode.svg
@@ -0,0 +1,385 @@
+
+
+
diff --git a/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fle_arch_schematic.svg b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fle_arch_schematic.svg
new file mode 100644
index 0000000..064d224
--- /dev/null
+++ b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fle_arch_schematic.svg
@@ -0,0 +1,385 @@
+
+
+
diff --git a/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fle_arch_shift_register_mode.svg b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fle_arch_shift_register_mode.svg
new file mode 100644
index 0000000..c239b7e
--- /dev/null
+++ b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fle_arch_shift_register_mode.svg
@@ -0,0 +1,385 @@
+
+
+
diff --git a/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fle_arch_single_lut4_mode.svg b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fle_arch_single_lut4_mode.svg
new file mode 100644
index 0000000..018c66d
--- /dev/null
+++ b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fle_arch_single_lut4_mode.svg
@@ -0,0 +1,385 @@
+
+
+
diff --git a/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fle_arch_soft_adder_mode.svg b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fle_arch_soft_adder_mode.svg
new file mode 100644
index 0000000..35ffba6
--- /dev/null
+++ b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fle_arch_soft_adder_mode.svg
@@ -0,0 +1,385 @@
+
+
+
diff --git a/DOC/source/arch/figures/fpga_arch.svg b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fpga_arch.svg
similarity index 100%
rename from DOC/source/arch/figures/fpga_arch.svg
rename to DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fpga_arch.svg
diff --git a/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fpga_io_map_logic_analyzer_mode.svg b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fpga_io_map_logic_analyzer_mode.svg
new file mode 100644
index 0000000..e29fd87
--- /dev/null
+++ b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fpga_io_map_logic_analyzer_mode.svg
@@ -0,0 +1,247 @@
+
+
+
diff --git a/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fpga_io_map_wishbone_mode.svg b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fpga_io_map_wishbone_mode.svg
new file mode 100644
index 0000000..4744bdb
--- /dev/null
+++ b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fpga_io_map_wishbone_mode.svg
@@ -0,0 +1,259 @@
+
+
+
diff --git a/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fpga_io_switch.svg b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fpga_io_switch.svg
new file mode 100644
index 0000000..3e91b9b
--- /dev/null
+++ b/DOC/source/datasheet/qlsofa_hd/figures/qlsofa_hd_fpga_io_switch.svg
@@ -0,0 +1,353 @@
+
+
+
diff --git a/DOC/source/datasheet/qlsofa_hd/index.rst b/DOC/source/datasheet/qlsofa_hd/index.rst
new file mode 100644
index 0000000..09e8665
--- /dev/null
+++ b/DOC/source/datasheet/qlsofa_hd/index.rst
@@ -0,0 +1,16 @@
+.. _datasheet_sofa_hd:
+ QLSOFA HD
+
+QLSOFA HD
+---------
+
+.. toctree::
+ :maxdepth: 2
+
+ qlsofa_hd_fpga_arch
+
+ qlsofa_hd_io_resource
+
+ qlsofa_hd_clb_arch
+
+ qlsofa_hd_circuit_design
diff --git a/DOC/source/datasheet/qlsofa_hd/qlsofa_hd_circuit_design.rst b/DOC/source/datasheet/qlsofa_hd/qlsofa_hd_circuit_design.rst
new file mode 100644
index 0000000..90d527b
--- /dev/null
+++ b/DOC/source/datasheet/qlsofa_hd/qlsofa_hd_circuit_design.rst
@@ -0,0 +1,36 @@
+.. _qlsofa_hd_circuit_design:
+
+Circuit Designs
+---------------
+
+.. _qlsofa_hd_circuit_design_io:
+
+I/O Circuit
+^^^^^^^^^^^
+
+As shown in :numref:`fig_qlsofa_hd_embedded_io_schematic`, the I/O circuit used in the I/O tiles of the FPGA fabric (see :numref:`fig_qlsofa_hd_fpga_arch`) is an digital I/O cell with
+
+- An **active-low** I/O isolation signal ``IO_ISOL_N`` to set the I/O in input mode. This is to avoid any unexpected output signals to damage circuits outside the FPGA due to configurable memories are not properly initialized.
+
+ .. warning:: This feature may not be needed if the configurable memory cell has a built-in set/reset functionality!
+
+- An internal protection circuitry to ensure clean signals at all the SOC I/O ports. This is to avoid
+
+ - ``SOC_OUT`` port outputs any random signal when the I/O is in input mode
+ - ``FPGA_IN`` port is driven by any random signal when the I/O is output mode
+
+- An internal configurable memory element to control the direction of I/O cell
+
+The truth table of the I/O cell is consistent with the GPIO cell of Caravel SoC, where
+
+- When configuration bit (FF output) is logic ``1``, the I/O cell is in input mode
+
+- When configuration bit (FF output) is logic ``0``, the I/O cell is in output mode
+
+.. _fig_qlsofa_hd_embedded_io_schematic:
+
+.. figure:: ./figures/qlsofa_hd_embedded_io_schematic.svg
+ :scale: 30%
+ :alt: Schematic of embedded I/O cell used in FPGA
+
+ Schematic of embedded I/O cell used in FPGA
diff --git a/DOC/source/datasheet/qlsofa_hd/qlsofa_hd_clb_arch.rst b/DOC/source/datasheet/qlsofa_hd/qlsofa_hd_clb_arch.rst
new file mode 100644
index 0000000..446a0a0
--- /dev/null
+++ b/DOC/source/datasheet/qlsofa_hd/qlsofa_hd_clb_arch.rst
@@ -0,0 +1,131 @@
+.. _qlsofa_hd_clb_arch:
+
+Configurable Logic Block
+------------------------
+
+.. _qlsofa_hd_clb_arch_generality:
+
+Generality
+~~~~~~~~~~
+
+Each Logic Block (CLB) consists of 8 Logic Elements (LEs) as shown in :numref:`fig_qlsofa_hd_clb_arch`.
+All the pins of the LEs are directly wired to CLB pins without a local routing architecture.
+Feedback connections between LEs are implemented by the global routing architecture outside the CLBs.
+
+.. _fig_qlsofa_hd_clb_arch:
+
+.. figure:: ./figures/qlsofa_hd_clb_arch.svg
+ :scale: 20%
+ :alt: Configurable Logic Block schematic
+
+ Configurable logic block schematic
+
+.. _qlsofa_hd_clb_arch_le:
+
+Multi-mode Logic Element
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+Physical Implementation
+^^^^^^^^^^^^^^^^^^^^^^^
+
+As shown in :numref:`fig_qlsofa_hd_fle_arch_schematic`, each Logic Element (LE) consists of
+
+- a fracturable 4-input Look-Up Table (LUT)
+- two D-type Flip-Flops (FF)
+
+.. _fig_qlsofa_hd_fle_arch_schematic:
+
+.. figure:: ./figures/qlsofa_hd_fle_arch_schematic.svg
+ :scale: 30%
+ :alt: Logic element schematic
+
+ Detailed schematic of a logic element
+
+The LE can operate in different modes to map logic function efficiently
+
+- 4-input LUT and single FF (see details in :ref:`qlsofa_hd_clb_arch_le_single_lut4_mode`).
+- Dual 3-input LUTs and 2 FFs (see details in :ref:`qlsofa_hd_clb_arch_le_dual_lut3_mode`).
+- 2-bit shift registers (see details in :ref:`qlsofa_hd_clb_arch_le_shift_reg_mode`).
+
+
+.. _qlsofa_hd_clb_arch_le_single_lut4_mode:
+
+Operating mode: LUT4 + FF
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The logic element can operate in the Look-Up Table (LUT) + Flip-flop (FF) mode as many classical FPGA logic elements.
+As depicted in :numref:`fig_qlsofa_hd_fle_arch_single_lut4_mode`, the fracturable LUT will operate as a single-output 4-input LUT and the upper FF is used to implemented sequential logic.
+
+The operating mode is designed to efficiently implement 4-input functions.
+
+.. _fig_qlsofa_hd_fle_arch_single_lut4_mode:
+
+.. figure:: ./figures/qlsofa_hd_fle_arch_single_lut4_mode.svg
+ :scale: 30%
+ :alt: Logic element schematic
+
+ Resource usage of the logic element operating in LUT4 + FF mode (Grey blocks and lines are unused resources).
+
+.. _qlsofa_hd_clb_arch_le_dual_lut3_mode:
+
+Operating mode: Dual-LUT3
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The logic element can operate in the dual Look-Up Tables (LUTs) and Flip-flops (FFs) mode as many modern FPGA logic elements.
+As depicted in :numref:`fig_qlsofa_hd_fle_arch_dual_lut3_mode`, the fracturable LUT will operate as two 3-input LUTs with shared inputs.
+
+The operating mode is designed to efficiently implement two 3-input functions with shared input variables. A popular example is the adder function, where the carry logic can be mapped to the upper LUT3 and the sum logic can be mapped to the lower LUT3.
+
+.. _fig_qlsofa_hd_fle_arch_dual_lut3_mode:
+
+.. figure:: ./figures/qlsofa_hd_fle_arch_dual_lut3_mode.svg
+ :scale: 30%
+ :alt: Logic element schematic
+
+ Resource usage of the logic element operating in dual LUT3 + FFs mode (Grey blocks and lines are unused resources).
+
+.. _qlsofa_hd_clb_arch_le_shift_reg_mode:
+
+Operating mode: Shift-Register
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+As depicted in :numref:`fig_qlsofa_hd_fle_arch_shift_register_mode`, the Flip-flops (FFs) can be connected in dedicated routing wires to implement high-performance shift registers.
+
+The operating mode is designed to efficiently implement shift registers which are widely used in buffer logic, e.g., FIFOs.
+
+.. _fig_qlsofa_hd_fle_arch_shift_register_mode:
+
+.. figure:: ./figures/qlsofa_hd_fle_arch_shift_register_mode.svg
+ :scale: 30%
+ :alt: Logic element schematic
+
+ Resource usage of the logic element operating in shift register mode (Grey blocks and lines are unused resources).
+
+.. _qlsofa_hd_clb_arch_le_soft_adder_mode:
+
+Operating mode: Soft Adder
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+As depicted in :numref:`fig_qlsofa_hd_fle_arch_soft_adder_mode`, the 4-input LUT can implement an 1-bit adder logic, where carry inputs and outputs are connected through dedicated carry chain wires ``cin`` and ``cout`` across logic elements. This is more delay efficient than implementing adders through the dual LUT3 mode (see details in :ref:`qlsofa_hd_clb_arch_le_dual_lut3_mode`).
+
+The operating mode is designed to efficiently implement multi-bit adders.
+
+.. _fig_qlsofa_hd_fle_arch_soft_adder_mode:
+
+.. figure:: ./figures/qlsofa_hd_fle_arch_soft_adder_mode.svg
+ :scale: 30%
+ :alt: Logic element schematic
+
+ Resource usage of the logic element operating in soft adder mode (Grey blocks and lines are unused resources).
+
+.. _qlsofa_hd_clb_arch_scan_chain:
+
+
+Scan Chain
+~~~~~~~~~~
+
+There is a built-in scan-chain in the CLB where all the `sc_in` and `sc_out` ports of LEs are connected in a chain, as illustrated in :numref:`fig_qlsofa_hd_clb_arch`.
+When `Test_en` signal is active, users can readback the contents of all the D-type flip-flops of the LEs thanks to the scan-chain.
+When `Test_en` signal is disabled, D-type flip-flops of the LEs operate in regular mode to propagate datapath signal from LUT outputs.
+
+.. note:: The scan-chain of CLBs are connected in a chain at the top-level. See details in :ref:`qlsofa_hd_fpga_arch_scan_chain`.
diff --git a/DOC/source/datasheet/qlsofa_hd/qlsofa_hd_fpga_arch.rst b/DOC/source/datasheet/qlsofa_hd/qlsofa_hd_fpga_arch.rst
new file mode 100644
index 0000000..f1d079d
--- /dev/null
+++ b/DOC/source/datasheet/qlsofa_hd/qlsofa_hd_fpga_arch.rst
@@ -0,0 +1,82 @@
+.. _qlsofa_hd_fpga_arch:
+
+Architecture
+-------------
+
+.. _qlsofa_hd_fpga_arch_floorplan:
+
+Floorplan
+^^^^^^^^^
+
+
+:numref:`fig_qlsofa_hd_fpga_arch` shows an overview on the architecture of the embedded FPGA fabric.
+The FPGA follows a homogeneous architecture which only contains single type of tiles in the center fabric.
+I/O tiles are placed at the boundary of the FPGA to interface with GPIOs and RISC-V processors (see details in :ref:`qlsofa_hd_io_resource`).
+
+.. _fig_qlsofa_hd_fpga_arch:
+
+.. figure:: ./figures/qlsofa_hd_fpga_arch.svg
+ :scale: 25%
+ :alt: Tile-based FPGA architecture
+
+ Tile-based FPGA architecture
+
+
+.. _qlsofa_hd_fpga_arch_tiles:
+
+Tiles
+^^^^^
+
+The FPGA architecture follows a tile-based organization, to exploit the fine-grainularity in physical design, where three types of tiles are built:
+
+.. table:: FPGA tile type and functionalities
+
+ +------+----------+----------------------------------------------+
+ | Type | Capacity | Description |
+ +======+==========+==============================================+
+ | CLB | 144 || Each CLB tile consists of |
+ | | || - a Configurable Logic Block (CLB) |
+ | | || - a X-direction Connection Block (CBx) |
+ | | || - a Y-direction Connection Block (CBy) |
+ | | || - a Switch Block (SB). |
+ | | | |
+ | | || This is the majority tile across the fabric |
+ | | | to implement logics and registers. |
+ +------+----------+----------------------------------------------+
+ | IO-A | 36 || The type-A I/O is a low-density I/O tile |
+ | | | which is designed to mainly interface |
+ | | || the GPIOs of the SoC. |
+ | | | |
+ | | || Each I/O-A tile consists of 1 digitial I/O |
+ | | | cell. |
+ +------+----------+----------------------------------------------+
+ | IO-B | 12 || The type-B I/O is a high-density I/O tile |
+ | | | which is designed to mainly interface |
+ | | || the wishbone interface and logic analyzer |
+ | | | of the SoC. |
+ | | | |
+ | | || Each I/O-B tile consists of 9 digitial I/O |
+ | | | cells. |
+ +------+----------+----------------------------------------------+
+
+.. _qlsofa_hd_fpga_arch_scan_chain:
+
+Scan-chain
+^^^^^^^^^^
+
+There is a built-in scan-chain in the FPGA which connects the the `sc_in` and `sc_out` ports of CLBs in a chain (see details in :ref:`qlsofa_hd_clb_arch_scan_chain`), as illustrated in :numref:`fig_qlsofa_hd_fabric_scan_chain`.
+
+When `Test_en` signal is active, users can
+
+- overwrite the contents of all the D-type flip-flops in the FPGA by feeding signals to the `SC_HEAD` port
+- readback the contents of all the D-type flip-flops in the FPGA through the `SC_TAIL` port.
+
+.. _fig_qlsofa_hd_fabric_scan_chain:
+
+.. figure:: ./figures/qlsofa_hd_fabric_scan_chain.svg
+ :scale: 25%
+ :alt: Built-in scan-chain across FPGA
+
+ Built-in scan-chain across FPGA
+
+
diff --git a/DOC/source/datasheet/qlsofa_hd/qlsofa_hd_io_resource.rst b/DOC/source/datasheet/qlsofa_hd/qlsofa_hd_io_resource.rst
new file mode 100644
index 0000000..fc2badb
--- /dev/null
+++ b/DOC/source/datasheet/qlsofa_hd/qlsofa_hd_io_resource.rst
@@ -0,0 +1,113 @@
+.. _qlsofa_hd_io_resource:
+
+I/O Resources
+-------------
+
+Pin Assignment
+^^^^^^^^^^^^^^
+
+The *High-Density* (HD) FPGA IP has 144 data I/O pins as shown in :numref:`fig_qlsofa_hd_fpga_io_switch`.
+
+Among the 144 I/Os,
+
+- **29 external I/Os** are accessible through the Caravel SoC's *General-Purpose I/Os* (GPIOs).
+
+- **115 internal I/Os** are accessible through the Caravel SOC's logic analyzer and wishbone interfaces, which are controlled by the RISC-V processor. See :ref:`qlsofa_hd_io_resource_debug` and :ref:`qlsofa_hd_io_resource_accelerator` for details.
+
+.. warning:: For all the unused GPIOs, please set them to **input** mode, so that the FPGA will not output any noise signals to damage other SoC components.
+
+.. note:: The connectivity of the 115 internal I/Os can be switched through a GPIO of Caravel SoC. As a result, the FPGA can operate in different modes.
+
+.. warning:: The internal I/O pins will drive either Wishbone or the logic analyzer, following the same truth table as mode-switch bit in :numref:`fig_qlsofa_hd_fpga_io_switch`.
+
+.. _fig_qlsofa_hd_fpga_io_switch:
+
+.. figure:: ./figures/qlsofa_hd_fpga_io_switch.svg
+ :scale: 20%
+ :alt: I/O arrangement of FPGA IP
+
+ I/O arrangement of *High-Density* (HD) FPGA IP: switchable between logic analyzer and wishbone bus interface
+
+.. _io_resource_qlsofa_hd_external_io:
+
+External I/Os
+^^^^^^^^^^^^^
+
+A SOFA HD FPGA IP contains 37 external I/O pins, including 27 data I/Os and 10 control I/Os.
+
+Full details are summarized in the following table.
+
+.. table:: SOFA HD FPGA I/O usage and sizes
+
+ +-----------+------------------------------------------------------------------------+-------------+
+ | I/O Type | Description | No. of Pins |
+ +===========+========================================================================+=============+
+ | Data I/O | Datapath I/Os of FPGA fabric | 27 |
+ +-----------+------------------------------------------------------------------------+-------------+
+ | CLK | Operating clock of FPGA core | 1 |
+ +-----------+------------------------------------------------------------------------+-------------+
+ | PROG_CLK | Clock used by configuration protocol to program FPGA fabric | 1 |
+ +-----------+------------------------------------------------------------------------+-------------+
+ | RESET | Active-low reset for datapath flip-flops in the FPGA | 1 |
+ +-----------+------------------------------------------------------------------------+-------------+
+ | PROG_RESET| Active-low reset for configuration flip-flops in the FPGA | 1 |
+ +-----------+------------------------------------------------------------------------+-------------+
+ | CCFF_HEAD | Input of configuation protocol to load bitstream | 1 |
+ +-----------+------------------------------------------------------------------------+-------------+
+ | CCFF_TAIL | Output of configuration protocol to read back bitstream | 1 |
+ +-----------+------------------------------------------------------------------------+-------------+
+ | TEST_EN | Activate the test mode of FPGA fabric | 1 |
+ +-----------+------------------------------------------------------------------------+-------------+
+ | SC_HEAD | Input of built-in scan-chain to load data to flip-flops of FPGA fabric | 1 |
+ +-----------+------------------------------------------------------------------------+-------------+
+ | SC_TAIL | Output of built-in scan-chain to read back flip-flops from FPGA fabric | 1 |
+ +-----------+------------------------------------------------------------------------+-------------+
+ | IO_ISLO_N | Active-low signal to enable I/O datapath isolation from external ports | 1 |
+ +-----------+------------------------------------------------------------------------+-------------+
+ | Total | | 37 |
+ +-----------+------------------------------------------------------------------------+-------------+
+
+.. _qlsofa_hd_io_resource_accelerator:
+
+Accelerator Mode
+^^^^^^^^^^^^^^^^
+
+When the Wishbone interface is enabled, the FPGA can operate as an accelerator for the RISC-V processor.
+:numref:`fig_qlsofa_hd_fpga_io_map_wishbone_mode` illustrates the detailed I/O arrangement for the FPGA, where the wishbone bus signals are connected to fixed FPGA I/O locations.
+
+.. note:: Not all the 115 internal I/Os are used by the Wishbone interface. Especially, the I/O[21:29] are not connected.
+
+.. warning:: The FPGA does not contain a Wishbone slave IP. Users have to implement a soft Wishbone slave when use the FPGA as an accelerator.
+
+.. _fig_qlsofa_hd_fpga_io_map_wishbone_mode:
+
+.. figure:: ./figures/qlsofa_hd_fpga_io_map_wishbone_mode.svg
+ :scale: 20%
+ :alt: I/O arrangement of FPGA IP when interfacing wishbone bus
+
+ I/O arrangement of *High-Density* (HD) FPGA IP when interfacing wishbone bus
+
+.. _qlsofa_hd_io_resource_debug:
+
+Debug Mode
+^^^^^^^^^^
+
+When the logic analyzer interface is enabled, the FPGA can operate in debug mode, whose internal signals can be readback through the registers of the RISC-V processor.
+:numref:`fig_qlsofa_hd_fpga_io_map_logic_analyzer_mode` illustrates the detailed I/O arrangement for the FPGA, where the logic analyzer signals are connected to fixed FPGA I/O locations.
+
+.. note:: The logic analyzer is 128-bit, while 115 bits can drive or be driven by the FPGA I/O. The other 14 bits are connected to internal spots of the FPGA fabric, monitoring critical signal activities of the FPGA in debugging purpose.
+
+.. warning:: If the logic analyzer is not used, please configure both the management SoC and the FPGA as follows:
+
+ - all the I/O directionality is set to **input mode**.
+ - all the output ports is pulled down to **logic ``0``**.
+
+.. _fig_qlsofa_hd_fpga_io_map_logic_analyzer_mode:
+
+.. figure:: ./figures/qlsofa_hd_fpga_io_map_logic_analyzer_mode.svg
+ :scale: 20%
+ :alt: I/O arrangement of FPGA IP when interfacing logic analyzer
+
+ I/O arrangement of *High-Density* (HD) FPGA IP when interfacing logic analyzer
+
+
diff --git a/DOC/source/arch/figures/clb_arch.svg b/DOC/source/datasheet/sofa_hd/figures/sofa_hd_clb_arch.svg
similarity index 100%
rename from DOC/source/arch/figures/clb_arch.svg
rename to DOC/source/datasheet/sofa_hd/figures/sofa_hd_clb_arch.svg
diff --git a/DOC/source/datasheet/sofa_hd/figures/sofa_hd_embedded_io_schematic.svg b/DOC/source/datasheet/sofa_hd/figures/sofa_hd_embedded_io_schematic.svg
new file mode 100644
index 0000000..75482cb
--- /dev/null
+++ b/DOC/source/datasheet/sofa_hd/figures/sofa_hd_embedded_io_schematic.svg
@@ -0,0 +1,253 @@
+
+
+
diff --git a/DOC/source/datasheet/sofa_hd/figures/sofa_hd_fabric_scan_chain.svg b/DOC/source/datasheet/sofa_hd/figures/sofa_hd_fabric_scan_chain.svg
new file mode 100644
index 0000000..0bf9cc5
--- /dev/null
+++ b/DOC/source/datasheet/sofa_hd/figures/sofa_hd_fabric_scan_chain.svg
@@ -0,0 +1,320 @@
+
+
+
diff --git a/DOC/source/arch/figures/fle_arch.svg b/DOC/source/datasheet/sofa_hd/figures/sofa_hd_fle_arch.svg
similarity index 100%
rename from DOC/source/arch/figures/fle_arch.svg
rename to DOC/source/datasheet/sofa_hd/figures/sofa_hd_fle_arch.svg
diff --git a/DOC/source/arch/figures/fle_arch_dual_lut3_mode.svg b/DOC/source/datasheet/sofa_hd/figures/sofa_hd_fle_arch_dual_lut3_mode.svg
similarity index 100%
rename from DOC/source/arch/figures/fle_arch_dual_lut3_mode.svg
rename to DOC/source/datasheet/sofa_hd/figures/sofa_hd_fle_arch_dual_lut3_mode.svg
diff --git a/DOC/source/arch/figures/fle_arch_shift_reg_mode.svg b/DOC/source/datasheet/sofa_hd/figures/sofa_hd_fle_arch_shift_reg_mode.svg
similarity index 100%
rename from DOC/source/arch/figures/fle_arch_shift_reg_mode.svg
rename to DOC/source/datasheet/sofa_hd/figures/sofa_hd_fle_arch_shift_reg_mode.svg
diff --git a/DOC/source/arch/figures/fle_arch_single_lut4_mode.svg b/DOC/source/datasheet/sofa_hd/figures/sofa_hd_fle_arch_single_lut4_mode.svg
similarity index 100%
rename from DOC/source/arch/figures/fle_arch_single_lut4_mode.svg
rename to DOC/source/datasheet/sofa_hd/figures/sofa_hd_fle_arch_single_lut4_mode.svg
diff --git a/DOC/source/datasheet/sofa_hd/figures/sofa_hd_fpga_arch.svg b/DOC/source/datasheet/sofa_hd/figures/sofa_hd_fpga_arch.svg
new file mode 100644
index 0000000..59678b3
--- /dev/null
+++ b/DOC/source/datasheet/sofa_hd/figures/sofa_hd_fpga_arch.svg
@@ -0,0 +1,1089 @@
+
+
+
diff --git a/DOC/source/arch/figures/fpga_io_map_logic_analyzer_mode.svg b/DOC/source/datasheet/sofa_hd/figures/sofa_hd_fpga_io_map_logic_analyzer_mode.svg
similarity index 100%
rename from DOC/source/arch/figures/fpga_io_map_logic_analyzer_mode.svg
rename to DOC/source/datasheet/sofa_hd/figures/sofa_hd_fpga_io_map_logic_analyzer_mode.svg
diff --git a/DOC/source/arch/figures/fpga_io_map_wishbone_mode.svg b/DOC/source/datasheet/sofa_hd/figures/sofa_hd_fpga_io_map_wishbone_mode.svg
similarity index 100%
rename from DOC/source/arch/figures/fpga_io_map_wishbone_mode.svg
rename to DOC/source/datasheet/sofa_hd/figures/sofa_hd_fpga_io_map_wishbone_mode.svg
diff --git a/DOC/source/arch/figures/fpga_io_switch.svg b/DOC/source/datasheet/sofa_hd/figures/sofa_hd_fpga_io_switch.svg
similarity index 100%
rename from DOC/source/arch/figures/fpga_io_switch.svg
rename to DOC/source/datasheet/sofa_hd/figures/sofa_hd_fpga_io_switch.svg
diff --git a/DOC/source/datasheet/sofa_hd/index.rst b/DOC/source/datasheet/sofa_hd/index.rst
new file mode 100644
index 0000000..8bff100
--- /dev/null
+++ b/DOC/source/datasheet/sofa_hd/index.rst
@@ -0,0 +1,16 @@
+.. _datasheet_sofa_hd:
+ SOFA HD
+
+SOFA HD
+-------
+
+.. toctree::
+ :maxdepth: 2
+
+ sofa_hd_fpga_arch
+
+ sofa_hd_io_resource
+
+ sofa_hd_clb_arch
+
+ sofa_hd_circuit_design
diff --git a/DOC/source/datasheet/sofa_hd/sofa_hd_circuit_design.rst b/DOC/source/datasheet/sofa_hd/sofa_hd_circuit_design.rst
new file mode 100644
index 0000000..3a1d824
--- /dev/null
+++ b/DOC/source/datasheet/sofa_hd/sofa_hd_circuit_design.rst
@@ -0,0 +1,36 @@
+.. _sofa_hd_circuit_design:
+
+Circuit Designs
+---------------
+
+.. _sofa_hd_circuit_design_io:
+
+I/O Circuit
+^^^^^^^^^^^
+
+As shown in :numref:`fig_sofa_hd_embedded_io_schematic`, the I/O circuit used in the I/O tiles of the FPGA fabric (see :numref:`fig_sofa_hd_fpga_arch`) is an digital I/O cell with
+
+- An **active-low** I/O isolation signal ``IO_ISOL_N`` to set the I/O in input mode. This is to avoid any unexpected output signals to damage circuits outside the FPGA due to configurable memories are not properly initialized.
+
+ .. warning:: This feature may not be needed if the configurable memory cell has a built-in set/reset functionality!
+
+- An internal protection circuitry to ensure clean signals at all the SOC I/O ports. This is to avoid
+
+ - ``SOC_OUT`` port outputs any random signal when the I/O is in input mode
+ - ``FPGA_IN`` port is driven by any random signal when the I/O is output mode
+
+- An internal configurable memory element to control the direction of I/O cell
+
+The truth table of the I/O cell is consistent with the GPIO cell of Caravel SoC, where
+
+- When configuration bit (FF output) is logic ``1``, the I/O cell is in input mode
+
+- When configuration bit (FF output) is logic ``0``, the I/O cell is in output mode
+
+.. _fig_sofa_hd_embedded_io_schematic:
+
+.. figure:: ./figures/sofa_hd_embedded_io_schematic.svg
+ :scale: 30%
+ :alt: Schematic of embedded I/O cell used in FPGA
+
+ Schematic of embedded I/O cell used in FPGA
diff --git a/DOC/source/arch/clb_arch.rst b/DOC/source/datasheet/sofa_hd/sofa_hd_clb_arch.rst
similarity index 61%
rename from DOC/source/arch/clb_arch.rst
rename to DOC/source/datasheet/sofa_hd/sofa_hd_clb_arch.rst
index ae830d9..fb0aaea 100644
--- a/DOC/source/arch/clb_arch.rst
+++ b/DOC/source/datasheet/sofa_hd/sofa_hd_clb_arch.rst
@@ -1,26 +1,26 @@
-.. _clb_arch:
+.. _sofa_hd_clb_arch:
Configurable Logic Block
------------------------
-.. _clb_arch_generality:
+.. _sofa_hd_clb_arch_generality:
Generality
~~~~~~~~~~
-Each Logic Block (CLB) consists of 8 Logic Elements (LEs) as shown in :numref:`fig_clb_arch`.
+Each Logic Block (CLB) consists of 8 Logic Elements (LEs) as shown in :numref:`fig_sofa_hd_clb_arch`.
All the pins of the LEs are directly wired to CLB pins without a local routing architecture.
Feedback connections between LEs are implemented by the global routing architecture outside the CLBs.
-.. _fig_clb_arch:
+.. _fig_sofa_hd_clb_arch:
-.. figure:: ./figures/clb_arch.svg
+.. figure:: ./figures/sofa_hd_clb_arch.svg
:scale: 20%
:alt: Configurable Logic Block schematic
Configurable logic block schematic
-.. _clb_arch_le:
+.. _sofa_hd_clb_arch_le:
Multi-mode Logic Element
~~~~~~~~~~~~~~~~~~~~~~~~
@@ -28,14 +28,14 @@ Multi-mode Logic Element
Physical Implementation
^^^^^^^^^^^^^^^^^^^^^^^
-As shown in :numref:`fig_fle_arch`, each Logic Element (LE) consists of
+As shown in :numref:`fig_sofa_hd_fle_arch`, each Logic Element (LE) consists of
- a fracturable 4-input Look-Up Table (LUT)
- two D-type Flip-Flops (FF)
-.. _fig_fle_arch:
+.. _fig_sofa_hd_fle_arch:
-.. figure:: ./figures/fle_arch.svg
+.. figure:: ./figures/sofa_hd_fle_arch.svg
:scale: 30%
:alt: Logic element schematic
@@ -43,71 +43,71 @@ As shown in :numref:`fig_fle_arch`, each Logic Element (LE) consists of
The LE can operate in different modes to map logic function efficiently
-- 4-input LUT and single FF (see details in :ref:`clb_arch_le_single_lut4_mode`).
-- Dual 3-input LUTs and 2 FFs (see details in :ref:`clb_arch_le_dual_lut3_mode`).
-- 2-bit shift registers (see details in :ref:`clb_arch_le_shift_reg_mode`).
+- 4-input LUT and single FF (see details in :ref:`sofa_hd_clb_arch_le_single_lut4_mode`).
+- Dual 3-input LUTs and 2 FFs (see details in :ref:`sofa_hd_clb_arch_le_dual_lut3_mode`).
+- 2-bit shift registers (see details in :ref:`sofa_hd_clb_arch_le_shift_reg_mode`).
-.. _clb_arch_le_single_lut4_mode:
+.. _sofa_hd_clb_arch_le_single_lut4_mode:
Operating mode: LUT4 + FF
^^^^^^^^^^^^^^^^^^^^^^^^^
The logic element can operate in the Look-Up Table (LUT) + Flip-flop (FF) mode as many classical FPGA logic elements.
-As depicted in :numref:`fig_fle_arch_single_lut4_mode`, the fracturable LUT will operate as a single-output 4-input LUT and the upper FF is used to implemented sequential logic.
+As depicted in :numref:`fig_sofa_hd_fle_arch_single_lut4_mode`, the fracturable LUT will operate as a single-output 4-input LUT and the upper FF is used to implemented sequential logic.
The operating mode is designed to efficiently implement 4-input functions.
-.. _fig_fle_arch_single_lut4_mode:
+.. _fig_sofa_hd_fle_arch_single_lut4_mode:
-.. figure:: ./figures/fle_arch_single_lut4_mode.svg
+.. figure:: ./figures/sofa_hd_fle_arch_single_lut4_mode.svg
:scale: 30%
:alt: Logic element schematic
Resource usage of the logic element operating in LUT4 + FF mode (Grey blocks and lines are unused resources).
-.. _clb_arch_le_dual_lut3_mode:
+.. _sofa_hd_clb_arch_le_dual_lut3_mode:
Operating mode: Dual-LUT3
^^^^^^^^^^^^^^^^^^^^^^^^^
The logic element can operate in the dual Look-Up Tables (LUTs) and Flip-flops (FFs) mode as many modern FPGA logic elements.
-As depicted in :numref:`fig_fle_arch_dual_lut3_mode`, the fracturable LUT will operate as two 3-input LUTs with shared inputs.
+As depicted in :numref:`fig_sofa_hd_fle_arch_dual_lut3_mode`, the fracturable LUT will operate as two 3-input LUTs with shared inputs.
The operating mode is designed to efficiently implement two 3-input functions with shared input variables. A popular example is the adder function, where the carry logic can be mapped to the upper LUT3 and the sum logic can be mapped to the lower LUT3.
-.. _fig_fle_arch_dual_lut3_mode:
+.. _fig_sofa_hd_fle_arch_dual_lut3_mode:
-.. figure:: ./figures/fle_arch_dual_lut3_mode.svg
+.. figure:: ./figures/sofa_hd_fle_arch_dual_lut3_mode.svg
:scale: 30%
:alt: Logic element schematic
Resource usage of the logic element operating in dual LUT3 + FFs mode (Grey blocks and lines are unused resources).
-.. _clb_arch_le_shift_reg_mode:
+.. _sofa_hd_clb_arch_le_shift_reg_mode:
Operating mode: Shift-Register
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-As depicted in :numref:`fig_fle_arch_shift_reg_mode`, the Flip-flops (FFs) can be connected in dedicated routing wires to implement high-performance shift registers.
+As depicted in :numref:`fig_sofa_hd_fle_arch_shift_reg_mode`, the Flip-flops (FFs) can be connected in dedicated routing wires to implement high-performance shift registers.
The operating mode is designed to efficiently implement shift registers which are widely used in buffer logic, e.g., FIFOs.
-.. _fig_fle_arch_shift_reg_mode:
+.. _fig_sofa_hd_fle_arch_shift_reg_mode:
-.. figure:: ./figures/fle_arch_shift_reg_mode.svg
+.. figure:: ./figures/sofa_hd_fle_arch_shift_reg_mode.svg
:scale: 30%
:alt: Logic element schematic
Resource usage of the logic element operating in shift register mode (Grey blocks and lines are unused resources).
-.. _clb_arch_scan_chain:
+.. _sofa_hd_clb_arch_scan_chain:
Scan Chain
~~~~~~~~~~
-There is a built-in scan-chain in the CLB where all the `sc_in` and `sc_out` ports of LEs are connected in a chain, as illustrated in :numref:`fig_clb_arch`.
+There is a built-in scan-chain in the CLB where all the `sc_in` and `sc_out` ports of LEs are connected in a chain, as illustrated in :numref:`fig_sofa_hd_clb_arch`.
When `Test_en` signal is active, users can readback the contents of all the D-type flip-flops of the LEs thanks to the scan-chain.
When `Test_en` signal is disabled, D-type flip-flops of the LEs operate in regular mode to propagate datapath signal from LUT outputs.
-.. note:: The scan-chain of CLBs are connected in a chain at the top-level. See details in :ref:`fpga_arch_scan_chain`.
+.. note:: The scan-chain of CLBs are connected in a chain at the top-level. See details in :ref:`sofa_hd_fpga_arch_scan_chain`.
diff --git a/DOC/source/arch/fpga_arch.rst b/DOC/source/datasheet/sofa_hd/sofa_hd_fpga_arch.rst
similarity index 82%
rename from DOC/source/arch/fpga_arch.rst
rename to DOC/source/datasheet/sofa_hd/sofa_hd_fpga_arch.rst
index c59304e..5f503c9 100644
--- a/DOC/source/arch/fpga_arch.rst
+++ b/DOC/source/datasheet/sofa_hd/sofa_hd_fpga_arch.rst
@@ -1,30 +1,31 @@
-.. _fpga_arch:
+.. _sofa_hd_fpga_arch:
-FPGA Overview
+Architecture
-------------
-.. _fpga_arch_overview:
-Architecture Overview
-~~~~~~~~~~~~~~~~~~~~~
+.. _sofa_hd_fpga_arch_floorplan:
-:numref:`fig_fpga_arch` shows an overview on the architecture of the embedded FPGA fabric.
+Floorplan
+^^^^^^^^^
+
+:numref:`fig_sofa_hd_fpga_arch` shows an overview on the architecture of the embedded FPGA fabric.
The FPGA follows a homogeneous architecture which only contains single type of tiles in the center fabric.
-I/O tiles are placed at the boundary of the FPGA to interface with GPIOs and RISC-V processors (see details in :ref:`io_resource`).
+I/O tiles are placed at the boundary of the FPGA to interface with GPIOs and RISC-V processors (see details in :ref:`sofa_hd_io_resource`).
-.. _fig_fpga_arch:
+.. _fig_sofa_hd_fpga_arch:
-.. figure:: ./figures/fpga_arch.svg
+.. figure:: ./figures/sofa_hd_fpga_arch.svg
:scale: 25%
:alt: Tile-based FPGA architecture
Tile-based FPGA architecture
-.. _fpga_arch_tiles:
+.. _sofa_hd_fpga_arch_tiles:
Tiles
-~~~~~
+^^^^^
The FPGA architecture follows a tile-based organization, to exploit the fine-grainularity in physical design, where three types of tiles are built:
@@ -58,21 +59,21 @@ The FPGA architecture follows a tile-based organization, to exploit the fine-gra
| | | cells. |
+------+----------+----------------------------------------------+
-.. _fpga_arch_scan_chain:
+.. _sofa_hd_fpga_arch_scan_chain:
Scan-chain
-~~~~~~~~~~
+^^^^^^^^^^
-There is a built-in scan-chain in the FPGA which connects the the `sc_in` and `sc_out` ports of CLBs in a chain (see details in :ref:`clb_arch_scan_chain`), as illustrated in :numref:`fig_fabric_scan_chain`.
+There is a built-in scan-chain in the FPGA which connects the the `sc_in` and `sc_out` ports of CLBs in a chain (see details in :ref:`sofa_hd_clb_arch_scan_chain`), as illustrated in :numref:`fig_sofa_hd_fabric_scan_chain`.
When `Test_en` signal is active, users can
- overwrite the contents of all the D-type flip-flops in the FPGA by feeding signals to the `SC_HEAD` port
- readback the contents of all the D-type flip-flops in the FPGA through the `SC_TAIL` port.
-.. _fig_fabric_scan_chain:
+.. _fig_sofa_hd_fabric_scan_chain:
-.. figure:: ./figures/fabric_scan_chain.svg
+.. figure:: ./figures/sofa_hd_fabric_scan_chain.svg
:scale: 25%
:alt: Built-in scan-chain across FPGA
diff --git a/DOC/source/datasheet/sofa_hd/sofa_hd_io_resource.rst b/DOC/source/datasheet/sofa_hd/sofa_hd_io_resource.rst
new file mode 100644
index 0000000..48f29a3
--- /dev/null
+++ b/DOC/source/datasheet/sofa_hd/sofa_hd_io_resource.rst
@@ -0,0 +1,109 @@
+.. _sofa_hd_io_resource:
+
+I/O Resources
+-------------
+
+Pin Assignment
+^^^^^^^^^^^^^^
+
+The *High-Density* (HD) FPGA IP has 144 data I/O pins as shown in :numref:`fig_sofa_hd_fpga_io_switch`.
+
+Among the 144 I/Os,
+
+- **29 external I/Os** are accessible through the Caravel SoC's *General-Purpose I/Os* (GPIOs).
+
+- **115 internal I/Os** are accessible through the Caravel SOC's logic analyzer and wishbone interfaces, which are controlled by the RISC-V processor. See :ref:`sofa_hd_io_resource_debug` and :ref:`sofa_hd_io_resource_accelerator` for details.
+
+.. warning:: For all the unused GPIOs, please set them to **input** mode, so that the FPGA will not output any noise signals to damage other SoC components.
+
+.. note:: The connectivity of the 115 internal I/Os can be switched through a GPIO of Caravel SoC. As a result, the FPGA can operate in different modes.
+
+.. warning:: The internal I/O pins will drive either Wishbone or the logic analyzer, following the same truth table as mode-switch bit in :numref:`fig_sofa_hd_fpga_io_switch`.
+
+.. _fig_sofa_hd_fpga_io_switch:
+
+.. figure:: ./figures/sofa_hd_fpga_io_switch.svg
+ :scale: 20%
+ :alt: I/O arrangement of FPGA IP
+
+ I/O arrangement of *High-Density* (HD) FPGA IP: switchable between logic analyzer and wishbone bus interface
+
+.. _io_resource_sofa_hd_external_io:
+
+External I/Os
+^^^^^^^^^^^^^
+
+A SOFA HD FPGA IP contains 37 external I/O pins, including 29 data I/Os and 8 control I/Os.
+
+Full details are summarized in the following table.
+
+.. table:: SOFA HD FPGA I/O usage and sizes
+
+ +-----------+------------------------------------------------------------------------+-------------+
+ | I/O Type | Description | No. of Pins |
+ +===========+========================================================================+=============+
+ | Data I/O | Datapath I/Os of FPGA fabric | 29 |
+ +-----------+------------------------------------------------------------------------+-------------+
+ | CLK | Operating clock of FPGA core | 1 |
+ +-----------+------------------------------------------------------------------------+-------------+
+ | PROG_CLK | Clock used by configuration protocol to program FPGA fabric | 1 |
+ +-----------+------------------------------------------------------------------------+-------------+
+ | CCFF_HEAD | Input of configuation protocol to load bitstream | 1 |
+ +-----------+------------------------------------------------------------------------+-------------+
+ | CCFF_TAIL | Output of configuration protocol to read back bitstream | 1 |
+ +-----------+------------------------------------------------------------------------+-------------+
+ | TEST_EN | Activate the test mode of FPGA fabric | 1 |
+ +-----------+------------------------------------------------------------------------+-------------+
+ | SC_HEAD | Input of built-in scan-chain to load data to flip-flops of FPGA fabric | 1 |
+ +-----------+------------------------------------------------------------------------+-------------+
+ | SC_TAIL | Output of built-in scan-chain to read back flip-flops from FPGA fabric | 1 |
+ +-----------+------------------------------------------------------------------------+-------------+
+ | IO_ISLO_N | Active-low signal to enable I/O datapath isolation from external ports | 1 |
+ +-----------+------------------------------------------------------------------------+-------------+
+ | Total | | 37 |
+ +-----------+------------------------------------------------------------------------+-------------+
+
+.. _sofa_hd_io_resource_accelerator:
+
+Accelerator Mode
+^^^^^^^^^^^^^^^^
+
+When the Wishbone interface is enabled, the FPGA can operate as an accelerator for the RISC-V processor.
+:numref:`fig_sofa_hd_fpga_io_map_wishbone_mode` illustrates the detailed I/O arrangement for the FPGA, where the wishbone bus signals are connected to fixed FPGA I/O locations.
+
+.. note:: Not all the 115 internal I/Os are used by the Wishbone interface. Especially, the I/O[21:29] are not connected.
+
+.. warning:: The FPGA does not contain a Wishbone slave IP. Users have to implement a soft Wishbone slave when use the FPGA as an accelerator.
+
+.. _fig_sofa_hd_fpga_io_map_wishbone_mode:
+
+.. figure:: ./figures/sofa_hd_fpga_io_map_wishbone_mode.svg
+ :scale: 20%
+ :alt: I/O arrangement of FPGA IP when interfacing wishbone bus
+
+ I/O arrangement of *High-Density* (HD) FPGA IP when interfacing wishbone bus
+
+.. _sofa_hd_io_resource_debug:
+
+Debug Mode
+^^^^^^^^^^
+
+When the logic analyzer interface is enabled, the FPGA can operate in debug mode, whose internal signals can be readback through the registers of the RISC-V processor.
+:numref:`fig_sofa_hd_fpga_io_map_logic_analyzer_mode` illustrates the detailed I/O arrangement for the FPGA, where the logic analyzer signals are connected to fixed FPGA I/O locations.
+
+.. note:: The logic analyzer is 128-bit, while 115 bits can drive or be driven by the FPGA I/O. The other 14 bits are connected to internal spots of the FPGA fabric, monitoring critical signal activities of the FPGA in debugging purpose.
+
+.. warning:: If the logic analyzer is not used, please configure both the management SoC and the FPGA as follows:
+
+ - all the I/O directionality is set to **input mode**.
+ - all the output ports is pulled down to **logic ``0``**.
+
+.. _fig_sofa_hd_fpga_io_map_logic_analyzer_mode:
+
+.. figure:: ./figures/sofa_hd_fpga_io_map_logic_analyzer_mode.svg
+ :scale: 20%
+ :alt: I/O arrangement of FPGA IP when interfacing logic analyzer
+
+ I/O arrangement of *High-Density* (HD) FPGA IP when interfacing logic analyzer
+
+
diff --git a/DOC/source/device/dc_ac_character.rst b/DOC/source/device/dc_ac_character.rst
deleted file mode 100644
index 1e7b3b2..0000000
--- a/DOC/source/device/dc_ac_character.rst
+++ /dev/null
@@ -1,75 +0,0 @@
-.. _dc_ac_character:
-
-DC and AC Characteristics
--------------------------
-
-Each FPGA device contains 37 external I/O pins, whose details are summarized in the following tables.
-
-I/O usage and port information
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. table:: I/O usage and sizes
-
- +-----------+------------------------------------------------------------------------+-------------+
- | I/O Type | Description | No. of Pins |
- +===========+========================================================================+=============+
- | Data I/O | Datapath I/Os of FPGA fabric | 29 |
- +-----------+------------------------------------------------------------------------+-------------+
- | Clk | Operating clock of FPGA core | 1 |
- +-----------+------------------------------------------------------------------------+-------------+
- | ProgClk | Clock used by configuration protocol to program FPGA fabric | 1 |
- +-----------+------------------------------------------------------------------------+-------------+
- | CCin | Input of configuation protocol to load bitstream | 1 |
- +-----------+------------------------------------------------------------------------+-------------+
- | CCout | Output of configuration protocol to read back bitstream | 1 |
- +-----------+------------------------------------------------------------------------+-------------+
- | TestEn | Activate the test mode of FPGA fabric | 1 |
- +-----------+------------------------------------------------------------------------+-------------+
- | SCin | Input of built-in scan-chain to load data to flip-flops of FPGA fabric | 1 |
- +-----------+------------------------------------------------------------------------+-------------+
- | SCout | Output of built-in scan-chain to read back flip-flops from FPGA fabric | 1 |
- +-----------+------------------------------------------------------------------------+-------------+
- | IO_ISLO_N | Active-low signal to enable I/O datapath isolation from external ports | 1 |
- +-----------+------------------------------------------------------------------------+-------------+
- | Total | | 37 |
- +-----------+------------------------------------------------------------------------+-------------+
-
-Recommended Operating Conditions
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. table:: Recommended Operating Conditions
-
- +----------+------------------------------+------+---------+------+-------+
- | Symbol | Description | Min | Typical | Max | Units |
- +==========+==============================+======+=========+======+=======+
- | VDD_io | Supply voltage for I/Os | 1.8 | 3.3 | 5.0 | V |
- +----------+------------------------------+------+---------+------+-------+
- | VDD_core | Supply voltage for FPGA core | 1.62 | 1.8 | 1.98 | V |
- +----------+------------------------------+------+---------+------+-------+
- | V_in | Input voltage for other I/Os | TBD | 3.3 | TBD | V |
- +----------+------------------------------+------+---------+------+-------+
- | I_in | Maximum current through pins | N/A | TBD | TBD | mA |
- +----------+------------------------------+------+---------+------+-------+
- | f_max | Maximum frequency of I/Os | N/A | TBD | TBD | MHz |
- +----------+------------------------------+------+---------+------+-------+
-
-.. note:: Threshold voltage of logic `1` for I/O (V_OH) is 0.8 * VDD_io. In other words, V_in should be at least 2.64V in order to be sensed as logic `1`
-.. note:: Threshold voltage of logic `0` for I/O (V_OH) is 0.4. In other words, V_in should not exceed 0.4V in order to be sensed as logic `0`.
-
-Typical AC Characteristics
-^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. table:: Typical AC characteristics for FPGA I/Os
-
- +-----------------+-------------------------------------------+------+------+-------+
- | Symbol | Description | Min | Max | Units |
- +=================+===========================================+======+======+=======+
- | V_in Overshoot | Maximum allowed overshoot voltage for Vin | TBD | TBD | V |
- +-----------------+-------------------------------------------+------+------+-------+
- | V_in Undershoot | Minimum allowed overshoot voltage for Vin | TBD | TBD | V |
- +-----------------+-------------------------------------------+------+------+-------+
- | I_VDD_core | Quiescent VDD_core supply current | TBD | TBD | mA |
- +-----------------+-------------------------------------------+------+------+-------+
- | I_VDD_io | Quiescent VDD_io supply current | TBD | TBD | mA |
- +-----------------+-------------------------------------------+------+------+-------+
-
diff --git a/DOC/source/device/device_resource.rst b/DOC/source/device/device_resource.rst
deleted file mode 100644
index ea78fb4..0000000
--- a/DOC/source/device/device_resource.rst
+++ /dev/null
@@ -1,38 +0,0 @@
-.. _device_resource:
-
-Device Resources
-----------------
-
-.. _device_resource_hd_fpga:
-
-High-Density FPGA
-~~~~~~~~~~~~~~~~~
-
-The High Density (HD) FPGA is an embedded FPGA built with the Skywater 130nm High Density Standard Cell library (`Sky130_fd_SC_HD `_).
-
-.. table:: Logic capacity of High Density (HD) FPGA IP
-
- +-------------------------------+------------+
- | Resource Type | Capacity |
- +===============================+============+
- | Look-Up Tables [1]_ | 1152 |
- +-------------------------------+------------+
- | Flip-flops | 2304 |
- +-------------------------------+------------+
- | Max. Configuration Speed [2]_ | 50MHz |
- +-------------------------------+------------+
- | Max. Operating Speed [2]_ | 50MHz |
- +-------------------------------+------------+
- | User I/O Pins [3]_ | 144 |
- +-------------------------------+------------+
- | Max. I/O Speed [2]_ | 33MHz |
- +-------------------------------+------------+
- | Core Voltage | 1.8V |
- +-------------------------------+------------+
-
-.. [1] counted by 4-input fracturable Look-Up Tables (LUTs), each of which can operate as dual-output 3-input LUTs or single-output 4-input LUT.
-
-.. [2] bounded by the maximum speed of `GPIO cells of Skywater 130nm PDK `_. Higher speed may be expected when a high-speed GPIO cell is available.
-
-.. [3] I/Os are divided into two groups: GPIO and embedded I/O. See details in :ref:`io_resource`.
-
diff --git a/DOC/source/device/hd_fpga/hd_device_comp.rst b/DOC/source/device/hd_fpga/hd_device_comp.rst
new file mode 100644
index 0000000..940efe4
--- /dev/null
+++ b/DOC/source/device/hd_fpga/hd_device_comp.rst
@@ -0,0 +1,41 @@
+.. _hd_fpga_device_comparison:
+
+Device Comparison
+-----------------
+
+The High Density (HD) FPGAs are embedded FPGAs built with the Skywater 130nm High Density Standard Cell library (`Sky130_fd_SC_HD `_).
+
+.. table:: Logic capacity of High Density (HD) FPGA IPs
+
+ +-------------------------------+------------+-----------+
+ | Resource/Capacity | SOFA HD | QLSOFA HD |
+ +===============================+============+===========+
+ | Look-Up Tables [1]_ | 1152 | 1152 |
+ +-------------------------------+------------+-----------+
+ | Flip-flops | 2304 | 2304 |
+ +-------------------------------+------------+-----------+
+ | Soft Adders [2]_ | N/A | 1152 |
+ +-------------------------------+------------+-----------+
+ | Routing Channel Width [3]_ | 40 | 60 |
+ +-------------------------------+------------+-----------+
+ | Max. Configuration Speed [4]_ | 50MHz | 50MHz |
+ +-------------------------------+------------+-----------+
+ | Max. Operating Speed [4]_ | 50MHz | 50 MHz |
+ +-------------------------------+------------+-----------+
+ | User I/O Pins [5]_ | 144 | 144 |
+ +-------------------------------+------------+-----------+
+ | Max. I/O Speed [4]_ | 33MHz | 33 MHz |
+ +-------------------------------+------------+-----------+
+ | Core Voltage | 1.8V | 1.8V |
+ +-------------------------------+------------+-----------+
+
+.. [1] counted by 4-input fracturable Look-Up Tables (LUTs), each of which can operate as dual-output 3-input LUTs or single-output 4-input LUT.
+
+.. [2] counted by 3-input Look-Up Tables (LUTs) that are organized as a carry chain
+
+.. [3] counted by number of uni-directional routing tracks per tile
+
+.. [4] bounded by the maximum speed of `GPIO cells of Skywater 130nm PDK `_. Higher speed may be expected when a high-speed GPIO cell is available.
+
+.. [5] I/Os are divided into two groups: GPIOs and embedded I/Os.
+
diff --git a/DOC/source/device/hd_fpga/hd_device_dcac.rst b/DOC/source/device/hd_fpga/hd_device_dcac.rst
new file mode 100644
index 0000000..91baa82
--- /dev/null
+++ b/DOC/source/device/hd_fpga/hd_device_dcac.rst
@@ -0,0 +1,44 @@
+.. _hd_fpga_dc_ac_character:
+
+DC and AC Characteristics
+-------------------------
+
+Recommended Operating Conditions
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. table:: Recommended Operating Conditions
+
+ +----------+------------------------------+------+---------+------+-------+
+ | Symbol | Description | Min | Typical | Max | Units |
+ +==========+==============================+======+=========+======+=======+
+ | VDD_io | Supply voltage for I/Os | 1.8 | 3.3 | 5.0 | V |
+ +----------+------------------------------+------+---------+------+-------+
+ | VDD_core | Supply voltage for FPGA core | 1.62 | 1.8 | 1.98 | V |
+ +----------+------------------------------+------+---------+------+-------+
+ | V_in | Input voltage for other I/Os | TBD | 3.3 | TBD | V |
+ +----------+------------------------------+------+---------+------+-------+
+ | I_in | Maximum current through pins | N/A | TBD | TBD | mA |
+ +----------+------------------------------+------+---------+------+-------+
+ | f_max | Maximum frequency of I/Os | N/A | TBD | TBD | MHz |
+ +----------+------------------------------+------+---------+------+-------+
+
+.. note:: Threshold voltage of logic `1` for I/O (V_OH) is 0.8 * VDD_io. In other words, V_in should be at least 2.64V in order to be sensed as logic `1`
+.. note:: Threshold voltage of logic `0` for I/O (V_OH) is 0.4. In other words, V_in should not exceed 0.4V in order to be sensed as logic `0`.
+
+Typical AC Characteristics
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. table:: Typical AC characteristics for FPGA I/Os
+
+ +-----------------+-------------------------------------------+------+------+-------+
+ | Symbol | Description | Min | Max | Units |
+ +=================+===========================================+======+======+=======+
+ | V_in Overshoot | Maximum allowed overshoot voltage for Vin | TBD | TBD | V |
+ +-----------------+-------------------------------------------+------+------+-------+
+ | V_in Undershoot | Minimum allowed overshoot voltage for Vin | TBD | TBD | V |
+ +-----------------+-------------------------------------------+------+------+-------+
+ | I_VDD_core | Quiescent VDD_core supply current | TBD | TBD | mA |
+ +-----------------+-------------------------------------------+------+------+-------+
+ | I_VDD_io | Quiescent VDD_io supply current | TBD | TBD | mA |
+ +-----------------+-------------------------------------------+------+------+-------+
+
diff --git a/DOC/source/device/hd_fpga/index.rst b/DOC/source/device/hd_fpga/index.rst
new file mode 100644
index 0000000..a6802e3
--- /dev/null
+++ b/DOC/source/device/hd_fpga/index.rst
@@ -0,0 +1,12 @@
+HD FPGAs
+--------
+
+.. _device_family_hd_fpga:
+ HD FPGA Family
+
+.. toctree::
+ :maxdepth: 2
+
+ hd_device_comp
+
+ hd_device_dcac
diff --git a/DOC/source/device/index.rst b/DOC/source/device/index.rst
index e2f9d8c..6f733f4 100644
--- a/DOC/source/device/index.rst
+++ b/DOC/source/device/index.rst
@@ -1,11 +1,9 @@
-.. _device:
- Device Datasheet
+.. _device_family:
+ Device Family
.. toctree::
:maxdepth: 2
- device_overview
+ introduction
- device_resource
-
- dc_ac_character
+ hd_fpga/index
diff --git a/DOC/source/device/device_overview.rst b/DOC/source/device/introduction.rst
similarity index 89%
rename from DOC/source/device/device_overview.rst
rename to DOC/source/device/introduction.rst
index 4f7680a..24f163e 100644
--- a/DOC/source/device/device_overview.rst
+++ b/DOC/source/device/introduction.rst
@@ -1,7 +1,7 @@
-.. _device_overview:
+.. _device_family_introduction:
-General Description
--------------------
+Introduction
+------------
All the FPGA devices in this project are fully open-source, from the architecture description to the physical design outputs, e.g., GDSII.
All the devices are designed through the OpenFPGA framework and the Skywater 130nm PDK.
diff --git a/DOC/source/index.rst b/DOC/source/index.rst
index f9fca98..cbf7d6e 100644
--- a/DOC/source/index.rst
+++ b/DOC/source/index.rst
@@ -7,15 +7,15 @@ Welcome to SKywater-OpenFPGA documentation!
===========================================
.. toctree::
- :caption: Device Datasheet
+ :caption: Device Family
device/index
.. toctree::
:maxdepth: 2
- :caption: FPGA Architecture
+ :caption: Datasheets
- arch/index
+ datasheet/index
.. toctree::
:maxdepth: 2
diff --git a/HDL/common/caravel_wrapper_pin_assignment_v1.1.json b/HDL/common/caravel_wrapper_pin_assignment_v1.1.json
index abbff5b..63cf9d2 100644
--- a/HDL/common/caravel_wrapper_pin_assignment_v1.1.json
+++ b/HDL/common/caravel_wrapper_pin_assignment_v1.1.json
@@ -46,13 +46,13 @@
"caravel_pin_index": ["10:4"]
},
{
- "fpga_pin_type": "prog_reset",
+ "fpga_pin_type": "pReset",
"fpga_pin_index": "0:0",
"caravel_pin_type": ["input"],
"caravel_pin_index": ["3:3"]
},
{
- "fpga_pin_type": "reset",
+ "fpga_pin_type": "Reset",
"fpga_pin_index": "0:0",
"caravel_pin_type": ["input"],
"caravel_pin_index": ["2:2"]
diff --git a/HDL/common/custom_cell_mux_primitive_generator.py b/HDL/common/custom_cell_mux_primitive_generator.py
new file mode 100644
index 0000000..45b8c88
--- /dev/null
+++ b/HDL/common/custom_cell_mux_primitive_generator.py
@@ -0,0 +1,179 @@
+#####################################################################
+# Python script generate Verilog codes for the primitive modules
+# that is used to build routing multiplexers
+# The Verilog codes will exploit the custom cells built for MUX primitives
+# including:
+# - 2-input MUX
+# - 3-input MUX
+# - Skywater MUX2 standard cell
+#####################################################################
+
+import os
+from os.path import dirname, abspath, isfile
+import shutil
+import re
+import argparse
+import logging
+import json
+
+#####################################################################
+# Initialize logger
+#####################################################################
+logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.DEBUG)
+
+#####################################################################
+# Parse the options
+# - OpenFPGA root path is a manadatory option
+#####################################################################
+parser = argparse.ArgumentParser(
+ description='Generator for custom cells of routing multiplexer primitives')
+parser.add_argument('--template_netlist', required=True,
+ help='Specify template verilog netlist')
+parser.add_argument('--output_verilog', required=True,
+ help='Specify output verilog file path')
+args = parser.parse_args()
+
+#####################################################################
+# Check options:
+# - Input file must be valid
+# Otherwise, error out
+# - Remove any output file if already exist
+# TODO: give a warning when remove files
+#####################################################################
+if not isfile(args.template_netlist):
+ logging.error("Invalid template netlist: " + args.template_netlist + "\nFile does not exist!\n")
+ exit(1)
+if isfile(args.output_verilog):
+ logging.warn("Remove existing output netlist: " + args.output_verilog + "!\n")
+ os.remove(args.output_verilog)
+
+#####################################################################
+# Open the template Verilog netlist and start modification
+#####################################################################
+logging.info("Converting template netlist:"+ args.template_netlist)
+logging.info(" To custom cell netlist:"+ args.output_verilog)
+# Create output file handler
+custom_nlist = open(args.output_verilog, "w")
+
+#######################################################################
+# A function to generate Verilog codes for a MUX3 custom cell
+# Given an input index
+def generate_verilog_codes_custom_cell_mux3(first_input_index, instance_index):
+ lines = []
+
+ lines.append("\tscs8hd_muxinv3_1 scs8hd_muxinv3_1_" + str(instance_index) + "(")
+ lines.append("\t .Q1(in[" + str(first_input_index) + "]),")
+ lines.append("\t .Q2(in[" + str(first_input_index + 1) + "]),")
+ lines.append("\t .Q3(in[" + str(first_input_index + 2) + "]),")
+ lines.append("\t .S0(mem[" + str(first_input_index) + "]),")
+ lines.append("\t .S0B(mem_inv[" + str(first_input_index) + "]),")
+ lines.append("\t .S1(mem[" + str(first_input_index + 1) + "]),")
+ lines.append("\t .S1B(mem_inv[" + str(first_input_index + 1) + "]),")
+ lines.append("\t .S2(mem[" + str(first_input_index + 2) + "]),")
+ lines.append("\t .S2B(mem_inv[" + str(first_input_index + 2) + "]),")
+ lines.append("\t .Z(out[0])")
+ lines.append("\t );")
+
+ return lines
+
+#######################################################################
+# A function to generate Verilog codes for a MUX3 custom cell
+# Given an input index
+def generate_verilog_codes_custom_cell_mux2(first_input_index, instance_index):
+ lines = []
+
+ lines.append("\tscs8hd_muxinv2_1 scs8hd_muxinv2_1_" + str(instance_index) + "(")
+ lines.append("\t .Q1(in[" + str(first_input_index) + "]),")
+ lines.append("\t .Q2(in[" + str(first_input_index + 1) + "]),")
+ lines.append("\t .S0(mem[" + str(first_input_index) + "]),")
+ lines.append("\t .S0B(mem_inv[" + str(first_input_index) + "]),")
+ lines.append("\t .S1(mem[" + str(first_input_index + 1) + "]),")
+ lines.append("\t .S1B(mem_inv[" + str(first_input_index + 1) + "]),")
+ lines.append("\t .Z(out[0])")
+ lines.append("\t );")
+
+ return lines
+
+
+#######################################################################
+# A function to output custom cells of multiplexing structure to a file
+# based on the input size and memory size
+# - If the memory size is 1, the input size should be 2
+# In this case, an standard cell will be outputted
+# - If the memory size is larger than 1, the input size should be the same
+# as memory size. In this case, we will output custom cells
+def write_custom_mux_cells_to_file(custom_nlist, input_size, mem_size):
+ lines = []
+ if (1 == mem_size):
+ assert(2 == input_size)
+ # Output a standard cell, currently we support HD cell MUX2
+ lines.append("\tsky130_fd_sc_hd_mux2_1 sky130_fd_sc_hd_mux2_1_0(")
+ lines.append("\t .A1(in[0]),")
+ lines.append("\t .A0(in[1]),")
+ lines.append("\t .S(mem[0]),")
+ lines.append("\t .X(out[0])")
+ lines.append("\t );")
+ else:
+ assert(1 < mem_size)
+ assert(mem_size == input_size)
+ # Currently we support MUX2 and MUX3 custom cells
+ # - If the input size is an odd number, we will use
+ # - 1 MUX3 cell
+ # - a few MUX2 cells
+ if (1 == input_size % 2):
+ assert(3 <= input_size)
+ for line in generate_verilog_codes_custom_cell_mux3(0, 0):
+ lines.append(line)
+ for mux2_inst in range(int((input_size - 3) / 2)):
+ for line in generate_verilog_codes_custom_cell_mux2(3 + 2 * mux2_inst, mux2_inst):
+ lines.append(line)
+ # - If the input size is an even number, we will use
+ # - a few MUX2 cells
+ else:
+ assert (0 == input_size % 2)
+ for mux2_inst in range(int(input_size / 2)):
+ for line in generate_verilog_codes_custom_cell_mux2(2 * mux2_inst, mux2_inst):
+ lines.append(line)
+
+ # Output lines to file
+ for line in lines:
+ custom_nlist.write(line + "\n")
+
+# Read line by line from template netlist
+with open(args.template_netlist, "r") as wp:
+ template_nlist = wp.readlines()
+ # A flag for write the current line or skip
+ output_action = "copy"
+ input_size = 0
+ mem_size = 0
+ for line_num, curr_line in enumerate(template_nlist):
+ # If the current line satisfy the following conditions
+ # It should be modified and outputted to custom netlist
+ # Other lines can be directly copied to custom netlist
+ line2output = curr_line
+ # Once current line starts with a module definition
+ # Find the input size and memory size
+ if (curr_line.startswith("module ")):
+ input_size = int(re.findall("input(\d+)_mem(\d+)\(", curr_line)[0][0])
+ mem_size = int(re.findall("input(\d+)_mem(\d+)\(", curr_line)[0][1])
+ assert(input_size > 0)
+ assert(mem_size > 0)
+ # Change status indicating that we are now inside a module
+ output_action = "copy"
+
+ # If a line contains the keyword TGATE
+ # we will bypass all the lines until reach the endmodule line
+ if (curr_line.startswith("\tTGATE TGATE")):
+ output_action = "skip"
+
+ # Reaching the end of the current module
+ # Now output the custom cell instanciation
+ if (curr_line.startswith("endmodule")):
+ write_custom_mux_cells_to_file(custom_nlist, input_size, mem_size)
+ output_action = "copy"
+
+ if ("skip" != output_action):
+ custom_nlist.write(line2output)
+
+custom_nlist.close()
+logging.info("Done")
diff --git a/MSIM/common/run_post_pnr_msim_test.py b/MSIM/common/run_post_pnr_msim_test.py
index 54d5e25..83942d4 100644
--- a/MSIM/common/run_post_pnr_msim_test.py
+++ b/MSIM/common/run_post_pnr_msim_test.py
@@ -121,16 +121,24 @@ for line in vsim_log_file:
# Check errors from self-testing testbench output
if line.startswith("# Simulation finish with") :
num_sim_err = int(re.findall("# Simulation finish with(\s+)(\d+) errors", line)[0][1])
- num_err_lines_found = num_err_lines_found + 1
+ num_err_lines_found += 1
if (0 < num_sim_err) :
logging.error("Simulation failed with " + str(num_sim_err) + " errors!\n")
# Add to total errors
- num_err = num_err + num_sim_err
+ num_err += num_sim_err
+ if line.startswith("# Simulation Failed with") :
+ print (line)
+ num_sim_err = int(re.findall("# Simulation Failed with(\s+)(\d+) error\(s\)", line)[0][1])
+ num_err_lines_found += 1
+ if (0 < num_sim_err) :
+ logging.error("Simulation failed with " + str(num_sim_err) + " errors!\n")
+ # Add to total errors
+ num_err += num_sim_err
# Check total errors by Modelsim
if line.startswith("# Errors:") :
num_msim_err = int(re.findall("# Errors:(\s)(\d+),", line)[0][1])
- num_err_lines_found = num_err_lines_found + 1
- num_err = num_err + num_msim_err
+ num_err_lines_found += 1
+ num_err += num_msim_err
vsim_log_file.close()
diff --git a/README.md b/README.md
index 3b24f9d..a0870a8 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,10 @@
-# Skywater + OpenFPGA: Open-Source FPGAs
+# SOFA
[](https://github.com/LNIS-Projects/skywater-openfpga/actions)
[](https://skywater-openfpga.readthedocs.io/en/latest/?badge=latest)
## Introduction
-FPGA tape-outs using the open-source Skywater 130nm PDK and OpenFPGA
+SOFA (**S**kywater **O**pensource **F**PG**A**s) are a series of open-source FPGA IPs using the open-source [Skywater 130nm PDK](https://github.com/google/skywater-pdk) and [OpenFPGA](https://github.com/lnis-uofu/OpenFPGA) framework
## Quick Start
diff --git a/SCRIPT/skywater_openfpga_task/k4_N8_reset_caravel_cc_fdhd_12x12/generate_fabric/config/task_template.conf b/SCRIPT/skywater_openfpga_task/k4_N8_reset_caravel_cc_fdhd_12x12/generate_fabric/config/task_template.conf
deleted file mode 100644
index 9c68de0..0000000
--- a/SCRIPT/skywater_openfpga_task/k4_N8_reset_caravel_cc_fdhd_12x12/generate_fabric/config/task_template.conf
+++ /dev/null
@@ -1,38 +0,0 @@
-# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-# Configuration file for running experiments
-# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-# timeout_each_job : FPGA Task script splits fpga flow into multiple jobs
-# Each job execute fpga_flow script on combination of architecture & benchmark
-# timeout_each_job is timeout for each job
-# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-
-[GENERAL]
-run_engine=openfpga_shell
-power_tech_file = ${PATH:OPENFPGA_PATH}/openfpga_flow/tech/PTM_45nm/45nm.xml
-power_analysis = true
-spice_output=false
-verilog_output=true
-timeout_each_job = 1*60
-fpga_flow=yosys_vpr
-
-[OpenFPGA_SHELL]
-openfpga_shell_template=${SKYWATER_OPENFPGA_HOME}/SCRIPT/openfpga_shell_script/skywater_generate_fabric_using_key_example_script.openfpga
-openfpga_arch_file=${SKYWATER_OPENFPGA_HOME}/ARCH/openfpga_arch/k4_frac_N8_reset_register_scan_chain_caravel_io_skywater130nm_fdhd_cc_openfpga.xml
-openfpga_sim_setting_file=${SKYWATER_OPENFPGA_HOME}/SCRIPT/openfpga_simulation_setting/efpga_12x12_sim_openfpga.xml
-openfpga_vpr_device_layout=12x12
-openfpga_vpr_route_chan_width=40
-openfpga_verilog_output_dir=${SKYWATER_OPENFPGA_HOME}/HDL/k4_N8_reset_caravel_io_FPGA_12x12_fdhd_cc
-openfpga_sdc_output_dir=${SKYWATER_OPENFPGA_HOME}/SDC/k4_N8_reset_caravel_io_FPGA_12x12_fdhd_cc
-external_fabric_key_file=${SKYWATER_OPENFPGA_HOME}/ARCH/fabric_key/fabric_key_12x12.xml
-
-[ARCHITECTURES]
-arch0=${SKYWATER_OPENFPGA_HOME}/ARCH/vpr_arch/k4_frac_N8_tileable_reset_register_scan_chain_nonLR_caravel_io_skywater130nm.xml
-
-[BENCHMARKS]
-bench0=${SKYWATER_OPENFPGA_HOME}/BENCHMARK/and2/and2.v
-
-[SYNTHESIS_PARAM]
-bench0_top = and2
-
-[SCRIPT_PARAM_MIN_ROUTE_CHAN_WIDTH]
-#end_flow_with_test=
diff --git a/SCRIPT/skywater_openfpga_task/k4_N8_reset_caravel_cc_fdhd_12x12/generate_sdc/config/task_template.conf b/SCRIPT/skywater_openfpga_task/k4_N8_reset_caravel_cc_fdhd_12x12/generate_sdc/config/task_template.conf
deleted file mode 100644
index 32618a5..0000000
--- a/SCRIPT/skywater_openfpga_task/k4_N8_reset_caravel_cc_fdhd_12x12/generate_sdc/config/task_template.conf
+++ /dev/null
@@ -1,37 +0,0 @@
-# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-# Configuration file for running experiments
-# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-# timeout_each_job : FPGA Task script splits fpga flow into multiple jobs
-# Each job execute fpga_flow script on combination of architecture & benchmark
-# timeout_each_job is timeout for each job
-# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-
-[GENERAL]
-run_engine=openfpga_shell
-power_tech_file = ${PATH:OPENFPGA_PATH}/openfpga_flow/tech/PTM_45nm/45nm.xml
-power_analysis = true
-spice_output=false
-verilog_output=true
-timeout_each_job = 1*60
-fpga_flow=yosys_vpr
-
-[OpenFPGA_SHELL]
-openfpga_shell_template=${SKYWATER_OPENFPGA_HOME}/SCRIPT/openfpga_shell_script/skywater_generate_sdc_using_key_example_script.openfpga
-openfpga_arch_file=${SKYWATER_OPENFPGA_HOME}/ARCH/openfpga_arch/k4_frac_N8_reset_register_scan_chain_caravel_io_skywater130nm_fdhd_cc_openfpga.xml
-openfpga_sim_setting_file=${SKYWATER_OPENFPGA_HOME}/SCRIPT/openfpga_simulation_setting/efpga_12x12_sim_openfpga.xml
-openfpga_vpr_device_layout=12x12
-openfpga_vpr_route_chan_width=40
-openfpga_sdc_output_dir=${SKYWATER_OPENFPGA_HOME}/SDC/k4_N8_reset_caravel_io_FPGA_12x12_fdhd_cc
-external_fabric_key_file=${SKYWATER_OPENFPGA_HOME}/ARCH/fabric_key/fabric_key_12x12.xml
-
-[ARCHITECTURES]
-arch0=${SKYWATER_OPENFPGA_HOME}/ARCH/vpr_arch/k4_frac_N8_tileable_reset_register_scan_chain_nonLR_caravel_io_skywater130nm.xml
-
-[BENCHMARKS]
-bench0=${SKYWATER_OPENFPGA_HOME}/BENCHMARK/and2/and2.v
-
-[SYNTHESIS_PARAM]
-bench0_top = and2
-
-[SCRIPT_PARAM_MIN_ROUTE_CHAN_WIDTH]
-#end_flow_with_test=
diff --git a/SCRIPT/skywater_openfpga_task/k4_N8_reset_caravel_cc_fdhd_12x12/generate_testbench/config/task_template.conf b/SCRIPT/skywater_openfpga_task/k4_N8_reset_caravel_cc_fdhd_12x12/generate_testbench/config/task_template.conf
deleted file mode 100644
index 6fe9240..0000000
--- a/SCRIPT/skywater_openfpga_task/k4_N8_reset_caravel_cc_fdhd_12x12/generate_testbench/config/task_template.conf
+++ /dev/null
@@ -1,54 +0,0 @@
-# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-# Configuration file for running experiments
-# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-# timeout_each_job : FPGA Task script splits fpga flow into multiple jobs
-# Each job execute fpga_flow script on combination of architecture & benchmark
-# timeout_each_job is timeout for each job
-# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-
-[GENERAL]
-run_engine=openfpga_shell
-power_tech_file = ${PATH:OPENFPGA_PATH}/openfpga_flow/tech/PTM_45nm/45nm.xml
-power_analysis = true
-spice_output=false
-verilog_output=true
-timeout_each_job = 1*60
-fpga_flow=yosys_vpr
-
-[OpenFPGA_SHELL]
-openfpga_shell_template=${SKYWATER_OPENFPGA_HOME}/SCRIPT/openfpga_shell_script/skywater_generate_testbench_using_key_example_script.openfpga
-openfpga_arch_file=${SKYWATER_OPENFPGA_HOME}/ARCH/openfpga_arch/k4_frac_N8_reset_register_scan_chain_caravel_io_skywater130nm_fdhd_cc_openfpga.xml
-openfpga_sim_setting_file=${SKYWATER_OPENFPGA_HOME}/SCRIPT/openfpga_simulation_setting/efpga_12x12_sim_openfpga.xml
-openfpga_vpr_device_layout=12x12
-openfpga_vpr_route_chan_width=40
-openfpga_verilog_output_dir=${SKYWATER_OPENFPGA_HOME}/TESTBENCH/k4_N8_reset_caravel_io_FPGA_12x12_fdhd_cc/prepnr
-openfpga_fabric_verilog_netlist=${SKYWATER_OPENFPGA_HOME}/HDL/k4_N8_reset_caravel_io_FPGA_12x12_fdhd_cc/SRC/fabric_netlists.v
-external_fabric_key_file=${SKYWATER_OPENFPGA_HOME}/ARCH/fabric_key/fabric_key_12x12.xml
-
-[ARCHITECTURES]
-arch0=${SKYWATER_OPENFPGA_HOME}/ARCH/vpr_arch/k4_frac_N8_tileable_reset_register_scan_chain_nonLR_caravel_io_skywater130nm.xml
-
-[BENCHMARKS]
-bench0=${SKYWATER_OPENFPGA_HOME}/BENCHMARK/and2/and2.v
-bench1=${SKYWATER_OPENFPGA_HOME}/BENCHMARK/and2_latch/and2_latch.v
-bench2=${SKYWATER_OPENFPGA_HOME}/BENCHMARK/bin2bcd/bin2bcd.v
-bench3=${SKYWATER_OPENFPGA_HOME}/BENCHMARK/counter/counter.v
-bench4=${SKYWATER_OPENFPGA_HOME}/BENCHMARK/routing_test/routing_test.v
-# RS decoder needs 1.5k LUT4, exceeding device capacity
-#bench5=${SKYWATER_OPENFPGA_HOME}/BENCHMARK/rs_decoder/rtl/rs_decoder.v
-bench6=${SKYWATER_OPENFPGA_HOME}/BENCHMARK/simon_bit_serial/rtl/*.v
-bench7=${SKYWATER_OPENFPGA_HOME}/BENCHMARK/and2_or2/and2_or2.v
-
-[SYNTHESIS_PARAM]
-bench0_top = and2
-bench1_top = and2_latch
-bench2_top = bin2bcd
-bench3_top = counter
-bench4_top = routing_test
-# RS decoder needs 1.5k LUT4, exceeding device capacity
-#bench5_top = rs_decoder_top
-bench6_top = top_module
-bench7_top = and2_or2
-
-[SCRIPT_PARAM_MIN_ROUTE_CHAN_WIDTH]
-#end_flow_with_test=
diff --git a/SCRIPT/skywater_openfpga_task/k4_N8_softadder_caravel_cc_fdhd_12x12/generate_fabric/config/task_template.conf b/SCRIPT/skywater_openfpga_task/k4_N8_softadder_caravel_cc_fdhd_12x12/generate_fabric/config/task_template.conf
deleted file mode 100644
index 3c1d0fc..0000000
--- a/SCRIPT/skywater_openfpga_task/k4_N8_softadder_caravel_cc_fdhd_12x12/generate_fabric/config/task_template.conf
+++ /dev/null
@@ -1,38 +0,0 @@
-# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-# Configuration file for running experiments
-# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-# timeout_each_job : FPGA Task script splits fpga flow into multiple jobs
-# Each job execute fpga_flow script on combination of architecture & benchmark
-# timeout_each_job is timeout for each job
-# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-
-[GENERAL]
-run_engine=openfpga_shell
-power_tech_file = ${PATH:OPENFPGA_PATH}/openfpga_flow/tech/PTM_45nm/45nm.xml
-power_analysis = true
-spice_output=false
-verilog_output=true
-timeout_each_job = 1*60
-fpga_flow=yosys_vpr
-
-[OpenFPGA_SHELL]
-openfpga_shell_template=${SKYWATER_OPENFPGA_HOME}/SCRIPT/openfpga_shell_script/skywater_generate_fabric_using_key_example_script.openfpga
-openfpga_arch_file=${SKYWATER_OPENFPGA_HOME}/ARCH/openfpga_arch/k4_frac_N8_softadder_register_scan_chain_caravel_io_skywater130nm_fdhd_cc_openfpga.xml
-openfpga_sim_setting_file=${SKYWATER_OPENFPGA_HOME}/SCRIPT/openfpga_simulation_setting/efpga_12x12_sim_openfpga.xml
-openfpga_vpr_device_layout=12x12
-openfpga_vpr_route_chan_width=40
-openfpga_verilog_output_dir=${SKYWATER_OPENFPGA_HOME}/HDL/k4_N8_softadder_caravel_io_FPGA_12x12_fdhd_cc
-openfpga_sdc_output_dir=${SKYWATER_OPENFPGA_HOME}/SDC/k4_N8_softadder_caravel_io_FPGA_12x12_fdhd_cc
-external_fabric_key_file=${SKYWATER_OPENFPGA_HOME}/ARCH/fabric_key/fabric_key_12x12.xml
-
-[ARCHITECTURES]
-arch0=${SKYWATER_OPENFPGA_HOME}/ARCH/vpr_arch/k4_frac_N8_tileable_softadder_register_scan_chain_nonLR_caravel_io_skywater130nm.xml
-
-[BENCHMARKS]
-bench0=${SKYWATER_OPENFPGA_HOME}/BENCHMARK/and2/and2.v
-
-[SYNTHESIS_PARAM]
-bench0_top = and2
-
-[SCRIPT_PARAM_MIN_ROUTE_CHAN_WIDTH]
-#end_flow_with_test=
diff --git a/SCRIPT/skywater_openfpga_task/k4_N8_softadder_caravel_cc_fdhd_12x12/generate_sdc/config/task_template.conf b/SCRIPT/skywater_openfpga_task/k4_N8_softadder_caravel_cc_fdhd_12x12/generate_sdc/config/task_template.conf
deleted file mode 100644
index bd6bd45..0000000
--- a/SCRIPT/skywater_openfpga_task/k4_N8_softadder_caravel_cc_fdhd_12x12/generate_sdc/config/task_template.conf
+++ /dev/null
@@ -1,37 +0,0 @@
-# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-# Configuration file for running experiments
-# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-# timeout_each_job : FPGA Task script splits fpga flow into multiple jobs
-# Each job execute fpga_flow script on combination of architecture & benchmark
-# timeout_each_job is timeout for each job
-# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-
-[GENERAL]
-run_engine=openfpga_shell
-power_tech_file = ${PATH:OPENFPGA_PATH}/openfpga_flow/tech/PTM_45nm/45nm.xml
-power_analysis = true
-spice_output=false
-verilog_output=true
-timeout_each_job = 1*60
-fpga_flow=yosys_vpr
-
-[OpenFPGA_SHELL]
-openfpga_shell_template=${SKYWATER_OPENFPGA_HOME}/SCRIPT/openfpga_shell_script/skywater_generate_sdc_using_key_example_script.openfpga
-openfpga_arch_file=${SKYWATER_OPENFPGA_HOME}/ARCH/openfpga_arch/k4_frac_N8_softadder_register_scan_chain_caravel_io_skywater130nm_fdhd_cc_openfpga.xml
-openfpga_sim_setting_file=${SKYWATER_OPENFPGA_HOME}/SCRIPT/openfpga_simulation_setting/efpga_12x12_sim_openfpga.xml
-openfpga_vpr_device_layout=12x12
-openfpga_vpr_route_chan_width=40
-openfpga_sdc_output_dir=${SKYWATER_OPENFPGA_HOME}/SDC/k4_N8_softadder_caravel_io_FPGA_12x12_fdhd_cc
-external_fabric_key_file=${SKYWATER_OPENFPGA_HOME}/ARCH/fabric_key/fabric_key_12x12.xml
-
-[ARCHITECTURES]
-arch0=${SKYWATER_OPENFPGA_HOME}/ARCH/vpr_arch/k4_frac_N8_tileable_softadder_register_scan_chain_nonLR_caravel_io_skywater130nm.xml
-
-[BENCHMARKS]
-bench0=${SKYWATER_OPENFPGA_HOME}/BENCHMARK/and2/and2.v
-
-[SYNTHESIS_PARAM]
-bench0_top = and2
-
-[SCRIPT_PARAM_MIN_ROUTE_CHAN_WIDTH]
-#end_flow_with_test=
diff --git a/SCRIPT/skywater_openfpga_task/k4_N8_softadder_caravel_cc_fdhd_12x12/generate_testbench/config/task_template.conf b/SCRIPT/skywater_openfpga_task/k4_N8_softadder_caravel_cc_fdhd_12x12/generate_testbench/config/task_template.conf
deleted file mode 100644
index 69f70a1..0000000
--- a/SCRIPT/skywater_openfpga_task/k4_N8_softadder_caravel_cc_fdhd_12x12/generate_testbench/config/task_template.conf
+++ /dev/null
@@ -1,54 +0,0 @@
-# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-# Configuration file for running experiments
-# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-# timeout_each_job : FPGA Task script splits fpga flow into multiple jobs
-# Each job execute fpga_flow script on combination of architecture & benchmark
-# timeout_each_job is timeout for each job
-# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-
-[GENERAL]
-run_engine=openfpga_shell
-power_tech_file = ${PATH:OPENFPGA_PATH}/openfpga_flow/tech/PTM_45nm/45nm.xml
-power_analysis = true
-spice_output=false
-verilog_output=true
-timeout_each_job = 1*60
-fpga_flow=yosys_vpr
-
-[OpenFPGA_SHELL]
-openfpga_shell_template=${SKYWATER_OPENFPGA_HOME}/SCRIPT/openfpga_shell_script/skywater_generate_testbench_using_key_example_script.openfpga
-openfpga_arch_file=${SKYWATER_OPENFPGA_HOME}/ARCH/openfpga_arch/k4_frac_N8_softadder_register_scan_chain_caravel_io_skywater130nm_fdhd_cc_openfpga.xml
-openfpga_sim_setting_file=${SKYWATER_OPENFPGA_HOME}/SCRIPT/openfpga_simulation_setting/efpga_12x12_sim_openfpga.xml
-openfpga_vpr_device_layout=12x12
-openfpga_vpr_route_chan_width=40
-openfpga_verilog_output_dir=${SKYWATER_OPENFPGA_HOME}/TESTBENCH/k4_N8_softadder_caravel_io_FPGA_12x12_fdhd_cc/prepnr
-openfpga_fabric_verilog_netlist=${SKYWATER_OPENFPGA_HOME}/HDL/k4_N8_softadder_caravel_io_FPGA_12x12_fdhd_cc/SRC/fabric_netlists.v
-external_fabric_key_file=${SKYWATER_OPENFPGA_HOME}/ARCH/fabric_key/fabric_key_12x12.xml
-
-[ARCHITECTURES]
-arch0=${SKYWATER_OPENFPGA_HOME}/ARCH/vpr_arch/k4_frac_N8_tileable_softadder_register_scan_chain_nonLR_caravel_io_skywater130nm.xml
-
-[BENCHMARKS]
-bench0=${SKYWATER_OPENFPGA_HOME}/BENCHMARK/and2/and2.v
-bench1=${SKYWATER_OPENFPGA_HOME}/BENCHMARK/and2_latch/and2_latch.v
-bench2=${SKYWATER_OPENFPGA_HOME}/BENCHMARK/bin2bcd/bin2bcd.v
-bench3=${SKYWATER_OPENFPGA_HOME}/BENCHMARK/counter/counter.v
-bench4=${SKYWATER_OPENFPGA_HOME}/BENCHMARK/routing_test/routing_test.v
-# RS decoder needs 1.5k LUT4, exceeding device capacity
-#bench5=${SKYWATER_OPENFPGA_HOME}/BENCHMARK/rs_decoder/rtl/rs_decoder.v
-bench6=${SKYWATER_OPENFPGA_HOME}/BENCHMARK/simon_bit_serial/rtl/*.v
-bench7=${SKYWATER_OPENFPGA_HOME}/BENCHMARK/and2_or2/and2_or2.v
-
-[SYNTHESIS_PARAM]
-bench0_top = and2
-bench1_top = and2_latch
-bench2_top = bin2bcd
-bench3_top = counter
-bench4_top = routing_test
-# RS decoder needs 1.5k LUT4, exceeding device capacity
-#bench5_top = rs_decoder_top
-bench6_top = top_module
-bench7_top = and2_or2
-
-[SCRIPT_PARAM_MIN_ROUTE_CHAN_WIDTH]
-#end_flow_with_test=
diff --git a/TESTBENCH/common/ccff_test_post_pnr.v b/TESTBENCH/common/ccff_test_post_pnr_v1.0.v
similarity index 100%
rename from TESTBENCH/common/ccff_test_post_pnr.v
rename to TESTBENCH/common/ccff_test_post_pnr_v1.0.v
diff --git a/TESTBENCH/common/ccff_test_post_pnr_v1.1.v b/TESTBENCH/common/ccff_test_post_pnr_v1.1.v
new file mode 100644
index 0000000..978b08b
--- /dev/null
+++ b/TESTBENCH/common/ccff_test_post_pnr_v1.1.v
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:54de2236bc41e29dfa92693844fc6c1f4d50a3b61f4b0055c9db9ac8877ace49
+size 6051
diff --git a/TESTBENCH/common/post_pnr_fpga_cells.v b/TESTBENCH/common/post_pnr_fpga_cells.v
index cebd223..5bfa734 100644
--- a/TESTBENCH/common/post_pnr_fpga_cells.v
+++ b/TESTBENCH/common/post_pnr_fpga_cells.v
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4ae0fb278944fcfc542a395b998e06e1c5d473df8d7d192ff9a386f1ba596ee4
-size 7630
+oid sha256:89b4703e97499ddd03efb70998f547462d7a8fa5d27e2c2d2af132b2050e195d
+size 7942
diff --git a/TESTBENCH/common/scff_test_post_pnr.v b/TESTBENCH/common/scff_test_post_pnr_v1.0.v
similarity index 100%
rename from TESTBENCH/common/scff_test_post_pnr.v
rename to TESTBENCH/common/scff_test_post_pnr_v1.0.v
diff --git a/TESTBENCH/common/scff_test_post_pnr_v1.1.v b/TESTBENCH/common/scff_test_post_pnr_v1.1.v
new file mode 100644
index 0000000..1b1a7b1
--- /dev/null
+++ b/TESTBENCH/common/scff_test_post_pnr_v1.1.v
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dcad9b2185f4571e82799aca46235e4193c3744c41b4ed6507ea2f339c9d894a
+size 5872
diff --git a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_latch_post_pnr_include_netlists.v b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_latch_post_pnr_include_netlists.v
index c1b7265..e40f43e 100644
--- a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_latch_post_pnr_include_netlists.v
+++ b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_latch_post_pnr_include_netlists.v
@@ -1,30 +1,3 @@
-//-------------------------------------------
-// FPGA Synthesizable Verilog Netlist
-// Description: Netlist Summary
-// Author: Xifan TANG
-// Organization: University of Utah
-// Date: Wed Nov 11 16:01:30 2020
-//-------------------------------------------
-//----- Time scale -----
-`timescale 1ns / 1ps
-
-// ------ Include simulation defines -----
-`include "/research/ece/lnis/USERS/tang/github/skywater-openfpga/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/prepnr/verilog_testbench/define_simulation.v"
-
-`include "/research/ece/lnis/USERS/tang/github/skywater-openfpga/HDL/common/skywater_function_verification.v"
-
-// ------ Include Skywater cell netlists -----
-`include "/research/ece/lnis/USERS/tang/github/skywater-openfpga/TESTBENCH/common/post_pnr_fpga_cells.v"
-
-// ------ Include fabric top-level netlists -----
-//`include "/research/ece/lnis/USERS/tang/github/skywater-openfpga/FPGA1212_FC_HD_SKY_PNR/fpga_core/fpga_core_icv_in_design.pt.v"
-`include "/research/ece/lnis/USERS/DARPA_ERI/Tapeout/Nov2020_Skywater/FPGA1212_FLAT_HD_SKY_PNR/fpga_top/fpga_top_icv_in_design.pt.v"
-
-`ifdef AUTOCHECKED_SIMULATION
- `include "and2_latch_output_verilog.v"
-`endif
-
-`ifdef AUTOCHECKED_SIMULATION
- `include "/research/ece/lnis/USERS/tang/github/skywater-openfpga/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_latch_post_pnr_autocheck_top_tb.v"
-`endif
-
+version https://git-lfs.github.com/spec/v1
+oid sha256:3140f41d14f1046308ebd07b6527c4ec781ab3c18e63b237aba9b435b9c044de
+size 1239
diff --git a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_latch_post_pnr_wrapper_include_netlists.v b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_latch_post_pnr_wrapper_include_netlists.v
index 8851916..2781b69 100644
--- a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_latch_post_pnr_wrapper_include_netlists.v
+++ b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_latch_post_pnr_wrapper_include_netlists.v
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:92f909b526ee576979b1a02b23171c242ff03e62d862f06413b6a5236e5377cb
-size 1478
+oid sha256:9d2003a31c42e9558a77f3891b6284affed509e22d38dbb150f475db968c5f8e
+size 1343
diff --git a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_or2_post_pnr_include_netlists.v b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_or2_post_pnr_include_netlists.v
index 694c7f1..731e086 100644
--- a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_or2_post_pnr_include_netlists.v
+++ b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_or2_post_pnr_include_netlists.v
@@ -1,30 +1,3 @@
-//-------------------------------------------
-// FPGA Synthesizable Verilog Netlist
-// Description: Netlist Summary
-// Author: Xifan TANG
-// Organization: University of Utah
-// Date: Sun Nov 22 13:37:06 2020
-//-------------------------------------------
-//----- Time scale -----
-`timescale 1ns / 1ps
-
-// ------ Include simulation defines -----
-`include "/research/ece/lnis/USERS/tang/github/skywater-openfpga/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/prepnr/verilog_testbench/define_simulation.v"
-
-`include "/research/ece/lnis/USERS/tang/github/skywater-openfpga/HDL/common/skywater_function_verification.v"
-
-// ------ Include Skywater cell netlists -----
-`include "/research/ece/lnis/USERS/tang/github/skywater-openfpga/TESTBENCH/common/post_pnr_fpga_cells.v"
-
-// ------ Include fabric top-level netlists -----
-//`include "/research/ece/lnis/USERS/tang/github/skywater-openfpga/FPGA1212_FC_HD_SKY_PNR/fpga_core/fpga_core_icv_in_design.pt.v"
-`include "/research/ece/lnis/USERS/DARPA_ERI/Tapeout/Nov2020_Skywater/FPGA1212_FLAT_HD_SKY_PNR/fpga_top/fpga_top_icv_in_design.pt.v"
-
-`ifdef AUTOCHECKED_SIMULATION
- `include "and2_or2_output_verilog.v"
-`endif
-
-`ifdef AUTOCHECKED_SIMULATION
- `include "/research/ece/lnis/USERS/tang/github/skywater-openfpga/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_or2_post_pnr_autocheck_top_tb.v"
-`endif
-
+version https://git-lfs.github.com/spec/v1
+oid sha256:6395e2f33f3dcb8dad1c92fa0659bc4b842b3495d683add90e50d942e28b6ef1
+size 1235
diff --git a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_or2_post_pnr_wrapper_include_netlists.v b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_or2_post_pnr_wrapper_include_netlists.v
index 7354521..f9dd991 100644
--- a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_or2_post_pnr_wrapper_include_netlists.v
+++ b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_or2_post_pnr_wrapper_include_netlists.v
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:825a6a406d866bda71202b39eb897b967484f3dc7c3cf7a62aa18791e54df573
-size 1474
+oid sha256:ec87f38ebc0e4f795a0a72b760f6181288ef6f7cc72f7708ec21d77a1ea8c28d
+size 1339
diff --git a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_post_pnr_include_netlists.v b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_post_pnr_include_netlists.v
index 24d1f7b..bf40134 100644
--- a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_post_pnr_include_netlists.v
+++ b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_post_pnr_include_netlists.v
@@ -1,30 +1,3 @@
-//-------------------------------------------
-// FPGA Synthesizable Verilog Netlist
-// Description: Netlist Summary
-// Author: Xifan TANG
-// Organization: University of Utah
-// Date: Wed Nov 11 16:01:30 2020
-//-------------------------------------------
-//----- Time scale -----
-`timescale 1ns / 1ps
-
-// ------ Include simulation defines -----
-`include "/research/ece/lnis/USERS/tang/github/skywater-openfpga/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/prepnr/verilog_testbench/define_simulation.v"
-
-`include "/research/ece/lnis/USERS/tang/github/skywater-openfpga/HDL/common/skywater_function_verification.v"
-
-// ------ Include Skywater cell netlists -----
-`include "/research/ece/lnis/USERS/tang/github/skywater-openfpga/TESTBENCH/common/post_pnr_fpga_cells.v"
-
-// ------ Include fabric top-level netlists -----
-//`include "/research/ece/lnis/USERS/tang/github/skywater-openfpga/FPGA1212_FC_HD_SKY_PNR/fpga_core/fpga_core_icv_in_design.pt.v"
-`include "/research/ece/lnis/USERS/DARPA_ERI/Tapeout/Nov2020_Skywater/FPGA1212_FLAT_HD_SKY_PNR/fpga_top/fpga_top_icv_in_design.pt.v"
-
-`ifdef AUTOCHECKED_SIMULATION
- `include "and2_output_verilog.v"
-`endif
-
-`ifdef AUTOCHECKED_SIMULATION
- `include "/research/ece/lnis/USERS/tang/github/skywater-openfpga/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_post_pnr_autocheck_top_tb.v"
-`endif
-
+version https://git-lfs.github.com/spec/v1
+oid sha256:0168df4405980eb7be0f0231735794d86c514199126d0941f043ba38905d0c4f
+size 1227
diff --git a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_post_pnr_wrapper_include_netlists.v b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_post_pnr_wrapper_include_netlists.v
index 40df803..1e21a4f 100644
--- a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_post_pnr_wrapper_include_netlists.v
+++ b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_post_pnr_wrapper_include_netlists.v
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9f6df360605df5a436036afc2ccf3b950ce42b3c9ea396350cd4ebbb4d705b9d
-size 1466
+oid sha256:3fc3f03b263ff267b9543c09f338222e9e9950978915a10a16825decd8deab4c
+size 1331
diff --git a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/ccff_test_post_pnr_include_netlists.v b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/ccff_test_post_pnr_include_netlists.v
index 0f03de9..30a2005 100644
--- a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/ccff_test_post_pnr_include_netlists.v
+++ b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/ccff_test_post_pnr_include_netlists.v
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f3da10525b0dff707611379ed6ae1348c294eae1a8cd31499ce2e35dde3beaab
-size 1329
+oid sha256:5b1dbfb9b52a4e87e544773b46710111d2a53c24922de3e10eefd82c7d280f0b
+size 1199
diff --git a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/ccff_test_post_pnr_wrapper_include_netlists.v b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/ccff_test_post_pnr_wrapper_include_netlists.v
index 838b868..386cac1 100644
--- a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/ccff_test_post_pnr_wrapper_include_netlists.v
+++ b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/ccff_test_post_pnr_wrapper_include_netlists.v
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:06bb3d6a1ee52298d3ac59ad73f16132b268c013b3cb411d0dfe6f033f6aed36
-size 1488
+oid sha256:f5fe62252b7eae6cd437a4fde8a18dcdcc61e629ab847b6bffa2d8d0d8dc60b4
+size 1353
diff --git a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/routing_test_post_pnr_include_netlists.v b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/routing_test_post_pnr_include_netlists.v
index 3f49591..79c523c 100644
--- a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/routing_test_post_pnr_include_netlists.v
+++ b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/routing_test_post_pnr_include_netlists.v
@@ -1,30 +1,3 @@
-//-------------------------------------------
-// FPGA Synthesizable Verilog Netlist
-// Description: Netlist Summary
-// Author: Xifan TANG
-// Organization: University of Utah
-// Date: Fri Nov 20 15:48:54 2020
-//-------------------------------------------
-//----- Time scale -----
-`timescale 1ns / 1ps
-
-// ------ Include simulation defines -----
-`include "/research/ece/lnis/USERS/tang/github/skywater-openfpga/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/prepnr/verilog_testbench/define_simulation.v"
-
-`include "/research/ece/lnis/USERS/tang/github/skywater-openfpga/HDL/common/skywater_function_verification.v"
-
-// ------ Include Skywater cell netlists -----
-`include "/research/ece/lnis/USERS/tang/github/skywater-openfpga/TESTBENCH/common/post_pnr_fpga_cells.v"
-
-// ------ Include fabric top-level netlists -----
-//`include "/research/ece/lnis/USERS/tang/github/skywater-openfpga/FPGA1212_FC_HD_SKY_PNR/fpga_core/fpga_core_icv_in_design.pt.v"
-`include "/research/ece/lnis/USERS/DARPA_ERI/Tapeout/Nov2020_Skywater/FPGA1212_FLAT_HD_SKY_PNR/fpga_top/fpga_top_icv_in_design.pt.v"
-
-`ifdef AUTOCHECKED_SIMULATION
- `include "routing_test_output_verilog.v"
-`endif
-
-`ifdef AUTOCHECKED_SIMULATION
- `include "/research/ece/lnis/USERS/tang/github/skywater-openfpga/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/routing_test_post_pnr_autocheck_top_tb.v"
-`endif
-
+version https://git-lfs.github.com/spec/v1
+oid sha256:9a2a5d743a10211cd55496c15a559690e5a09a328edcb0942d901ba5e5df48b8
+size 1243
diff --git a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/routing_test_post_pnr_wrapper_include_netlists.v b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/routing_test_post_pnr_wrapper_include_netlists.v
index 7139452..e440cab 100644
--- a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/routing_test_post_pnr_wrapper_include_netlists.v
+++ b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/routing_test_post_pnr_wrapper_include_netlists.v
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3adff4e62fe53b8cef99dc752bab3ebc6890445d6263b3aad5fdec154f53fbcf
-size 1482
+oid sha256:a18b7fab25c736e3d465a51353672d7bc5dc7e693145fee2837afc1d11b78289
+size 1347
diff --git a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/scff_test_post_pnr_include_netlists.v b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/scff_test_post_pnr_include_netlists.v
index ae327f8..1edcd07 100644
--- a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/scff_test_post_pnr_include_netlists.v
+++ b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/scff_test_post_pnr_include_netlists.v
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f25455fe75150d87bcfb386c5c953172a1712655ec1e38017d22aeb062314a6d
-size 1328
+oid sha256:98d430047e77dd1e59a84fd4fdc368b229f29e27ae0354657e166db51e2f56a3
+size 1198
diff --git a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/scff_test_post_pnr_wrapper_include_netlists.v b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/scff_test_post_pnr_wrapper_include_netlists.v
index 5694280..8783bb0 100644
--- a/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/scff_test_post_pnr_wrapper_include_netlists.v
+++ b/TESTBENCH/k4_N8_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/scff_test_post_pnr_wrapper_include_netlists.v
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c3b64adf49892e8d7e7263273e76b566cb1f0922d404c224d550136d43b49178
-size 1487
+oid sha256:5dd9f4ffe36c1f5ac05ff49da29ec5541913f2e2efce7cf7a4c7e1cb9120264e
+size 1352
diff --git a/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_latch_post_pnr_include_netlists.v b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_latch_post_pnr_include_netlists.v
new file mode 100644
index 0000000..ca377b7
--- /dev/null
+++ b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_latch_post_pnr_include_netlists.v
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:32e7a27472ef1501fec8765f8a7beb44ab61c84c514a5f63801840cfdec20eb7
+size 1272
diff --git a/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_latch_post_pnr_wrapper_include_netlists.v b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_latch_post_pnr_wrapper_include_netlists.v
new file mode 100644
index 0000000..5d0b93a
--- /dev/null
+++ b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_latch_post_pnr_wrapper_include_netlists.v
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c2067d21d21d3666ebe52b8de512bf06020ab395b65304387709e166e1d43a23
+size 1376
diff --git a/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_or2_post_pnr_include_netlists.v b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_or2_post_pnr_include_netlists.v
new file mode 100644
index 0000000..b93bc4a
--- /dev/null
+++ b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_or2_post_pnr_include_netlists.v
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ee2934fe5c3048ac3655a3cc6213f176d83c3495aef7428904ad229f39d424a0
+size 1268
diff --git a/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_or2_post_pnr_wrapper_include_netlists.v b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_or2_post_pnr_wrapper_include_netlists.v
new file mode 100644
index 0000000..c87613f
--- /dev/null
+++ b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_or2_post_pnr_wrapper_include_netlists.v
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1707e2d2da1c2eba04f17079d9d9144b71be24bf19b9d99c83ceefc5d46d6afd
+size 1372
diff --git a/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_post_pnr_include_netlists.v b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_post_pnr_include_netlists.v
new file mode 100644
index 0000000..0fe63cd
--- /dev/null
+++ b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_post_pnr_include_netlists.v
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:35a893d7106b66061ef6c45570ba26c5eb2cc31c1ba667193e01003e1a3c8294
+size 1260
diff --git a/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_post_pnr_wrapper_include_netlists.v b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_post_pnr_wrapper_include_netlists.v
new file mode 100644
index 0000000..d6c6337
--- /dev/null
+++ b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/and2_post_pnr_wrapper_include_netlists.v
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3cfd0b49a75dbcc308f61212ed162d2c74c9343bffe35d78cb39fa553507b559
+size 1364
diff --git a/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/ccff_test_post_pnr_include_netlists.v b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/ccff_test_post_pnr_include_netlists.v
new file mode 100644
index 0000000..114dfab
--- /dev/null
+++ b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/ccff_test_post_pnr_include_netlists.v
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fe32ecd75d97fefe74d1e1e01713ed38098f845cc37aad617b161e64a05a4e36
+size 1216
diff --git a/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/ccff_test_post_pnr_wrapper_include_netlists.v b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/ccff_test_post_pnr_wrapper_include_netlists.v
new file mode 100644
index 0000000..222f122
--- /dev/null
+++ b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/ccff_test_post_pnr_wrapper_include_netlists.v
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cedd3fbe2dc2158e46da28ab3b630b45571f7015b89f29391b092bb3860fdbcc
+size 1386
diff --git a/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/routing_test_post_pnr_include_netlists.v b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/routing_test_post_pnr_include_netlists.v
new file mode 100644
index 0000000..a37047e
--- /dev/null
+++ b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/routing_test_post_pnr_include_netlists.v
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7dbfbefcae891ea972982503967a7dc838843bd86ff134873a38da4a1c4b4a1f
+size 1276
diff --git a/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/routing_test_post_pnr_wrapper_include_netlists.v b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/routing_test_post_pnr_wrapper_include_netlists.v
new file mode 100644
index 0000000..d5bbb87
--- /dev/null
+++ b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/routing_test_post_pnr_wrapper_include_netlists.v
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b5388c9df5e22b40644563abea84f530445b17a43673499bcfcb9680acf5aa66
+size 1380
diff --git a/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/scff_test_post_pnr_include_netlists.v b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/scff_test_post_pnr_include_netlists.v
new file mode 100644
index 0000000..3c6c896
--- /dev/null
+++ b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/scff_test_post_pnr_include_netlists.v
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8cb80347043fd1a8fab62f8963bf174668951941f6a60e3ba6db9c2a0f439b07
+size 1215
diff --git a/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/scff_test_post_pnr_wrapper_include_netlists.v b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/scff_test_post_pnr_wrapper_include_netlists.v
new file mode 100644
index 0000000..73ead6b
--- /dev/null
+++ b/TESTBENCH/k4_N8_reset_softadder_caravel_io_FPGA_12x12_fdhd_cc/postpnr/verilog_testbench/scff_test_post_pnr_wrapper_include_netlists.v
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e7a163317878eb9295a02108efc9a8e7c3f4a5485aa05e03bd29b40445d88d88
+size 1385