一、背景描述
二、设计思路
三、乒乓操作
一、背景描述
在项目中,ADC数据的采集通常有两大难点,一是接口上的调试,比如:低速spi接口,高速lvds接口,高速jesd204b/jesd204c接口,这一类是基于标准协议的采集,根据ADC的数据手册进行采集;另一个是接收侧存储处理,大家都知道ADC的数据是无法通过反压来进行握手处理的,也就是FPGA设计的时候需要根据ADC的采样速率来评估FPGA系统的内存带宽设计。
二、设计思路
在处理中最经典的一种方式就是乒乓操作。外部输入的ADC数据,通过ADC数据通道切换,传输至两个数据缓冲区中,数据缓冲中比较常用的存储单元为FIFO或者RAM等。
笔者通过状态机实现ADC数据通路切换进行来回切换,将经过缓冲的ADC数据流没有停顿地搬移到DDR内存。
①在第一个FIFO写操作过程,将输入的ADC数据缓存到第一个FIFO。
②在第二个FIFO写操作过程,将输入的ADC数据缓存到第二个FIFO。同时在写入第二个FIFO的时候,必须将第一个FIFO的数据搬移到DDR中,必须保证在一轮FIFO写入过程器件中,完成一次DMA搬移,将第一个FIFO的数据完全写入至DDR中。
③在第一个FIFO写操作过程,将输入的ADC数据缓存到第一个FIFO。同时在写入第一个FIFO的时候,必须将第二个FIFO的数据搬移到DDR中,必须保证在一轮FIFO写入过程器件中,完成一次DMA搬移,将第二个FIFO的数据完全写入至DDR中。
④不断循环重复上述的过程,FIFO写入ADC数据,DMA搬移数据,如此利用乒乓操作实现ADC数据的无缝采样。
三、乒乓操作
状态机实现两个FIFO的写入,启动后,就进入两个FIFO的来回切换写入。ADC的采样长度足够支持项目数据分析,也就是写入内存的数据足够分析,则停止写入,等待下一轮的触发。
FIFO数据的读出与DMA搬移,也是通过状态机实现来回读取FIFO数据,并使用FDMA搬移到DDR中,保持每轮写入FIFO的数据长度与DMA搬移长度一致。
很多时候涉及到写入FIFO速率和读取FIFO速率不一致。可能存在这种情况,当一轮操作过程中DMA搬移速度过慢,导致搬移的FIFO再次写入ADC数据,造成ADC数据丢失。这种情况是需要FPGA开发者去解决,两个解决方向:一个是FIFO深度的设置;另一个是DMA搬移时钟速率的控制。其实一般ADC的采样时钟是固定的,更多地通过跨时钟域的方式,以更高的速率将FIFO的ADC数据搬移到DDR中,这样就能避免上述问题的发送。