I am new to FPGA development and am trying to build a simple system using the Zynq SoC (on the Zedboard). It will consist of an IP block generated using Vivado HLS which will accept arrays of data, operate on them, and produce result arrays. A bare-metal application (running on an ARM core in the Processing System(PS)) will use the IP block (in the Programmable Logic(PL)).
I am not sure how to manage data-transfer between the PS and the PL. From the information that I have seen so far, one option is to include AXI Stream interfaces on the IP block and use an AXI DMA to transfer data to and from memory.
-For such a design, what would the programming sequence in the bare-metal application look like?
-What would the structure of the C code used to generate the IP be (for the IP to be able to accept and return arrays using AXIS ports)?
I would really appreciate any pointers or links to relevant information.
Thank you.
{Edit (23/05/16): Neural network training is the specific application I am working on. So the input arrays to the IP block are network parameters. They are processed, updated, and returned. This involves multiply-accumulate operations on the rows of the arrays. And network training involves many such "input-process-output" iterations. This can of course be done on a processor (it is actually done using GPUs in most cases) but doing it on an FPGA could be faster and more energy efficient.
There is no need for any user I/O. (I will just be printing to a terminal for debugging purposes.)
I was mainly looking for some guidelines/pointers on managing the interaction between the processor and the IP (designing the interface in HLS and the programming sequence for the bare-metal application) as well as any suggestions on other approaches that I could take (alternatives to using the AXI DMA and AXIS).
(I am using the Xilinx Vivado Design Suite and Xilinx SDK. The design flow would be:
1. Create and export IP using Vivado HLS.
2. Design PS-PL Zynq System using Vivado IP Integrator.
3. Export hardware to Xilinx SDK and write bare-metal application in SDK.)}