[i=s] 本帖最后由 shiyinjita 于 2013-3-20 20:51 编辑
经过了接近一个月的时间,终于调试完成了8通道的数据采集卡,在这里简单的说一下数据采集卡的
FPGA实现过程。首先确定方案 ->
数据采集卡实现为 AD数据 -> FPGA接收->DDR2(2片)->
arm显示。
其中整体方面 ,因为受DDR2内存的限制,所以为了提高采集数据的长度,所以可以自由配置8 ,4,2,1通道,这样就可以保证在1通道时候,独占内存,2通道的时候平均分配内存,这种设计思路可以整体上提高采集长度。
2 :在DDR2方面,有两种方案可以选择,平均分配内存或者拼接的数据存储到DDR2中,在8,4通道的时候,平均分配虽然可以提高读取的速率,但是跳转BANK导致了刷新时间浪费了很多,同时为了操作方便,采用了通道数据拼接然后存储到DDR2中。
3 :因为ARM有选择的读取某一通道的数据,所以必须准备的选择好正确的数据,这样就必须在拼接的时候,记录下每个通道的位置,这个位置与上位机发送的通道对比,哪个AD位数为1,就保留哪个AD位数的数据。
4 : 关于触发,因为DDR2最小burst为4,两片DDR2就是8,在8个通道拼接的时候,每个触发能准确的对准每个数据,所以触发的误差就是 +-1 ,这个1的误差是由于触发和时钟的差导致的,在数据采集卡中可以不用考虑,而4ch的时候,由于拼接的数据中含有4 *2 个数据,这样就会导致触发抖动就是1 (+-1) ,而在1个通道的时候,触发误差就是7 (+-1) ,所以FPGA必须准确的记录下触发误差,当误差为0的时候,按照采样个数进行采集,而当误差 >=1的时候,FPGA就需要多读一个burst,然后丢掉前面的误差数据,以及后面多余的数据,这时候剩下的数据就是正确采集的数据(针对单次)
5 :关于触发,连续模式情况下,与上面情况一下,必须准确的记录好trig位置,在这里不再详述。
6 :关于采集个数,因为上位机发送的是触发前和触发后的个数,所以在8ch的时候为这个数据的 n*8/2 ,4通道为N*4/2。。。。。
7 :关于复位,我采用的SP6的DDR2,因为没有复位
fifo机制,所以必须在每次采集之前都必须读空FIFO数据。
以上就是FPGA采集的过程,
下一步就是在FPGA中做运算,包括平均值,最大值,最小值,FFT等算法。写完后进行分享
动静道人-2013-03-20