This seems like a fun "discuss at the workshop" topic! I have a couple of applications where I think this functionality would be useful, so I'd definitely be interested in helping out.
>From a toolflow side I think getting the automated instantiation of the DMA IP should be relatively straightforward. Handling what the CPU does to interact with the core, and/or how you might interact with the core remotely over a network I'm less sure about. Cheers Jack On Thu, 5 Oct 2023 at 12:08, Matthew Schiller <[email protected]> wrote: > The right way to do what you describe is with the axi DMA block, but as > you point out that has a software interface to configure the transfer. The > main data would flow over an AXI4 “full” interface that supports burst > transactions (but the Xilinx-provided DMA block already does that), and the > configuration of the DMA block comes from software over AXI4 lite. There > are two approaches (which should be supported by either using the correct > DMA block or the correct settings on the DMA block). A Standard DMA block > can be used if fixed addresses in memory can be allocated. This would mean > that the linux kernel is told to only use ½ of the PS memory for example. > Software can still access the upper half though for example /dev/mem reads, > but the upper memory disappears from linux for normal applications.. > Alternatively, though more complicated, a “scatter-gather” DMA is > implemented. A Scatter Gather DMA uses a software driver/server that will > “malloc” memory in a normal software way, and then provide pointers to the > Scatter Gather DMA to that memory. Because of the way virtual memory > works, this is not as trivial as it sounds and is requires several steps to > accomplish as the FPGA needs the physical, not virtual address, and must > respect the fact that memory is allocated in virtual memory on “pages” and > not necessarily contiguously. > > > > sgDMA is better in many systems though because linux can still access all > the memory so if you aren’t recording data, for example, more complicated > software applications can run. > > > > I don’t believe this has been done yet in casper, but it is possible since > these are standard Xilinx provided blocks. We just need to get the block > instantiated properly in sysgen to accept an AXI streaming data stream from > your DSP algorithm or the ADCs. and then on the ARM processor we need > appropriate software/drivers to allocate memory and configure the DMA. > > > > I think I heard a rumor that it was planned, but hasn’t been tackled yet. > > > > With AXIDMA, you can probably get to around 20Gbit/sec (in theory probably > as high as 40 depending on what speed the DDR4 train to) or better transfer > performance to the PL. Not that the little arm on these FPGAs can do much > with that speed of data, but for recording a snippit of data or something > like that that can allow some fairly significant sample rates of I/Q data > for example. (at 8-bit I/Q that’s >1GSPS!). If instead you did the > register approach you mentioned I would expect rates around 100Mbit/sec to > be possible, and to achieve that the processor in the ARM will be going > nuts, because AXI4-Lite tends to require the processor to spin (DMA frees > the processor for other stuff, while polling registers takes time to > accomplish) > > > > > > FWIW: ngVLA plans to create functionality like this in “pure” hdl and > given the current effort to use more VHDL/Verilog blocks in casper ngVLA’s > work may be useful in the future. I hope to make progress on ngVLA’s > approach later this calendar year. But ngVLA is on Intel FPGAs so a porting > process would still be required to get that into Casper. > > > > > > > > *From:* [email protected] <[email protected]> *On Behalf > Of *Ken Semanov > *Sent:* Thursday, October 5, 2023 4:11 AM > *To:* [email protected] > *Subject:* [casper] PL data to PS DDR4 (AXI) {External} > > > > Is there an obvious way to migrate data from the PL into memory that is > mapped into the address space of the PS? Ideally I would use > axi_interconnect as shown > https://casper-toolflow.readthedocs.io/en/latest/axi4lite_documentation.html > > > > A possible approach is to instantiate axi_dma within the PL , and the PL > acts as the master during transfers. But the axi_dma exposes a AXI4-Lite > slave port to the PS so that the PS configures and starts the transfers. > The receiving raw device would be the memory controller of the PS DDR4. > (Presumably the data is accessed later by software via the DMA engine). > > > > Another approach would be to expose a single register, and perform this > slowly word-by-word (without streaming or bursting.) > > > > Is this plausible in CASPER, or are steep changes required? > > > > > > -- > You received this message because you are subscribed to the Google Groups " > [email protected]" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/a/lists.berkeley.edu/d/msgid/casper/0424800a-035f-447f-92ed-07402b9d0239n%40lists.berkeley.edu > <https://groups.google.com/a/lists.berkeley.edu/d/msgid/casper/0424800a-035f-447f-92ed-07402b9d0239n%40lists.berkeley.edu?utm_medium=email&utm_source=footer> > . > > -- > You received this message because you are subscribed to the Google Groups " > [email protected]" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/a/lists.berkeley.edu/d/msgid/casper/BL0PR14MB352338AEAFC2A58D667699CEABCAA%40BL0PR14MB3523.namprd14.prod.outlook.com > <https://groups.google.com/a/lists.berkeley.edu/d/msgid/casper/BL0PR14MB352338AEAFC2A58D667699CEABCAA%40BL0PR14MB3523.namprd14.prod.outlook.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "[email protected]" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/a/lists.berkeley.edu/d/msgid/casper/CAG1GKSnF8Bc7bfMajOVBEqdgdkhp2q3DiikSLRz4jpQX--1RCg%40mail.gmail.com.

