tapasco icon indicating copy to clipboard operation
tapasco copied to clipboard

Tapasco multi device support

Open wirthjohannes opened this issue 4 years ago • 8 comments

When there are multiple TaPaSCo devices on a host, it should be possible to select the correct device where necessary (e.g. when using tapasco-load-bitstream).

This will also need a mapping between JTAG and PCIe Slot.

Will be postponed until the new runtime is ready

wirthjohannes avatar Apr 28 '20 14:04 wirthjohannes

Additional features for tapasco-load-bitstream would also be useful (e.g. list all available devices)

wirthjohannes avatar Apr 28 '20 14:04 wirthjohannes

I imagine some functionality such as:

Enumerate available FPGAs:

> tapasco-load-bitstream --list-devices
0 -> Zynq MP
1 -> PCIe JTAG XUPVVH
2 -> PCIe Direct VC709

Replace active bitstream:

> tapasco-load-bitstream 0 some-bitstream.bit
Ok

Writing bitstream to device FLASH where possible:

> tapasco-load-bitstream --permanent 0 some-bitstream.bit
Ok

The new runtime already works fine with the scenario and devices can be selected as needed and as indicated by TLKM.

What needs to be done:

  • [ ] Move PCIe shellscript into Python based tapasco-load-bitstream
  • [ ] Use Vivado to determine available JTAG devices
  • [ ] Use FPGA Manager to determine available devices
  • [ ] Use Vivado to program bitstream

jahofmann avatar Apr 28 '20 15:04 jahofmann

What do you think about adding a possibility to program bitstreams programmatically? That might be useful if you use the TaPaSCo API as a base for some other runtime, e.g. OpenMP and OpenCL.

Ideally, the new tapasco-load-bitstream would use the same API to reduce code duplication.

sommerlukas avatar Apr 28 '20 15:04 sommerlukas

Sure, it remains a Python script with a if __main__ block. You can simply include that script in your program and use the functionality as desired.

jahofmann avatar Apr 28 '20 15:04 jahofmann

I was thinking that it might make sense to include that into the TaPaSCo API, so it can be used from the same programming languages as the regular API for transferring data and launching jobs;

sommerlukas avatar Apr 28 '20 15:04 sommerlukas

You mean the toolflow or the runtime?

We could also include it into the runtime, but that's certainly less convenient considering the languages used. However, certainly possible and worth considering.

jahofmann avatar Apr 28 '20 15:04 jahofmann

Yes, I meant the runtime.

I'm aware that running all these steps, in particular the external commands, from C/C++/Rust is more challenging than from a simple bash/Python script, but it might be interesting to integrate it into the runtime next to all the other functions for the host-part of the application.

sommerlukas avatar Apr 28 '20 15:04 sommerlukas

Sure, I'm up for it... the runtime is about 90% ready, only waiting for the release of the current milestone.

jahofmann avatar Apr 28 '20 15:04 jahofmann