| Structure | |
| ========= | |
| Directories | |
| ----------- | |
| * `XXX/device/` - Full architecture definitions of a given device for | |
| [Verilog To Routing](https://verilogtorouting.org/) | |
| * `XXX/device/YYYY-virt` - Verilog to Routing architecture definitions | |
| generally are not able to able to generate the **exact** model of many | |
| FPGA routing interconnects, but this is a pretty close. | |
| * `XXX/primitives/` - The primitives that make up the architecture. These | |
| are generally used inside the tiles. | |
| * `XXX/tiles/` - The tiles found in the architecture. | |
| * `XXX/tests/` - Tests for making sure the architecture specific features | |
| works with VPR. | |
| * [`vpr`](vpr) - Common defines used by multiple architectures. | |
| Files | |
| ----- | |
| * `pb_type.xml` - The Verilog to Routing | |
| [Complex Block](https://docs.verilogtorouting.org/en/latest/arch/reference/#complex-blocks) | |
| defintinition. | |
| * Inside `primitives` directory they should be intermediate or primitive | |
| `<pb_type>` and thus allow setting the `num_pb` attribute. | |
| * Inside `tiles` directory they should be top level `<pb_type>` and thus have, | |
| - `capacity` (if a pin type), | |
| - `width` & `height` (and maybe `area`) | |
| * `model.xml` - The Verilog to Routing | |
| [Recognized BLIF Models](https://docs.verilogtorouting.org/en/latest/arch/reference/#recognized-blif-models-models) | |
| defintinition. | |
| * `sim.v` - A Verilog definition of the object. It should; | |
| - [ ] Match the definition in `model.xml` (should be one `module` in | |
| `sim.v` for every `model` in `model.xml`) | |
| - [ ] Include a `ifndef BLACKBOX` section which actually defines how the | |
| Verilog works. | |
| * `macro.v` - A Verilog definition of the object which a user might | |
| instantiate in their own code when specifying a primitive. This should match | |
| the definition provided by a manufacturer. Examples would be the definitions | |
| in; | |
| - [Lattice iCE Technology Library](http://www.latticesemi.com/~/media/LatticeSemi/Documents/TechnicalBriefs/SBTICETechnologyLibrary201504.pdf) | |
| - [UG953: Vivado Design Suite 7 Series FPGA and Zynq-7000 All Programmable SoC Libraries Guide](https://www.xilinx.com/support/documentation/sw_manuals/xilinx2017_3/ug953-vivado-7series-libraries.pdf) | |
| Names | |
| ----- | |
| * ``BLK_MB-block_1_name-block_2_name`` - ``BLOCK`` which is a "**m**\ ega **b**\ lock". A "mega block" is a top level block which is made up of other blocks. | |
| * ``BLK_XX-name`` - ``BLOCK`` which is the hierarchy. Maps to ``BLK_SI`` -> ``SITE`` and ``BLK_TI`` -> ``TILE`` in Xilinx terminology. | |
| * ``BLK_IG-name`` - ``BLOCK`` which is ignored. They don't appear in the output hierarchy and are normally used when something is needed in the description which doesn't match actual architecture. | |
| * ``BEL_RX-mux_name`` - ``BEL`` which is a **r**\ outing mu\ **x**. Routing muxes are statically configured at PnR time. | |
| * ``BEL_MX-mux_name`` - ``BEL`` which is a **m**\ u\ **x** . | |
| * ``BEL_LT-lut_name`` - ``BEL`` which is a **l**\ ook up **t**\ able. | |
| * ``BEL_MM-mem_name`` - ``BEL`` which is a **m**\ e**m**\ ory. | |
| * ``BEL_FF-ff_name`` - ``BEL`` which is a **f**\ lip **f**\ lop (``FF``). | |
| * ``BEL_LL-latch_name`` - ``BEL`` which is a **l**\ atch (``LL``). | |
| * ``BEL_BB-name`` - ``BEL`` which is a **b**\ lack **b**\ ox (``BB``). | |
| * ``PAD_IN-name`` - A signal input location. | |
| * ``PAD_OT-name`` - A signal output location. | |
| Notes | |
| ----- | |
| * Unless there is a good reason otherwise, all muxes should be generated via | |
| [`mux_gen.py`](utils/mux_gen.py) | |
| * DRY (Don't repeat yourself) - Uses | |
| [XML XIncludes](https://en.wikipedia.org/wiki/XInclude) to reuse stuff! |