FPGA做AD采样,这种情况如何编程?
通过译码来选通要采样的模拟量,比如有6路选通、即有六路模拟量;这样的话,需采样六次才能将所有模拟量采完,然后分别处理这六个量。如果采样一路的话,感觉好处理一些,循环采样六路,应该如何用verilog HDL来写?
之前觉得AD采样一次本身可以用一个状态机,但是外面还有六个选通的大状态,不知道怎么处理。 选通用一个3-8译码部分实现。 本帖最后由 linjpxt 于 2013-7-29 11:12 编辑
写个大概的思路,
ADC 不管有多少通道都是一样的处理流程,只是多了个通道选择跟数据存放上的区别
通道选择模块不管ADC,只管在通道序号有变化时,使能相应的通路.
always @ ( clk )
begin
case (ad_sta)
0:// 采样 ,等待 然后再转换 ad_sta<=ad_sta+1;
xx:// 转换...ad_sta<=ad_sta+1;
...: // 数据及处理 ...
xx:// chn<=chn+1; ad_sta<=0;
endcase
end
always @ (chn)
case (chn)
xx: 选通通道 1
...
endcase
我不怎么喜欢复用状态机,直接输入六路采样,而且比较好控制,前提是充足的话 linjpxt 发表于 2013-7-29 11:05 static/image/common/back.gif
写个大概的思路,
ADC 不管有多少通道都是一样的处理流程,只是多了个通道选择跟数据存放上的区别
通道选择模 ...
如何将采集得到的数据对应到所选的通道呢? wye11083 发表于 2013-7-29 10:50 static/image/common/back.gif
选通用一个3-8译码部分实现。
这个直接用FPGA来做就行,我是想知道如何通过选通利用一个AD芯片来顺序采集六个通道的模拟量。程序该怎么写比较好? 小状态机嵌套在大状态机里面,用握手信号交互。 asnowgober 发表于 2013-7-29 21:30 static/image/common/back.gif
如何将采集得到的数据对应到所选的通道呢?
这个就更多的方法了,比如分配一个N的数组,然后外面直接来读,或是直接就N路全部输出,外面要用哪个选哪个之类的.或是用FIFO之类的. 设计一个模块,功能是各个通道的轮询切换,状态机表示。用信号线触发采样AD采样模块进行采样,同时根据第一个模块切换通道缓存
页:
[1]