ADS6445开发笔记(2)---- LVDS 高速接口

这篇博客详细介绍了在ADS6445开发中处理LVDS高速接口的步骤,包括采样时钟同步处理、IDELAYCTRL和IDELAY2的使用、ISERDESE2模块的功能以及手动和自动调节对齐的方法。此外,还讨论了帧同步信号的检测以及数据处理策略。
摘要由CSDN通过智能技术生成

 

目录

1.  数据接口时序图

2 采样时钟同步处理

2.1 delayctrl 原语

2.2  idelay2 原语

2.3 ISERDESE2

2.4 手动调节对齐

2.5 自动调节对齐

3. 帧同步信号

4.数据的处理


从上一章节,芯片资料可以看到,串行输出LVDS数据的bit clock,都是400MHZ以上的。这显然不能用fpga Verilog 语言直接写代码进行采样,需要用到专门的 iserdese 原语。

1.  数据接口时序图

数据接口有很多中模式,这里只贴了一种的图

上图可以看到以下几点:

  • 信号线分3类,数据采集时钟DCLK,帧同步信号FCLK,输入数据DATA 
  • 输入数据采样时钟默认是已经对齐了输入数据的中点,但帧时钟是和数据字边缘对齐
  • 使用iserdese接收数据,idelay调整时钟延迟

2 采样时钟同步处理

这里主要对 采样时钟 bitclk  做延迟处理,使其能正确采样到数据。框图中的模块,都不是IP 核,而是原语。在tools---language templates中可以搜索到。

2.1 delayctrl 原语

因FPGA的电压偏置、制造过程、电压、温度的不同,可能会对整个芯片的时序造成一些小的影响。IDELAYCTRL可以通过一个较高频率的参考时钟REFCLK为IDELAY或ODELAY提供延时抽头,可选0~31。参考时钟的频率可选200MHz或者300MHz,它们的每个抽头的分辨率分别约是78ps和52ps。假设我们的LVDS输入为600Mbps,则选用200MHz需要21taps,300MHz需要32taps,所以最终选择200MHz为参考时钟。(1/600M = 1666ps, 1666ps/78ps = 21 ,1666ps/52ps= 32。抽头个数21更合理)
使用时还需要注意需要对IDELAYCTRL进行LOC约束,实现工具将IDELAYCTRL实例自动复制到整个器件,甚至复制到未使用延迟单元的时钟区域中。这样做资源占用率较高,在每个时钟区域内都要使用一个全局 时钟资源,并且使用布线资源较多,因此功耗较大。参考文档:输入输出延迟单元IODELAY简介

思考:

1. IDELAYCTRL 的输入时钟refclk 决定idelay2 每个抽头的延迟有多少ps , idelay2 原语,根据器件不同在原语选择上可以有不同的抽头,比如CNTVALUEOUT [4:0] 2^5 就是 0 - 31个抽头。0 就是没有延迟。

2. IDELAYCTRL 的输出RDY 代表  IDELAYCTRL使能有效

IDELAYCTRL模块是为IDELAY模块服务的。delayctrl的位置需要手动约束。可以利用plananead找到delayctrl的位置,在Device视图中,找到约束文件中所定义的delay的位置,就是下图橙色方块。在他附近找到delayCtrl,图中白色的矩形,读出她的位置信息,再添加到你的约束文件里就可以了。

2.2  idelay2 原语

 C:  Clock input  ,分频时钟

 CNTVALUEIN:   5-bit input, Counter value input 。 这个值控制输出抽头个数。比如一个抽头延迟78ps.这里输入2 ,就是延迟78*2 = 156ps .

IDATAIN : 需要延迟的输入数据,在这里就是DCLK 时钟。

DATAOUT :延迟输出

2.3 ISERDESE2

先说ISERDESE2。该模块接收外部输入FPGA的高速源同步串行信号,在FPGA内部将其转换为用户需要的并行数据信号。如图1所示为ISERDESE2的功能框图,咱们可以将按照功能分成5个部分:

 

CLK:  -- 1-bit input: High-speed clock 。DDLY  输入,逻辑组合后产生 O ,看总框图,应该是O 是DDLY 直接输出的结果

CLKB :   ---- High-speed secondary clock   。  CLK  时钟取反

CLKDIV: ----  经过 BUFR 分频的时钟

CLKDIVP:---- 接地

D : 需要对齐的信号

DDLY : 需要对齐的信号经过 DELAY 延迟后的结果

RST : 和 delay_ctrl 复位信号一致

SHIFTIN1   SHIFTIN2: ISERDESE级联的时候需要用,对接上一个模块的 SHIFTOUT1 ,SHIFTOUT2

BITSLIP : 这里没用到,在frame对齐的时候需要用到

2.4 手动调节对齐

module lvds_data (
   input   I_AD_FPGA_DC_p  ,  
   input   I_AD_FPGA_DC_n  ,
   input   I_ref_clk_200m  ,
   input   I_reset_n  
   );
   
   wire       W0_dc_clk;
     
   wire       W_delay_rdy;
   wire [4:0] W_delay_cnt;
   wire [7:0] W_allign_word;  
   
   wire       W_dc_clk;
   wire       W2_dc_clk ;
   wire       W_fc_clk;
  
   IBUFDS #(
      .DIFF_TERM("TRUE"),        // Differential Termination
      .IBUF_LOW_PWR("TRUE"),     // Low power="TRUE", Highest performance="FALSE" 
      .IOSTANDARD("DEFAULT")     // Specify the input I/O standard
   ) IBUFDS_inst10 (
      .O(W0_dc_clk),            // Buffer output
      .I(I_AD_FPGA_DC_p),       // Diff_p buffer input (connect directly to top-level port)
      .IB(I_AD_FPGA_DC_n)       // Diff_n buffer input (connect directly to top-level port)
   );



   vio_0 vio_u (
     .clk(W_fc_clk),           // input wire clk
     .probe_in0(W_delay_rdy),  // input wire [0 : 0] probe_in0
     .probe_in1(W_allign_word),// input wire [7 : 0] probe_in1
     .probe_out0(W_delay_cnt)  // output wire [4 : 0] probe_out0
   );

   (* IODELAY_GROUP = "delay1" *) 
   IDELAYCTRL IDELAYCTRL_inst1 (
      .RDY(W_delay_rdy),       // 1-bit output: Ready output
      .REFCLK(I_ref_clk_200m), // 1-bit input: Reference clock input
      .RST(~I_reset_n)         // 1-bit input: Active high reset input
   );

   (* IODELAY_GROUP = "delay1" *) 
   IDELAYE2 #(
      .CINVCTRL_SEL("FALSE"),         // Enable dynamic clock inversion (FALSE, TRUE)
      .DELAY_SRC("IDATAIN"),          // Delay input (IDATAIN, DATAIN)
      .HIGH_PERFORMANCE_MODE("TRUE"), // Reduced jitter ("TRUE"), Reduced power ("FALSE")
      .IDELAY_TYPE("VAR_LOAD"),       // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE
      .IDELAY_VALUE(0),               // Input delay tap setting (0-31)
      .PIPE_SEL("FALSE"),             // Select pipelined mode, FALSE, TRUE
      .REFCLK_FREQUENCY(200.0),       // IDELAYCTRL clock input frequency in MHz (190.0-210.0, 290.0-310.0).
      .SIGNAL_PATTERN("CLOCK")        // DATA, CLOCK input signal
   )
   IDELAYE2_inst1 (
      .CNTVALUEOUT(), // 5-bit output: Counter value output
      .DATAOUT(W1_dc_clk),       // 1-bit output: Delaye
高速ADC/DAC的测量和设计问题解答 高速ADC/DAC是指采样率在几百兆赫兹或更高的范围内工作的模数转换器。在测量和设计高速ADC/DAC时,存在以下一些问题和解答方法: 1. 抖动(jitter)问题: 抖动是指由于时钟源或信号不稳定性引起的采样时刻偏移。为了解决这个问题,可采用更稳定的时钟源、抗抖动电路以及使用可靠的时钟同步技术。 2. 噪音问题: 高速ADC/DAC往往面临噪音干扰,特别是在高频段。通过使用低噪音电源、合理的电源分离和滤波技术,可以有效降低噪音干扰。 3. 带宽问题: 高速ADC/DAC通常需要宽带信号进行输入和输出,而带宽限制可能会对性能产生负面影响。为了解决这一问题,可以采用宽带放大器、宽带传输线路和适当的滤波器等技术。 4. 时序问题: 在高速ADC/DAC中,准确的时序控制是至关重要的。通过使用合适的时序控制电路和时序校准算法,可以保证输入和输出信号的准确性和稳定性。 5. 数据接口问题: 高速ADC/DAC通常使用高速串行接口进行数据传输。在设计和测量过程中,需要注意接口的匹配、信号电平的适配以及错误检测和校验等技术。 6. 信号完整性问题: 在高速ADC/DAC设计中,信号完整性是非常重要的。需要注意传输线路的阻抗匹配、信号层次分离、信号回路布局以及供电和接地等因素,以确保信号的稳定传输和准确度量。 综上所述,高速ADC/DAC的测量和设计问题需要充分考虑抖动、噪音、带宽、时序、数据接口和信号完整性等因素。通过合理的选择和设计电路,采用适当的校准和测试技术,可以有效解决这些问题,提高高速ADC/DAC的性能和可靠性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值