Skip to content

Latest commit

 

History

History
44 lines (30 loc) · 1.7 KB

constraints.md

File metadata and controls

44 lines (30 loc) · 1.7 KB

Constraints

There are three types of constraints available for end users of nextpnr.

Architecture-specific IO Constraints

Architectures may provide support for their native (or any other) IO constraint format. The iCE40 architecture supports PCF constraints thus:

set_io led[0] 3

and the ECP5 architecture supports a subset of LPF constraints (for details see Lattice Technical Note "FPGA-TN-02032 1.3"):

LOCATE COMP "led[0]" SITE "E16";
IOBUF PORT "led[0]" IO_TYPE=LVCMOS25;
IOBUF ...  DRIVE=4|8|12|16; // currently LVCMOS33 and LVCMOS33D only
IOBUF ... OPENDRAIN=ON|OFF;
IOBUF ... TERMINATION=50|75|150;
IOBUF ... DIFFRESISTOR=100; //for differential IO only
IOBUF ... CLAMP=ON|OFF;
IOBUF ... PULLMODE=UP|DOWN|NONE;
IOBUF ... SLEWRATE=FAST|SLOW; //outputs only
IOBUF ... HYSTERESIS=ON|OFF;

Absolute Placement Constraints

nextpnr provides generic support for placement constraints by setting the Bel attribute on the cell to the name of the Bel you wish it to be placed at. For example:

(* BEL="X2/Y5/lc0" *)

Clock Constraints

There are two ways to apply clock constraints in nextpnr. The --freq {freq} command line argument is used to apply a default frequency (in MHz) to all clocks without a more specific constraint.

The Python API can apply clock constraints to specific named clocks. This is done by passing a Python file specifying these constraints to the --pre-pack command line argument. Inside the file, constraints are applied by calling the function ctx.addClock with the name of the clock and its frequency in MHz, for example:

ctx.addClock("csi_rx_i.dphy_clk", 96)
ctx.addClock("video_clk", 24)
ctx.addClock("uart_i.sys_clk_i", 12)