解读ADC采样芯片(EV10AQ190A)的工作模式(单通道模式)

举报
李锐博恩 发表于 2021/07/15 08:44:48 2021/07/15
【摘要】 有了上两篇博文的铺垫,双通道模式以及四通道模式,单通道模式也就很容易理解了,并且我已经想好了下一篇博文要写什么了。 直接看框架图吧: 直接说重点,任意一个输入端口输入的模拟信号同时进入ADC芯片的四个核(也可以理解为4个通道),这四个核的时钟输入是由内部时钟电路(Clock Circuit)产生的,这四个时钟之间是什么关系呢? 首先这四个时钟频率一致,都是1.25GHz。 ...

有了上两篇博文的铺垫,双通道模式以及四通道模式,单通道模式也就很容易理解了,并且我已经想好了下一篇博文要写什么了。

直接看框架图吧:


直接说重点,任意一个输入端口输入的模拟信号同时进入ADC芯片的四个核(也可以理解为4个通道),这四个核的时钟输入是由内部时钟电路(Clock Circuit)产生的,这四个时钟之间是什么关系呢?

首先这四个时钟频率一致,都是1.25GHz。

其次,假设以ADC A这个核的时钟为坐标系(称之为标准时钟),那么由上图易知,ADC B的时钟输入为偏移了180°的时钟,同理,ADC C的输入时钟偏移了90°,ADC D的输入时钟偏移了270°。

其时序图如下:


我们分解开来看:

模拟输入XAI:


基准时钟CLK:


将上面的基准时钟2分频,然后各种相位偏移得到如下内部采样时钟:


可以将上面的内部时钟由上到下编号为clk_a、clk_c、clk_b、clk_d,每个时钟的上升沿到达时,都会对输入模拟数据进行一次采样,这样就相当于采样时钟的最高频率为5GHz,多么充分地应用了4个核的优势呀!

由完整的时序图还可以看出clk_a的第一个时钟上升沿到达时,核A(ADC A)采样的数据为N,clk_c的第一个时钟上升沿到达时,采样的数据为N+1,adc_b的第一个时钟上升沿到达时,采样的数据为N+2,adc_d的第一个时钟上升沿到达时,采样的数据为N+3,后面依次循环。

从下面这张图上也能看出上面的采样数据关系:


A0...A9就是ADC A采样得到的数据;(N)

B0...B9就是ADC B采样得到的数据;(N+2)

C0...C9就是ADC C采样得到的数据;(N+1)

D0...D9就是ADC D采样得到的数据;(N+3)

恰好第一个时钟时钟上升沿到达时,4个核采样四个数据。

同样,下面就进入了数据同步环节:


同步时钟仍然是基准时钟的4分频,也就是说同步时钟的频率是基准时钟CLK的1/4。

ADR的第一个时钟上升沿到达时,同步数据N,之后是同步数据N+1,再之后同步数据N+2,然后是N+3,ADR、BDR、CDR、以及DDR四个同步时钟理论上是一致的,时钟上升沿以及下降沿同时有效。

程序的部分思路如下:


  
  1. module adc(...); //由于这是一个不完整的程序,所以省略了输入输出;
  2. wire syn_clk; //数据同步时钟,这个时钟一般是由fpga中的IP核产生
  3. wire [9:0] ad_data_a,ad_data_b,ad_data_c,ad_data_d; //adc采样得到的数据,对于四通道模式而言,此为A端口输入模拟信号,采样得到的数据
  4. reg [9:0] ad_data1,ad_data2,ad_data3,ad_data4,ad_data5,ad_data6,ad_data7,ad_data8; //假设该寄存器变量用于存放adc采样得到的数据
  5. //数据同步
  6. //同步时钟上升沿
  7. always@(posedge syn_clk) //同步时钟上升沿到来时,同步一个数据
  8. begin
  9. ad_data1 <= ad_data_a; //核A采样得到的数据
  10. end
  11. always@(posedge syn_clk) //同步第二个数据
  12. begin
  13. ad_data3 <= ad_data_b; //核B采样得到的数据
  14. end
  15. always@(posedge syn_clk) //同步第三个数据
  16. begin
  17. ad_data2 <= ad_data_c; //核C采样得到的数据
  18. end
  19. always@(posedge syn_clk) //同步第四个数据
  20. begin
  21. ad_data4 <= ad_data_d; //核D采样得到的数据
  22. end
  23. //同步时钟下降沿
  24. always@(negedge syn_clk) //同步时钟下降沿沿到来时,同步第五个数据
  25. begin
  26. ad_data5 <= ad_data_a; //核A采样得到的数据
  27. end
  28. always@(negedge syn_clk) //同步第七个数据
  29. begin
  30. ad_data7 <= ad_data_b; //核B采样得到的数据
  31. end
  32. always@(negedge syn_clk) //同步第六个数据
  33. begin
  34. ad_data6 <= ad_data_c; //核C采样得到的数据
  35. end
  36. always@(negedge syn_clk) //同步第八个数据
  37. begin
  38. ad_data8 <= ad_data_d; //核D采样得到的数据
  39. end
  40. endmodule






文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/81058484

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。