Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Missing support for xc7a35tftg256-1 in archive #1800

Open
dnltz opened this issue Nov 21, 2020 · 18 comments
Open

Missing support for xc7a35tftg256-1 in archive #1800

dnltz opened this issue Nov 21, 2020 · 18 comments

Comments

@dnltz
Copy link
Contributor

dnltz commented Nov 21, 2020

Hi,

I downloaded the toolchain as guided in the symbiflow-example README file and wanted to try the xc7 counter example for the xc7a35tftg256-1 part. I saw there is support for it in prjxray-db but unfortunately this part is not deployed to the tar archive.

Error message from the symbiflow_place:

cd build && symbiflow_place -e top.eblif -d xc7a50t_test -p /home/daniel/tmp/counter/arty.pcf -n top.net -P xc7a35tftg256-1 -s /home/daniel/tmp/counter/counter.sdc 2>&1 > /dev/null
realpath: /home/daniel/tmp/symbiflow/xc7/install/bin/../share/symbiflow/arch/xc7a50t_test/xc7a35tftg256-1/pinmap.csv: No such file or directory
make: *** [Makefile:26: build/top.place] Error 1

Seems like only the parts from the two development kits get deployed. Since I have a custom board, can I generate this pinmap by myself?

@tcal-x
Copy link
Contributor

tcal-x commented Nov 22, 2020

Hi @dnltz ,

There is a guide for this case -- https://prjxray.readthedocs.io/en/latest/db_dev_process/newpart.html. You would just be adding a new package (256 pins) for a currently supported device (35t). So you'd skip steps 2-4 of that guide.

However, we have planned a project to automatically generate the pinmaps for all packages once a device is supported -- f4pga/prjxray#1476 -- but I don't know what the timeline is for that.

@dnltz
Copy link
Contributor Author

dnltz commented Nov 22, 2020

Thanks @tcal-x ! That was exactly what I was looking for :)

Yes, would be nice to have all available packages in the example. Do you need more hardware for testing? I could send a board with this package in January.

@tcal-x
Copy link
Contributor

tcal-x commented Nov 23, 2020

Hi @dnltz ,
I don't we'll need real hardware, although thank you for the offer. We test mainly by running designs through Symbiflow, then exporting back into Verilog+constriants, reading that into Vivado, then generating a bitstream from there, and diffing between the bitstreams. This is done in the symbiflow-arch-defs repository. So we'll want to add some tests there. Here for example is my PR for adding tests for the 100T: https://github.com/SymbiFlow/symbiflow-arch-defs/pull/1515/files. You would touch just a few files -- a new entry in the boards file xc/xc7/boards.cmake, then some new test variants under xc/xc7/tests/. Unfortunately I haven't yet written the step-by-step guide for this side of things.

GitHub
Initial support for xc7a100t parts: board arty100t-full arch artix7_100t device xc7a100t-virt parts xc7a100tcsg324-1, xc7a100tfgg676-1 tests "arty100t" versions of: buttons, co...

@litghost
Copy link
Contributor

@dnltz We would like someone to do f4pga/prjxray#1475 and f4pga/prjxray#1476. It should just be some Python work, if you feel up for it!

@dnltz
Copy link
Contributor Author

dnltz commented Dec 9, 2020

hey @litghost - I'm very busy right now until end of December. I can do these PRs than, if it's not that urgent.

@dnltz
Copy link
Contributor Author

dnltz commented Mar 19, 2021

Coming back to my original problem, the way to make my part available in the prebuild toolchain is to add it as board to this project, right?

@litghost
Copy link
Contributor

Coming back to my original problem, the way to make my part available in the prebuild toolchain is to add it as board to this project, right?

Next step is to update the prjxray-db package. I'll poke @mithro

@mithro
Copy link
Contributor

mithro commented Mar 19, 2021

The Zynq build got stuck in some way, so I killed it and kicked it off again.

In the meantime, I pushed the Artix + Kintex stuff to f4pga/prjxray-db@master...mithro:master

There seems to be a lot of changes in the mask_bram_l and mask_dsp_l files -- is that expected?

@mithro
Copy link
Contributor

mithro commented Mar 20, 2021

A zynq run completed successfully, see the changes at f4pga/prjxray-db@master...mithro:master

If someone confirms that the mask changes for bram and dsp are expected, I'll push the result to the database.

@acomodi
Copy link
Contributor

acomodi commented Mar 22, 2021

I am not sure what are the mask files used at this point, or if they are every used in the flow. As for they are expected or not, the only recent changes to the DSP happened here and the output is already checked-in in the db, so the change seems a bit odd.

@dnltz
Copy link
Contributor Author

dnltz commented Mar 30, 2021

I think I can close this issue. @mithro Can I add a not for sale board with this part?

@mithro
Copy link
Contributor

mithro commented Mar 30, 2021

@dnltz - Add to were?

@dnltz
Copy link
Contributor Author

dnltz commented Mar 31, 2021

@mithro - My understand is that the flow needs data from xc7a50t_test which are generated with this project. So my idea was to add the board here to this project to have my part deployed. Not sure if this is the right way.

@mithro
Copy link
Contributor

mithro commented Mar 31, 2021

@dnltz Oh, I understand. It might be worth chatting with @litghost if there is a good way to support all the parts now? If there isn't an easy way, landing that option in the short term is 100% fine.

@litghost
Copy link
Contributor

litghost commented Apr 1, 2021

@dnltz So you remember how we made the mapping from part -> device -> fabric in prjxray? That same distinction exists in arch-defs, but pre-dates the prjxray change. arch-defs simple maps part directly to fabric (and a "board") in https://github.com/SymbiFlow/symbiflow-arch-defs/blob/a3c75b4b7304a29ff3d48b594e5afe922ce00f7e/xc/xc7/boards.cmake

The key CMake function is add_xc_board, which is defined here: https://github.com/SymbiFlow/symbiflow-arch-defs/blob/a3c75b4b7304a29ff3d48b594e5afe922ce00f7e/xc/common/cmake/device_define.cmake#L1-L11

The key portion for expanding part support for everything is generating "pinmap.csv" for every part in prjxray, which is here: https://github.com/SymbiFlow/symbiflow-arch-defs/blob/a3c75b4b7304a29ff3d48b594e5afe922ce00f7e/xc/common/cmake/device_define.cmake#L160-L172

In summary:

  • arch-defs manually mapped part -> fabric in xc7/boards.cmake
  • That information now exists in prjxray per your update
  • The only thing that needs to be done to support more parts is to create the pinmap.csv for each part. In order to generalize this, there needs to be a map from prjxray fabric to arch-def DEVICE.
    • For example, the prjxray fabric "xc7a50t" is the arch-def DEVICE "xc7a50t".

Because the naming conventions in arch-defs appear to generally match the naming conventions from prjxray, I believe it should be possible to emit CMake targets to generate the "pinmap.csv" for every part now in prjxray as part of the install targets.

Does this make sense?

GitHub
FOSS architecture definitions of FPGA hardware useful for doing PnR device generation. - SymbiFlow/symbiflow-arch-defs

@litghost
Copy link
Contributor

litghost commented Apr 1, 2021

One additional note, the current add_xc_board names the output pinmap CSV based on the name of the board, but it probably should just be named for the package.

@dnltz
Copy link
Contributor Author

dnltz commented Apr 7, 2021

I'm not very familiar with cmake. A target is a function like ADD_XC_BOARD, right? If that's true, my understanding or idea would be to add a new function to generate all pinmaps for a fabric and to add the function calls to the boards.cmake for each device.

@dnltz
Copy link
Contributor Author

dnltz commented Apr 12, 2021

I'm not very familiar with cmake. A target is a function like ADD_XC_BOARD, right? If that's true, my understanding or idea would be to add a new function to generate all pinmaps for a fabric and to add the function calls to the boards.cmake for each device.

@litghost

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants