nextpnr/fpga_interchange
Alessandro Comodi cfbd1dfa4d interchange: fix dedicated interconnect exploration
Signed-off-by: Alessandro Comodi <acomodi@antmicro.com>
2021-06-30 20:04:23 +02:00
..
examples nexus: Add modified version of RAM test 2021-06-15 11:07:40 +01:00
arch_iterators.h Refactor header structures in FPGA interchange Arch. 2021-03-19 21:36:06 -07:00
arch_pack_clusters.cc interchange: clusters: always get cell bel map and add asserts 2021-06-11 11:19:01 +02:00
arch_pack_io.cc interchange: Place IO macro content based on routing 2021-06-30 11:37:30 +01:00
arch_pybindings.cc Fixing old emails and names in copyrights 2021-06-12 13:22:38 +01:00
arch_pybindings.h Fixing old emails and names in copyrights 2021-06-12 13:22:38 +01:00
arch.cc interchange: arch: move macro expansion step before ios packing 2021-06-18 16:42:05 +02:00
arch.h interchange: Track the macros that cells have been expanded from 2021-06-29 14:48:47 +01:00
archdefs.h interchange: Track the macros that cells have been expanded from 2021-06-29 14:48:47 +01:00
cell_parameters.cc Use new parameter definition data in FPGA interchange processing. 2021-03-23 09:01:43 -07:00
cell_parameters.h Using hashlib in arches 2021-06-02 15:05:19 +01:00
chipdb.h interchange: increase chipinfo version 2021-06-11 11:19:01 +02:00
cost_map.cc Using hashlib in arches 2021-06-02 15:05:19 +01:00
cost_map.h Using hashlib in arches 2021-06-02 15:05:19 +01:00
dedicated_interconnect.cc interchange: fix dedicated interconnect exploration 2021-06-30 20:04:23 +02:00
dedicated_interconnect.h Using hashlib in arches 2021-06-02 15:05:19 +01:00
family.cmake fpga_interchange: Add site router tests 2021-06-11 08:43:30 +01:00
flat_wire_map.h Rework FPGA interchange site router. 2021-03-22 09:54:49 -07:00
fpga_interchange.cpp interchange: fix phys net writer 2021-06-15 14:07:20 +02:00
fpga_interchange.h Add FPGA interchange frontend and backend. 2021-02-15 09:54:58 -08:00
globals.cc Using hashlib in arches 2021-06-02 15:05:19 +01:00
lookahead.capnp Initial lookahead for FPGA interchange. 2021-03-23 08:16:50 -07:00
lookahead.cc Using hashlib in arches 2021-06-02 15:05:19 +01:00
lookahead.h Using hashlib in arches 2021-06-02 15:05:19 +01:00
luts.cc Using hashlib in arches 2021-06-02 15:05:19 +01:00
luts.h Using hashlib in arches 2021-06-02 15:05:19 +01:00
macros.cc interchange: Track the macros that cells have been expanded from 2021-06-29 14:48:47 +01:00
main.cc Fixing old emails and names in copyrights 2021-06-12 13:22:38 +01:00
pseudo_pip_model.cc interchange: Allow site wires driven by more than one bel 2021-06-28 14:55:56 +01:00
pseudo_pip_model.h Using hashlib in arches 2021-06-02 15:05:19 +01:00
README.md Update README with latest develpment progress. 2021-03-25 17:56:15 -07:00
sampler.cc Initial lookahead for FPGA interchange. 2021-03-23 08:16:50 -07:00
sampler.h Initial lookahead for FPGA interchange. 2021-03-23 08:16:50 -07:00
site_arch.cc interchange: Cope with undriven nets in more places 2021-06-14 10:58:42 +01:00
site_arch.h Using hashlib in arches 2021-06-02 15:05:19 +01:00
site_arch.impl.h clangformat 2021-04-12 10:26:39 +01:00
site_router.cc interchange: Cope with undriven nets in more places 2021-06-14 10:58:42 +01:00
site_router.h Using hashlib in arches 2021-06-02 15:05:19 +01:00
site_routing_cache.cc interchange: add support for generating BEL clusters 2021-06-11 11:19:01 +02:00
site_routing_cache.h interchange: add support for generating BEL clusters 2021-06-11 11:19:01 +02:00
site_routing_storage.h interchange: site router: fix illegal site thru paths 2021-05-10 14:05:46 +02:00
type_wire.cc Using hashlib in arches 2021-06-02 15:05:19 +01:00
type_wire.h Using hashlib in arches 2021-06-02 15:05:19 +01:00
xdc.cc Fixing old emails and names in copyrights 2021-06-12 13:22:38 +01:00
xdc.h Refactor header structures in FPGA interchange Arch. 2021-03-19 21:36:06 -07:00

FPGA interchange nextpnr architecture

This nextpnr architecture is a meta architecture that in theory will implement any architecture that emits a complete FPGA interchange device database.

FPGA interchange

The FPGA interchange is a set of file formats intended to describe any modern island based FPGA. It consists of three primary file formats:

  • Device database

    • This is a description of a particular FPGA fabric. This description includes placement locations, placement constraints and a complete description of the routing fabric.
    • This file will also include timing information once added.
  • Logical netlist

    • This is the output of a synthesis tool. This is equivalent to the Yosys JSON format, EDIF, or eblif.
    • As part of future nextpnr development, a frontend will be added that takes this format as input.
  • Physical netlist

    • This is the output of a place and route tool. It can describe a clustered design, a partially or fully placed design, and a partially or fully routed design.

Current development status

This architecture implementation can be compiled in conjunction with a FPGA interchange device database, and the outputs from fpga_interchange.nextpnr_emit, which is part of the python-fpga-interchange library.

The current implementation is missing essential features for place and route. As these features are added, this implementation will become more useful.

  • Logical netlist macro expansion is not implemented, meaning that any macro primitives are unplaceable. Common macro primitives examples are differential IO buffers (IBUFDS) and some LUT RAM (e.g. RAM64X1D).
  • Timing information is missing from the FPGA interchange device database, so it is also currently missing from the FPGA interchange architecture. Once timing information is added to the device database

Weaknesses of current implementation

Initial development on the following features is started, but needs more refinement.

  • BEL validity checking is too expensive. The majority of the runtime is currently in the LUT rotation. Profiling, optimization and algorithm review is likely required to bring strict legalisation runtimes into expected levels.
  • The router lookahead is disabled by default. Without the lookahead, router runtime is terrible. However the current lookahead implementation is slow to compute and memory intensive, hence why it is disabled by default.
  • Pseudo pips (e.g. pips that consume BELs and or site resources) and pseudo site pips (e.g. site pips that route through BELs) consume site wires to indicate that they block some resources. This covers many validity check cases, but misses some. In particular, when a pseudo pip / pseudo site pip has an implication on the constraint system (e.g. LUT on a LUT-RAM BEL), an edge may be allowed incorrectly, resulting in an illegal design.

FPGA interchange fabrics

Xilinx 7-series, UltraScale and UltraScale+ fabrics have a device database generator, via RapidWright.

A Lattice Nexus device database is being worked on, via prjoxide.

FPGA interchange build system

Construction of chipdb's is currently integrated into nextpnr's CMake build system. See fpga_interchange/examples/README.md for more details.