EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——高速数据采集之ADC(2) ) r, Q0 M0 |2 `
& p1 `8 b$ v4 B0 Q
作者:chenzhufly QQ:36886052 1、 硬件环境 硬件平台:Embest SoC --LarkBoard 软件平台:开发板-linux-3.10.31 Quartus 14.0
; l$ q, q5 X+ l% v. j0 q& b7 r4 E* s
2、测试环境
/ E7 M+ z5 z4 h0 H6 V! [0 ?( s
示波器:DS1054,(论坛送的哦,一直没有写获奖感谢,羞愧啊) 信号源:泰克的AFG3252 ; O0 O9 E! _% d9 U
程序其实很简单,硬件ok的话,几行代码就搞定了,主要注意几点: 1)ADC需要时钟输入,这里输入的是105M时钟,如果按奈奎斯特定律 2倍的信号频率需要小于采样频率,那么就是大概能够正确还原50Mhz左右的模拟信号; 2)通道1接入的是泰克的AFG3252,最大可输入240Mhz的正弦信号 3)OEB需要设置成0 4)ADC数据输出的同步时钟为DCOA和DCOB & h# F6 a' z6 U7 ]! y7 m0 K
AD9628的verilog驱动代码如下: - assign o_adc_clk_105m_p = s_video_clk_105m ;
- assign o_adc_oeb = 1'b0;8 i/ o( c* K; y& X/ R3 f/ ^% @
" \' L' Z& g, ]6 A
. M# u" Z# W/ p8 `8 k ~
3 E5 V& A1 g( ?) x7 Z
AD9628的输出同步时钟 - always @(*)
- begin
- s_chnl_a_clk = i_adc_dco_p;
- s_chnl_b_clk = i_adc_dco_n;
- end
/ O4 e" A/ Q B& |: T! i & Q# ]" y: Z6 _2 p! _# T C
# s, f& d( u% }: }* @9 q3 O
0 k/ Q) p: x7 ^获取AD9628的数据 - always @(posedge s_chnl_a_clk or negedge fpga_rst_n)
- if (!fpga_rst_n)
- s_a_data <= 12'd0;
- else// if (i_adc_dco_p)
- s_a_data <= i_adc_data_p[11:0];
( ^" J+ i/ o5 M" Q& o9 y6 {$ { 9 D$ r+ _: R. F) R
; G6 Z6 m) N$ i: H- A6 R2 [' u6 |
1 N- X5 x8 }" H' ]: i0 n
/ ]9 i9 G F, e+ q* m4、测试结果 这个测试结果有些简陋了,说明是有数据上来的,而且也是符合预期的,我输入了100Mhz,10Mhz,30Mhz的正弦信号做测试,都能得到大致的正弦波形,但是数据的正确性还没有进一步的检验。下图是信号发生器的输出: # W5 `( d& }7 h. H. w( `; s; f
下图是调试利器SignalTap的截图(怎么使用SignalTap就不在这里细说了)可以很清晰的看出是个正弦信号 ; V, `' a; \# u2 g
5、小结 1) 做到这,可以说已经可以通过Altera SoC控制AD9628采集到模拟信号了,但是依然还有许多问题,正如我上面说的那样,对于数据的格式,和数据的正确性还没有深究,只是这条路通了,这两个问题留着以后再去进一步完善,AD9628的datasheet还需要再认真的读读; 2)AD9628的spi控制端口还没有弄明白,目前都是默认模式; 3)接下来要找个方法把FPGA采集到的数据发送的ARM端去; + K9 t. H3 N* R6 k( `; I& G
|