fpga利用FIFO存储高速ADC数据
分类: 嵌入式-05-16 10:39:34
因为工作原因,需要设计一个波形显示的东西。总体架构就采用了STM32+FPGA+ADC.就是利用ADC采集正弦信号,然后将采集到的数据放到FPGA的FIFO里面,接下来,STM32通过和FPGA进行数据通信,将FIFO里面的数据全部读取,然后STM32控制液晶显示器,将读取的数据以波形的形式进行显示。FPGA 主频150MHZ。
外部信号–>ADC–>FPGA–>STM32–>液晶屏
这里主要的技术说明如下
一:其实这个工程主要是ADC的采样频率也不是太高500K-200K之间,所以就只是使用FPGA的FIFO,要是ADC的采样频率要求1M以上的话,估计就要使用SDRAM进行缓存数据了。
二:FPGA控制ADC转换可以很精确的控制ADC的转换时钟,可以最大程度的提高ADC的采样频率。如果使用STM32去控制ADC也是可以的,但是不能最大程度的发挥ADC的采样频率,因为STM32涉及进入中断,然后出中断,这个需要时间的,也许只用几us,但是对ADC已经是很长的时间。最主要的还是STM32不能并行的操控ADC芯片,这个就是CPU和FPGA的主要区别,顺序执行程序和并行执行程序。
三:FPGA和STM32进行通信。
1:简单的指令或者数据:利用FPGA例化一个SPI通信接口,STM32读写SPI接口和FPGA通信,这里用STM32主控,FPGA被控。
2:大一点数据的通信,利用FPGA例化一个FIFO或者DRAM,STM32直接读取FIFO或者DRAM,同样STM32是主控,这里特别注意一下STM32有FSMC的接口控制,这个东西可以读取RAM nandFLASH等等芯片,速度很快,可以将FIFO或者DRAM连接到STM32的FSMC接口,然后STM32读取数据。
3:大批量的数据通信了,就是每秒钟有M以上的数据量,那就外接SDRAM,然后FPGA控制USB芯片(ccy7c68013a用的比较多),或者PCI芯片。这里就没有STM32的事情,因为速度太快,STM32已经满足不了数据传输的要求了。比如一些PXI或者PCI的数据采集卡,都是通过这个架构来做的。
最后放几张工程的RTL视图和modelsim仿真波形图吧。
整个FPGA工程的RTL视图。读写数据模块,FIFO模块,ADC控制模块。
q是STM32读取数据的接口,这里使用8个通道,需要有个地址切换一下的。这样每次在读取8个通道数据需要一些时间的,
所以这里利用了FIFO可以储存一些数据,类似DMA的功能,但是读完数据到重新ADC写数据到FIFO总是要点时间的,最好
是不要配置8个通道,只利用4个通道,空闲出来FIFO给这4个通道做乒乓操作,这样就可以保证数据完全的连续了。
这是通道7读写读写时序放大后的波形,每个读时钟的上升沿出数据,这个之间有1-2个主频时钟延迟的,
按照FPGA150MHZ的主频计算,该通道最大读取频率是75MHZ。建议最大50MHZ读取吧。
如果觉得《fpga利用FIFO存储高速ADC数据》对你有帮助,请点赞、收藏,并留下你的观点哦!