We have an AM3703 device connected to a FPGA via the GPMC interface. In the FPGA, packets are available with variable packet lengths between 47 and 500 DWORDs (32-bit). We want to transfer these packets as fast as possible to the ARM processor. We have 2 possible methods to transfer the packet to the ARM processor:
Italic indicates a question.
Method 1:
- The length of the packet is stored into a FPGA register which is available for the ARM processor.
- Interrupt to the ARM processor indicating that a new packet is available in the FPGA.
- ARM processor will handle interrupt and will read the length of the packet via the FPGA register.
- ARM processor will initiate a DMA transfer to transfer the packet to the DDR2 memory (SDRC interface). The GPMC can only handle bursts of 4, 8 or 16 WORDs (16-bit). How will handle the sDMA these larger burst sizes (split into smaller bursts)?
Method 2 (based on old hardware platform with another processor):
- The ARM processor will initiate a DMA transfer with a length of e.g. 512 DWORDS.
- If a complete packet is available in the FPGA, the FPGA will start the DMA via the DMA request line.
- The DMA will transfer the packet to the DDR2 memory (SDRC interface). Note that the DMA transfer is not completely finished because not all 512 DWORDS are transferred.
- FPGA indicates to the ARM processor the end of the packet. Is it possible to hold a (not complete) DMA transfer via an external signal?
- ARM processor will break DMA transfer and will initiate a new DMA transfer. Is it possible to break a (not complete) DMA transfer via an external signal or via software?
Are there another efficient methods to transfer the packets?