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

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

直接看框架图吧:


直接说重点,任意一个输入端口输入的模拟信号同时进入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四个同步时钟理论上是一致的,时钟上升沿以及下降沿同时有效。

程序的部分思路如下:

module adc(...);    //由于这是一个不完整的程序,所以省略了输入输出;  
  
    wire syn_clk;   //数据同步时钟,这个时钟一般是由fpga中的IP核产生  
    wire [9:0] ad_data_a,ad_data_b,ad_data_c,ad_data_d;   //adc采样得到的数据,对于四通道模式而言,此为A端口输入模拟信号,采样得到的数据  
    reg [9:0] ad_data1,ad_data2,ad_data3,ad_data4,ad_data5,ad_data6,ad_data7,ad_data8;    //假设该寄存器变量用于存放adc采样得到的数据  
      
      
    //数据同步  
	//同步时钟上升沿
    always@(posedge syn_clk)    //同步时钟上升沿到来时,同步一个数据  
    begin  
      
        ad_data1 <= ad_data_a;  //核A采样得到的数据
    end  
    always@(posedge syn_clk)    //同步第二个数据 
    begin  
      
        ad_data3 <= ad_data_b;  //核B采样得到的数据
    end  
	always@(posedge syn_clk)    //同步第三个数据 
    begin  
      
        ad_data2 <= ad_data_c;  //核C采样得到的数据
    end  
	always@(posedge syn_clk)    //同步第四个数据 
    begin  
      
        ad_data4 <= ad_data_d;  //核D采样得到的数据
    end  
      
	//同步时钟下降沿  
      always@(negedge syn_clk)    //同步时钟下降沿沿到来时,同步第五个数据  
    begin  
      
        ad_data5 <= ad_data_a;  //核A采样得到的数据
    end  
    always@(negedge syn_clk)    //同步第七个数据 
    begin  
      
        ad_data7 <= ad_data_b;  //核B采样得到的数据
    end  
	always@(negedge syn_clk)    //同步第六个数据 
    begin  
      
        ad_data6 <= ad_data_c;  //核C采样得到的数据
    end  
	always@(negedge syn_clk)    //同步第八个数据 
    begin  
      
        ad_data8 <= ad_data_d;  //核D采样得到的数据
    end  
      
  
endmodule  






猜你喜欢

转载自blog.csdn.net/Reborn_Lee/article/details/81058484