Skip to content
This repository has been archived by the owner on Mar 9, 2023. It is now read-only.

Use nextpnr-xilinx for Genesys2/xc7k325t: prjxray/prjxray/fasm_assembler.py fails #1

Open
unbtorsten opened this issue Feb 2, 2022 · 8 comments
Labels
bug Something isn't working

Comments

@unbtorsten
Copy link
Contributor

unbtorsten commented Feb 2, 2022

The following steps are similar to those outlined in https://github.com/kintex-chatter/xc7k325t-blinky-nextpnr/blob/main/README.md. I repeat them explicitly below, since there have been different errors popping up:

  1. Run pypy3 xilinx/python/bbaexport.py --device xc7k325tffg900-2 --bba xilinx/xc7k325t.bba
  2. Run ./bbasm xilinx/xc7k325t.bba xilinx/xc7k325t.bin -l
  3. Set XRAY_DIR to the path where Project Xray has been cloned and built (you may also need to patch out the Vivado check for utils/environment.sh in Xray)
  4. Run blinky.sh in xilinx/examples/genesys2 (may need to adjust binary paths)

Output seems to point to an issue with the documented cells. Does this point us back to doing a better job at documenting, i.e. building prjxray-db?

${XRAY_UTILS_DIR}/fasm2frames.py --part xc7k325tffg900-2 --db-root
${XRAY_UTILS_DIR}/../database/kintex7 blinky.fasm > blinky.frames
Traceback (most recent call last):
  File "prjxray/utils/fasm2frames.py", line 315, in <module>
    main()
  File "prjxray/utils/fasm2frames.py", line 303, in main
    run(
  File "prjxray/utils/fasm2frames.py", line 188, in run
    assembler.parse_fasm_filename(filename_in,
extra_features=extra_features)
  File "prjxray/prjxray/fasm_assembler.py", line 190, in
parse_fasm_filename
    raise FasmLookupError('\n'.join(missing_features))
prjxray.fasm_assembler.FasmLookupError: Segment DB RIOB18, key RIOB18.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18.SLEW.SLOW not found from line 'RIOB18_X95Y75.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18.SLEW.SLOW'
Segment DB RIOB18, key RIOB18.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_SSTL135_SSTL135_DCI_SSTL15_SSTL15_DCI.IN_ONLY not found from line 'RIOB18_X95Y75.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_SSTL135_SSTL135_DCI_SSTL15_SSTL15_DCI.IN_ONLY'
Segment DB RIOB18, key RIOB18.IOB_Y0.LVDS_SSTL135_SSTL15.IN_DIFF not found from line 'RIOB18_X95Y75.IOB_Y0.LVDS_SSTL135_SSTL15.IN_DIFF'
Segment DB RIOB18, key RIOB18.IOB_Y0.PULLTYPE.NONE not found from line 'RIOB18_X95Y75.IOB_Y0.PULLTYPE.NONE'
Segment DB RIOB18, key RIOB18.IOB_Y1.LVCMOS12_LVCMOS15_LVCMOS18.SLEW.SLOW not found from line 'RIOB18_X95Y75.IOB_Y1.LVCMOS12_LVCMOS15_LVCMOS18.SLEW.SLOW'
Segment DB RIOB18, key RIOB18.IOB_Y1.LVCMOS12_LVCMOS15_SSTL135_SSTL135_DCI_SSTL15_SSTL15_DCI.IN_ONLY not found from line 'RIOB18_X95Y75.IOB_Y1.LVCMOS12_LVCMOS15_SSTL135_SSTL135_DCI_SSTL15_SSTL15_DCI.IN_ONLY'
Segment DB RIOB18, key RIOB18.IOB_Y1.PULLTYPE.NONE not found from line 'RIOB18_X95Y75.IOB_Y1.PULLTYPE.NONE'
Segment DB LIOB33, key LIOB33.IOB_Y1.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.SLEW.SLOW not found from line 'LIOB33_X0Y127.IOB_Y1.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.SLEW.SLOW'
Segment DB LIOB33, key LIOB33.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.SLEW.SLOW not found from line 'LIOB33_X0Y111.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.SLEW.SLOW'
Segment DB LIOB33, key LIOB33.IOB_Y1.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.SLEW.SLOW not found from line 'LIOB33_X0Y119.IOB_Y1.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.SLEW.SLOW'
Segment DB LIOB33, key LIOB33.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.SLEW.SLOW not found from line 'LIOB33_X0Y119.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.SLEW.SLOW'
Segment DB LIOB33, key LIOB33.IOB_Y1.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.SLEW.SLOW not found from line 'LIOB33_X0Y111.IOB_Y1.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.SLEW.SLOW'
Segment DB LIOB33, key LIOB33.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.SLEW.SLOW not found from line 'LIOB33_X0Y117.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.SLEW.SLOW'
Segment DB LIOB33, key LIOB33.IOB_Y1.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.SLEW.SLOW not found from line 'LIOB33_X0Y109.IOB_Y1.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.SLEW.SLOW'
Segment DB LIOB33, key LIOB33.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.SLEW.SLOW not found from line 'LIOB33_X0Y109.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.SLEW.SLOW'
Segment DB LIOB33_SING, key LIOB33_SING.IOB_Y1.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.IN_ONLY not found from line 'LIOB33_SING_X0Y299.IOB_Y1.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.IN_ONLY'
Segment DB LIOB33_SING, key LIOB33_SING.IOB_Y1.LVCMOS12_LVCMOS15_LVCMOS18_SSTL135.STEPDOWN not found from line 'LIOB33_SING_X0Y299.IOB_Y1.LVCMOS12_LVCMOS15_LVCMOS18_SSTL135.STEPDOWN'
Segment DB LIOB33_SING, key LIOB33_SING.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.IN_ONLY not found from line 'LIOB33_SING_X0Y200.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.IN_ONLY'
Segment DB LIOB33_SING, key LIOB33_SING.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_SSTL135.STEPDOWN not found from line 'LIOB33_SING_X0Y200.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_SSTL135.STEPDOWN'
Segment DB LIOB33, key LIOB33.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.IN_ONLY not found from line 'LIOB33_X0Y211.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.IN_ONLY'
Segment DB LIOB33, key LIOB33.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_SSTL135.STEPDOWN not found from line 'LIOB33_X0Y211.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_SSTL135.STEPDOWN'
Segment DB LIOB33, key LIOB33.IOB_Y1.LVCMOS12_LVCMOS15_LVCMOS18_SSTL135.STEPDOWN not found from line 'LIOB33_X0Y211.IOB_Y1.LVCMOS12_LVCMOS15_LVCMOS18_SSTL135.STEPDOWN'
Segment DB LIOB33, key LIOB33.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.IN_ONLY not found from line 'LIOB33_X0Y287.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.IN_ONLY'
Segment DB LIOB33, key LIOB33.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_SSTL135.STEPDOWN not found from line 'LIOB33_X0Y287.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_SSTL135.STEPDOWN'
Segment DB LIOB33, key LIOB33.IOB_Y1.LVCMOS12_LVCMOS15_LVCMOS18_SSTL135.STEPDOWN not found from line 'LIOB33_X0Y287.IOB_Y1.LVCMOS12_LVCMOS15_LVCMOS18_SSTL135.STEPDOWN'
Segment DB LIOB33, key LIOB33.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.IN_ONLY not found from line 'LIOB33_X0Y161.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.IN_ONLY'
Segment DB LIOB33, key LIOB33.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_SSTL135.STEPDOWN not found from line 'LIOB33_X0Y161.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_SSTL135.STEPDOWN'
Segment DB LIOB33, key LIOB33.IOB_Y1.LVCMOS12_LVCMOS15_LVCMOS18_SSTL135.STEPDOWN not found from line 'LIOB33_X0Y161.IOB_Y1.LVCMOS12_LVCMOS15_LVCMOS18_SSTL135.STEPDOWN'
Segment DB LIOB33_SING, key LIOB33_SING.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.IN_ONLY not found from line 'LIOB33_SING_X0Y150.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.IN_ONLY'
Segment DB LIOB33_SING, key LIOB33_SING.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_SSTL135.STEPDOWN not found from line 'LIOB33_SING_X0Y150.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_SSTL135.STEPDOWN'
Segment DB LIOB33, key LIOB33.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.IN_ONLY not found from line 'LIOB33_X0Y129.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.IN_ONLY'
Segment DB LIOB33, key LIOB33.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.IN_ONLY not found from line 'LIOB33_X0Y133.IOB_Y0.LVCMOS12_LVCMOS15_LVCMOS18_LVCMOS25_LVCMOS33_LVTTL_SSTL135.IN_ONLY'
Segment DB RIOI, key RIOI.ILOGIC_Y0.ZINV_D not found from line 'RIOI_X95Y75.ILOGIC_Y0.ZINV_D'
Segment DB RIOI, key RIOI.RIOI_I2GCLK_TOP0.IOI_ILOGIC0_O not found from line 'RIOI_X95Y75.RIOI_I2GCLK_TOP0.IOI_ILOGIC0_O'
Segment DB RIOI, key RIOI.RIOI_I0.RIOI_IBUF0 not found from line 'RIOI_X95Y75.RIOI_I0.RIOI_IBUF0'
Segment DB RIOI, key RIOI.RIOI_ILOGIC0_D.RIOI_I0 not found from line 'RIOI_X95Y75.RIOI_ILOGIC0_D.RIOI_I0'
@unbtorsten unbtorsten added the bug Something isn't working label Feb 2, 2022
@hansfbaier
Copy link
Collaborator

hansfbaier commented Feb 2, 2022 via email

@unbtorsten
Copy link
Contributor Author

unbtorsten commented Feb 2, 2022

Good guess.. I run into the same issue in case of the QMTech part. Looks like we need to do some more differential testing.
Difference that I see right now:

  • I used the -k7 branch.
  • I did not sudo make install nextpnr-xilinx

Update: the difference lies in the upstream-xilinx-k7 branch:
I am able to build the QMTech part with the main branch and am confronted with an assertion failure in case of Genesys2 part (xc7k325tffg9000-2):

Info: Packing constants..
Info: Inserting IO buffers..
Info:     IO port 'clk' driven by IBUF '$iopadmap$top.clk'
Info:     IO port 'led' driven by OBUF '$iopadmap$top.led'
Info:     Constraining 'clk' to site 'IOB_X1Y24'
Info:     Constraining 'led' to site 'IOB_X0Y127'
Info: Generating input buffer for '$iopadmap$top.clk'
terminate called after throwing an instance of 'nextpnr_xilinx::assertion_failure'
  what():  Assertion failure: s != -1 (nextpnr-xilinx/xilinx/arch.h:1602)
Aborted

The assertion failure does not occur when using the -k7 branch, however, then you are facing the Python error outlined above.

@hansfbaier
Copy link
Collaborator

I just found this out independently, the nextpnr-xilinx-k7 branch seems to be no good any more (stale?): see here

@hansfbaier
Copy link
Collaborator

I just adjusted the README so that other users don't fall into the same trap

@unbtorsten
Copy link
Contributor Author

[...], the nextpnr-xilinx-k7 branch seems to be no good any more (stale?): see here

Are you saying that it used to work for you at some point?

@jrrk2
Copy link
Contributor

jrrk2 commented Feb 2, 2022

Genesys2 assertion failure goes away when constraints are changed. See this issue #6

@unbtorsten
Copy link
Contributor Author

Vice versa, it is possible to force the design with a QMTech part into assertion failures: #9

unbtorsten pushed a commit that referenced this issue Feb 26, 2022
@hansfbaier
Copy link
Collaborator

hansfbaier commented Jun 28, 2022

@unbtorsten You might want to try again now, things have changed quite dramatically and your results will be entirely different.
You won't need to patch nextpnr-xilinx anymore, the setup script will pull in the iob18-trial branch and use the latest database generated from my prjxray efforts.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants