3.7 KiB
3.7 KiB
nextpnr netlist structures documentation
The current in-memory design in nextpnr uses several basic structures. See the FAQ for more info on terminology.
See also the Arch API reference for information on developing new architectures and accessing the architecture database.
CellInfo
: instantiation of a physical block in the netlist (currently, all cells in nextpnr are blackboxes.)NetInfo
: a connection between cell ports. Has at most one driver; and zero or more usersBaseCtx
: contains all cells and nets, subclassed byArch
and then becomesContext
Other structures used by these basic structures include:
Property
: stores a numeric or string value - isomorphic toRTLIL::Const
in YosysPortInfo
: stores the name, direction and connected net (if applicable) of cell portsPortRef
: used to reference the source/sink ports of a net; refers back to a cell and a port name
CellInfo
CellInfo
instances have the following fields:
name
andtype
areIdString
s containing the instance name, and typeports
is a map from port nameIdString
toPortInfo
structures for each cell portbel
andbelStrength
contain the ID of the Bel the cell is placed onto; and placement strength of the cell; if placed. Placement/ripup should always be done byArch::bindBel
andArch::unbindBel
rather than by manipulating these fields.params
andattrs
store parameters and attributes - from the input JSON or assigned in flows to add metadata - by mapping from parameter nameIdString
toProperty
.- The
constr_
fields are for relative constraints:constr_parent
is a reference to the cell this cell is constrained with respect to; ornullptr
if not relatively constrained. If notnullptr
, this cell should be in the parent'sconstr_children
.constr_children
is a list of cells relatively constrained to this one. All children should haveconstr_parent == this
.constr_x
andconstr_y
are absolute (constr_parent == nullptr
) or relative (constr_parent != nullptr
) tile coordinate constraints. If set toUNCONSTR
then the cell is not constrained in this axis (defaults toUNCONSTR
)constr_z
is an absolute (constr_abs_z
) or relative (!constr_abs_z
) 'Z-axis' (index inside tile, e.g. logic cell) constraint
region
is a reference to aRegion
if the cell is constrained to a placement region (e.g. for partial reconfiguration or out-of-context flows) ornullptr
otherwise.
NetInfo
NetInfo
instances have the following fields:
name
is the IdString name of the net - for nets with multiple names, one name is chosen according to a set of rules by the JSON frontenddriver
refers to the source of the net usingPortRef
;driver.cell == nullptr
means that the net is undriven. Nets must have zero or one driver only. The corresponding cell port must be an output and itsPortInfo::net
must refer back to this net.users
contains a list ofPortRef
references to sink ports on the net. Nets can have zero or more sinks. Each corresponding cell port must be an input or inout; and itsPortInfo::net
must refer back to this net.wires
is a map that stores the routing tree of a net, if the net is routed.- Each entry in
wires
maps from sink wire in the routing tree to its driving pip, and the binding strength of that pip (e.g. how freely the router may rip up the pip) - Manipulation of this structure is done automatically by
Arch::bindWire
,Arch::unbindWire
,Arch::bindPip
andArch::unbindPip
; which should almost always be used in lieu of manual manipulation
- Each entry in
attrs
stores metadata about the wire (which may come from the JSON or be added by passes)