summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeith Rothman <537074+litghost@users.noreply.github.com>2021-04-07 14:52:39 -0700
committerKeith Rothman <537074+litghost@users.noreply.github.com>2021-04-07 14:56:59 -0700
commitc62c80f7becfd04398485e744848086c791de630 (patch)
tree78efea96d6f5594373693a4136a12c2e46c123c4
parente86e6766fd8f35282765bce7fca0446132e1d99f (diff)
downloadfpga-interchange-schema-c62c80f7becfd04398485e744848086c791de630.tar.gz
fpga-interchange-schema-c62c80f7becfd04398485e744848086c791de630.tar.bz2
fpga-interchange-schema-c62c80f7becfd04398485e744848086c791de630.zip
Initial BEL and site design discussion.
Signed-off-by: Keith Rothman <537074+litghost@users.noreply.github.com>
-rw-r--r--docs/bel_and_site_design.md132
-rw-r--r--docs/eos_slice.png-057.pngbin0 -> 67356 bytes
-rw-r--r--docs/frac_lut4.pngbin0 -> 14712 bytes
-rw-r--r--docs/frac_lut4_a.pngbin0 -> 16987 bytes
-rw-r--r--docs/frac_lut4_b.pngbin0 -> 17135 bytes
-rw-r--r--docs/highlight_bottom_lut6.pngbin0 -> 107058 bytes
-rw-r--r--docs/highlight_muxf5.pngbin0 -> 105240 bytes
-rw-r--r--docs/highlight_muxf5_muxf6.pngbin0 -> 105303 bytes
-rw-r--r--docs/highlight_top_lut6.pngbin0 -> 107113 bytes
-rw-r--r--docs/stratix10_highlight_lut5.pngbin0 -> 65872 bytes
-rw-r--r--docs/stratix10_highlight_lut6.pngbin0 -> 65726 bytes
-rw-r--r--docs/stratix10_highlight_muxf5_muxf6.pngbin0 -> 64485 bytes
-rw-r--r--docs/stratix10_slice.png-11.pngbin0 -> 52592 bytes
-rw-r--r--docs/stratix2_slice.png-026.pngbin0 -> 84484 bytes
-rw-r--r--docs/stratix2_slice.png-026_rotate.pngbin0 -> 95601 bytes
-rw-r--r--docs/versal_slice.png-12.pngbin0 -> 181163 bytes
16 files changed, 132 insertions, 0 deletions
diff --git a/docs/bel_and_site_design.md b/docs/bel_and_site_design.md
new file mode 100644
index 0000000..943e8c3
--- /dev/null
+++ b/docs/bel_and_site_design.md
@@ -0,0 +1,132 @@
+## Cell, BEL and Site Design
+
+One of the key concepts within the FPGA interchange device resources is the
+relationship between the cell library and the device BEL and site definitions.
+A well designed cell library and a flexible but consise BEL and site
+definition is important for exposing the hardware in an efficient way that
+enables a place and route tool to succeed.
+
+Good design is hard to capture, but this document will talk about some of the
+considerations.
+
+## Granularity of the cell library
+
+It is important to divide the place and route problem and the synthesis
+problem, at least as defined for the purpose of the FPGA interchange. The
+synthesis tool operates on the **cell library**, which should be designed to
+expose logic elements at a useful level of granularity.
+
+As a concrete example, a LUT4 element is techinically just two LUT3 elements,
+connected by a mux (e.g. MUXF4), a LUT3 element is just two LUT2 elements,
+connected by a mux (e.g. MUXF3), etc. If the outputs of those interior muxes
+are not accessible to the place and route tool, then exposing those interior
+function muxes as cells in the cell library is not a useful.
+
+Cell definitions should be granular enough that the synthesis can map to
+them, but not so granular that the place and route tool will be making few if
+any choices. If there is only one legal placement of the cell, it's value is
+relatively low.
+
+## Drawing site boundries
+
+When designing an FPGA interchange device resource for a new fabric, one
+important consideration is where to draw the site boundary. The primary goal
+of lumping BELs within a site is to capture some local congestion due to
+fanout limitations. Interior static routing muxes and output muxes may
+accomidate significantly fewer signals than the possible number of BELs that
+drive them. In this case, it is important to draw the site boundary large
+enough to capture these cases so as to enable the local congestion to be
+resolved during either packing for clustered approaches, or during placement
+during unclustered approaches. In either case, local congestion that is
+strongly placement dependant must be resolved prior to general routing,
+unless a fused placement and routing algorithm is used.
+
+## Drawing BEL boundaries
+
+BEL definitions require that creating a boundary around primitive elements of
+the fabric. The choice of where to place that boundary has a strong influence
+on the design of the cell library in the FPGA interchange.
+
+In general, the smaller the BEL boundary, the more complexity is exposed to
+the place and route tool. In some cases exposing this complexity is
+important, because it enables some goal. For example, leaving static routing
+muxes outside of BELs enables a place and route tool to have greater
+flexiblity when resolving site congestion. But as a counter point, if only
+a handful of static mux configurations are useful and those choices can be
+made at synthesis time, then lumping those muxes into synthesis reduces the
+complexity required in the place and route tool.
+
+The most common case where the static routing muxes are typically lumped into
+the BEL is BRAM's and FIFO's address and routing configuration. At synthesis
+time, a choice is made about the address and data widths, which are encoded as
+parameters on the cell. The place and route tool does not typically make
+meaningful choices on to configuration those static routing muxes, but they
+do exist in the hardware.
+
+The most common case where the static routing muxes are almost never lumped
+into the BEL is SLICE-type situations. The remainder of this document will
+show examples of why the BEL boundary should typically exclude the static
+routing muxes, and leave the choice to the place and route tooling.
+
+### Stratix II and Stratix 10 ALM
+
+![Stratix II](stratix2_slice.png-026_rotate.png)
+
+![Stratix 10](stratix10_slice.png-11.png)
+
+Consider both Stratix II and Stratix 10 logic sites. The first thing to note
+is that the architectures at this level are actually mostly the same. Though
+it isn't immediately apparent, both designs are structured around 4 4-LUT
+elements.
+
+Take note that of the following structure:
+
+![Stratix II fractured LUT4](frac_lut4.png)
+
+This is actually just two LUT4 elements, where the top select line is
+independent.
+
+See the following two figures:
+
+![Stratix II fractured LUT4 Top](frac_lut4_a.png)
+![Stratix II fractured LUT4 Bottom](frac_lut4_b.png)
+
+In Stratix 10, the LUT4 element is still present, but the top select line
+fracturing was removed.
+
+So now consider the output paths from the the 4 LUT4 elements in the Stratix
+II site. Some of the LUT4 outputs route directly to the carry element, so it
+will be important for the place and route tool be able to place a LUT4 or
+smaller to access that direct connection. But if the output is not used in
+the carry element, then it can only be accessed in Stratix II via the MUXF5
+(blue below) and MUXF6 (red below) elements.
+
+![Stratix II Highlight MUXF5 and MUXF6](highlight_muxf5_muxf6.png)
+
+So given the Stratix II site layout, the following BELs will be requires:
+
+ - 4 LUT4 BELs that connect to the carry
+ - 2 LUT6 BELs that connect to the output FF or output MUX.
+
+The two LUT6 BELs are shown below:
+
+![Stratix II Top LUT6](highlight_top_lut6.png)
+![Stratix II Top LUT6](highlight_bottom_lut6.png)
+
+Drawing a smaller BEL boundary has little value, because a LUT5 element would
+still always require routing through the MUXF6 element.
+
+Now consider the Stratix 10 output arrangement. The LUT4 elements direct to
+the carry element is the same, so those BELs would be identical. The Stratix
+10 site now has an output tap directly on the top LUT5, similiar to the Xilinx
+Versal LUT6 / LUT5 fracture setup. See diagram below. LUT5 element is shown
+in blue, and LUT6 element is shown in red.
+
+![Stratix 10 2 LUT5](stratix10_highlight_lut5.png)
+![Stratix 10 LUT6](stratix10_highlight_lut6.png)
+
+So given the Stratix 10 site layout, the following BELs will be requires:
+
+ - 4 LUT4 BELs that connect to the carry
+ - 2 LUT5 BELs that connect to the output FF or output MUX
+ - 1 LUT6 BELs that connect to the output FF or output MUX
diff --git a/docs/eos_slice.png-057.png b/docs/eos_slice.png-057.png
new file mode 100644
index 0000000..d0597ca
--- /dev/null
+++ b/docs/eos_slice.png-057.png
Binary files differ
diff --git a/docs/frac_lut4.png b/docs/frac_lut4.png
new file mode 100644
index 0000000..8ae555d
--- /dev/null
+++ b/docs/frac_lut4.png
Binary files differ
diff --git a/docs/frac_lut4_a.png b/docs/frac_lut4_a.png
new file mode 100644
index 0000000..9f70043
--- /dev/null
+++ b/docs/frac_lut4_a.png
Binary files differ
diff --git a/docs/frac_lut4_b.png b/docs/frac_lut4_b.png
new file mode 100644
index 0000000..4974781
--- /dev/null
+++ b/docs/frac_lut4_b.png
Binary files differ
diff --git a/docs/highlight_bottom_lut6.png b/docs/highlight_bottom_lut6.png
new file mode 100644
index 0000000..2f82340
--- /dev/null
+++ b/docs/highlight_bottom_lut6.png
Binary files differ
diff --git a/docs/highlight_muxf5.png b/docs/highlight_muxf5.png
new file mode 100644
index 0000000..94f0228
--- /dev/null
+++ b/docs/highlight_muxf5.png
Binary files differ
diff --git a/docs/highlight_muxf5_muxf6.png b/docs/highlight_muxf5_muxf6.png
new file mode 100644
index 0000000..5512685
--- /dev/null
+++ b/docs/highlight_muxf5_muxf6.png
Binary files differ
diff --git a/docs/highlight_top_lut6.png b/docs/highlight_top_lut6.png
new file mode 100644
index 0000000..a78a1c2
--- /dev/null
+++ b/docs/highlight_top_lut6.png
Binary files differ
diff --git a/docs/stratix10_highlight_lut5.png b/docs/stratix10_highlight_lut5.png
new file mode 100644
index 0000000..ae621a6
--- /dev/null
+++ b/docs/stratix10_highlight_lut5.png
Binary files differ
diff --git a/docs/stratix10_highlight_lut6.png b/docs/stratix10_highlight_lut6.png
new file mode 100644
index 0000000..c14aab1
--- /dev/null
+++ b/docs/stratix10_highlight_lut6.png
Binary files differ
diff --git a/docs/stratix10_highlight_muxf5_muxf6.png b/docs/stratix10_highlight_muxf5_muxf6.png
new file mode 100644
index 0000000..3addc52
--- /dev/null
+++ b/docs/stratix10_highlight_muxf5_muxf6.png
Binary files differ
diff --git a/docs/stratix10_slice.png-11.png b/docs/stratix10_slice.png-11.png
new file mode 100644
index 0000000..a84aa6a
--- /dev/null
+++ b/docs/stratix10_slice.png-11.png
Binary files differ
diff --git a/docs/stratix2_slice.png-026.png b/docs/stratix2_slice.png-026.png
new file mode 100644
index 0000000..c1efec6
--- /dev/null
+++ b/docs/stratix2_slice.png-026.png
Binary files differ
diff --git a/docs/stratix2_slice.png-026_rotate.png b/docs/stratix2_slice.png-026_rotate.png
new file mode 100644
index 0000000..6021abd
--- /dev/null
+++ b/docs/stratix2_slice.png-026_rotate.png
Binary files differ
diff --git a/docs/versal_slice.png-12.png b/docs/versal_slice.png-12.png
new file mode 100644
index 0000000..84eb163
--- /dev/null
+++ b/docs/versal_slice.png-12.png
Binary files differ