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

How to combine FPGA and nvdla_SW #246

Open
xiaoguoer opened this issue Oct 28, 2018 · 6 comments
Open

How to combine FPGA and nvdla_SW #246

xiaoguoer opened this issue Oct 28, 2018 · 6 comments

Comments

@xiaoguoer
Copy link

if I intergrated nvdla into FPGA successfully , can I just run "nvdla_runtime" to start inference with the FPGA conncted to hostPC ? is this feasible?
Or, is nvdla_sw only designed for simulation ??
Than you ~

@ghost
Copy link

ghost commented Oct 29, 2018

Running inference on FPGA is perfectly feasible. See this long thread #110 as an example. So far SoC's were tested (like Zynq UltraScale+) and mixed solutions like Virtex+Zynq. I think there were also attempts to run FPGA with communication over PCIe. I tested Zynq and the software integration is relatively straightforward (as soon as one fixes various minor issues).

Still, sadly, the main problem is lack of compilation tools for neural networks, that would run on small NVDLA architecture (nv_small or even nv_large). Some teams try to address this issue on their own like iCubeWork: https://github.com/icubecorp/nvdla_compiler - which anyway so far supports nv_full only. Without the compiler you have only little set of sanity tests, you could run with nvdla_runtime.

nvdla/sw of course works also in simulation environment, like QEMU based Virtual Platform (nvdla/vp).

@xiaoguoer
Copy link
Author

@mmaciag thank you for your answer.
if zynq was used, the steps i thought to run inference are:

  1. build kmd/umd according to the linux kernel;
  2. copy files which built in the step 1 to OS running on the zynq;
  3. run nvdla_runtime.
    am I right ?

@ghost
Copy link

ghost commented Oct 30, 2018

Well, in general yes, but maybe not as simple as you described. There are minor things to polish. You definitely want to read about what people were already struggling at nvdla/sw, for example nvdla/sw#46, nvdla/sw#95 and nvdla/sw#70

@xiaoguoer
Copy link
Author

@mmaciag that's definitely what i need, thank you soooo much!
the #110 following steps says we should "Add DW02_tree DW_lsb DW_minmax files" and "global define".

the official doc Designware Components says "DW02_tree, DW_lsd and DW_minmax can be obtained directly from the EDA vendors". Does Xilinx provide these components ?

And how to do "global define"?

@ghost
Copy link

ghost commented Oct 31, 2018

You should check Vivado (if you work on Zynq) user manual to see how to define global defines. DW_xxx components are not needed when proper macros are defined. See CMAC implementation for reference. If you define FPGA macro, ordinary '*' operator is used instead of Wallace tree (DW02_tree)

@xiaoguoer
Copy link
Author

@mmaciag okay, thanks a lot ~

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

1 participant