I have made a simple blinky example for a xc7k325tffg676-1 fpga with a reset input on a pin with constraint IOSTANDARD LVCMOS18 . The reset input is located at pin AF9 . A repro can be provided upon request.
If I remove the reset pin, I can generate bitstream and program successfully fpga.
The output of nextpnr-xilinx is:
nextpnr-xilinx -r --chipdb /usr/local/share/nextpnr/xilinx-chipdb/xc7k325tffg676-1.bin --xdc data/constraints.xdc --json blinky.json --write blinky_routed.json --fasm blinky.fasm --freq 50
Info: Packing constants..
Info: Inserting IO buffers..
Info: IO port 'i_clock_50MHz' driven by IBUF '$iopadmap$Top.i_clock_50MHz'
Info: IO port 'i_reset_n' driven by IBUF '$iopadmap$Top.i_reset_n'
Info: IO port 'o_leds[0]' driven by OBUF '$iopadmap$Top.o_leds'
Info: IO port 'o_leds[1]' driven by OBUF '$iopadmap$Top.o_leds_1'
Info: IO port 'o_leds[2]' driven by OBUF '$iopadmap$Top.o_leds_2'
Info: Constraining 'i_clock_50MHz' to site 'IOB_X0Y126'
Info: Constraining 'i_reset_n' to site 'IOB_X1Y51'
Info: Constraining 'o_leds[0]' to site 'IOB_X0Y114'
Info: Constraining 'o_leds[1]' to site 'IOB_X0Y113'
Info: Constraining 'o_leds[2]' to site 'IOB_X0Y231'
Info: Generating input buffer for '$iopadmap$Top.i_clock_50MHz'
Info: Generating input buffer for '$iopadmap$Top.i_reset_n'
terminate called after throwing an instance of 'nextpnr_xilinx::assertion_failure'
what(): Assertion failure: s != -1 (/nextpnr-xilinx/xilinx/arch.h:1602)
make: *** [Makefile:21: blinky.fasm] Abandon (core dump créé)
The problem seem that nexpnr-xilinx automatically add "/IOB33/PAD" to all site and don't seem to check for io voltage.
Inside pack_io_xc7.cc XC7Packer::pack_io() function
I have added code in file pack_io_xc7.cc to print additional information to show the site and pad attribute information. here is the output for pin AF9 with 1.8V io :
pack_io_xc7.cc::pack_io LOC: AF9
Pin name: AF9
pack_io_xc7.cc::pack_io SITE: IOB_X1Y51
Info: Constraining 'i_reset_n' to site 'IOB_X1Y51'
pack_io_xc7.cc::pack_io pad->attrs[ctx->id("BEL")] : IOB_X1Y51/IOB33/PAD
I have made a simple blinky example for a xc7k325tffg676-1 fpga with a reset input on a pin with constraint IOSTANDARD LVCMOS18 . The reset input is located at pin AF9 . A repro can be provided upon request. If I remove the reset pin, I can generate bitstream and program successfully fpga.
The output of nextpnr-xilinx is:
The problem seem that nexpnr-xilinx automatically add "/IOB33/PAD" to all site and don't seem to check for io voltage. Inside pack_io_xc7.cc XC7Packer::pack_io() function
I think for pin AF9 or all other pin with 1.8V logic level there should be code like this :
I have added code in file pack_io_xc7.cc to print additional information to show the site and pad attribute information. here is the output for pin AF9 with 1.8V io :
Then in the file prjxray-db/kintex7/xc7k325t/tilegrid.json For pin AF9 at site IOB_X1Y51 is defined as
Here are the other 3.3V pins for comparison that nextpnr-xilinx place successfully.
Pin i_clock_50MHz at site IOB_X0Y126:
Tile grid definition:
Pin o_leds[0] at site IOB_X0Y114
Tilegrid definition:
Pin o_leds[1] at site IOB_X0Y113
Tilegrid definition:
Pin o_leds[2] at site IOB_X0Y231
Tilegrid definition
Thanks.