12-28-2016 12:20 AM
I am developing an IP which the best implementation I have is using a 5MHz clock (200ns), where it is able to perform all the operations with 0 latency (full-combinatorial). It needs 5 input variables and outputs 5 more, all of them 32-bit wide.
I want to control it using the PS but obviously, if I use an AXI Master with the clock running at 5MHz, the time it needs to transfer all the data is quite large (40 cycles of 200ns).
I was wondering if there is the possibility to have the AXI Master running at 250MHz and the IP at 5MHz.
12-28-2016 12:24 AM
@cerilet you can make the axi-slave run at 250 MHz, collect all 5 words in registers, start the ip, wait till done (ie count to 50) and then write the resulting 5 words back to memory.
12-28-2016 08:29 AM
@Anonymous it wasn't entirely clear to me whether @cerilet had an axi-lite interface or an m_axi. Based on master in this post, I assumed he had an m_axi.
In either case, it is certainly possible to have the axi protocol management and the IP run at different clocks. The easy solution is an axi interconnect which has the clock-domain crossing feature in it. The harder feature is to code some RTL running on faster side controlling/checking start/done signals to remove some unnecessary cycles. But my suggestion requires separating axi protocol management and the internals of the IP into separate blocks. I am not sure how HLS would handle such a case.
12-28-2016 07:47 PM
The easiest approach for HLS is to pack the input/output data into a very wide bus (5*32-bit = 160-bit; although you might need to go to 256-bit. I've had issues with non-power-of-2 widths before). Then stick an AXI Interconnect between the HLS IP core and the RAM to do the conversion from a wide, slow bus to a thin, fast bus.