LVDS高速ADC接口, Xilinx FPGA实现

 LVDS高速ADC接口, Xilinx FPGA实现

LVDS

即Low-Voltage Differential Signaling。FPGA的selecteIO非常强大,支持各种IO接口标准,电压电流都可以配置。其接口速率可以达到几百M甚至上千M。使用lvds来接收高速ADC产生的数据会很方便。像ISERDES,IDDR,IDELAY,OSERDES,ODDR这种资源在FPGA的IOB中多得是(每个IO都对应有,最后具体介绍),根本不担心使用。最近刚在项目中用到,提供一个思路,具体的器件使用参考FPGA手册。

使用的AD芯片是ADI的AD9653,125M16bit高精度高速ADC,用到的采样速率是80M。其SPI配置会单独开一篇来讲,SPI配置里面有个大坑,本来以为调好了的,后来又发现了问题,调了三天才定位到问题在哪,这就是硬件的魅力(坑爹)所在了吧。这里主要介绍FPGA的接收部分。

接收ADC数据的时序图,

 LVDS高速ADC接口, Xilinx FPGA实现

有几点需要注意:
0 , 可以看出分成三种信号,数据采样时钟DCLK,帧同步信号FCLK,和输入数据DATA
1,输入数据采样时钟默认是已经对齐了输入数据的中点,但帧时钟是和数据字节边缘对齐的。
2,使用Iserdes接收数据,Idelay调整时钟延迟。

1,对数据采样时钟的处理如下

通过控制延时,使得CLK和经过IBUFDS的BitClk对齐,从而消除IBUFIO和BUFR还有net的延时。这样所有的输入信号都只经过了一个IBUFDS,延时相等。对Idelay的控制,可以手动调节,也可以用自动算法。(参考xapp254)

 LVDS高速ADC接口, Xilinx FPGA实现

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)
);

wire W_delay_rdy;
wire [4:0] W_delay_cnt;
wire [7:0] W_allign_word;

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: Delayed data output
.C(W_fc_clk), // 1-bit input: Clock input
.CE(1'b0), // 1-bit input: Active high enable increment/decrement input
.CINVCTRL(1'b0), // 1-bit input: Dynamic clock inversion input
.CNTVALUEIN(W_delay_cnt), // 5-bit input: Counter value input
.DATAIN(1'b0), // 1-bit input: Internal delay data input
.IDATAIN(W0_dc_clk), // 1-bit input: Data input from the I/O
.INC(1'b0), // 1-bit input: Increment / Decrement tap delay input
.LD(1'b1), // 1-bit input: Load IDELAY_VALUE input
.LDPIPEEN(1'b0), // 1-bit input: Enable PIPELINE register to load data input
.REGRST(1'b0) // 1-bit input: Active-high reset tap-delay input
);

BUFIO BUFIO_p (
.O(W_dc_clk), // 1-bit output: Clock output (connect to I/O clock loads).
.I(W2_dc_clk) // 1-bit input: Clock input (connect to an IBUF or BUFMR).
);

BUFR #(
.BUFR_DIVIDE("4"), // Values: "BYPASS, 1, 2, 3, 4, 5, 6, 7, 8"
.SIM_DEVICE("7SERIES")// Must be set to "7SERIES"
)
BUFR_inst (
.O(W_fc_clk), // 1-bit output: Clock output port
.CE(1'b1), // 1-bit input: Active high, clock enable (Divided modes only)
.CLR(1'b0), // 1-bit input: Active high, asynchronous clear (Divided modes only)
.I(W2_dc_clk) // 1-bit input: Clock buffer input driven by an IBUF, MMCM or local interconnect
);

用户喜欢...

LT6275 是一款单路 / 双路低功率、高速、非常高转换速率运算放大器

LT6274 / LT6275 是一款单路 / 双路低功率、高速、非常高转换速率运算放大器,具有出色的 AC 和 DC 性能。该器件所采用的电路拓扑结构是一个电压反馈放大器,并具有匹配的高阻抗输入以及电流反...


使用RS-485和电流回路接口实现可靠的工业连接

尽管蓝牙,以太网和其他连接选项广泛普及并支持高数据速率,但工业应用设计人员仍然需要确保以最低的成本获得最可靠的连接。他们还必须在安装的连接选项基础范围内工作。 由于这些原...


nRF52是可穿戴产品、人机接口设备(比如遥控器、玩具、智能家居设备和电器)以及无线充电应用的理想单芯片解决方案

Nordic Semiconductor nRF52系列SoC Nordic Semiconductor nRF52系列SoC运行频率为64MHz 、 EEMBC Coremark评分215 、能效达90 Coremark/mA,同时具有39A/MHz (闪存)和30A/MHz (RAM)的功耗 。nRF52系列用于在最短的时间内快速执...


QDR SRAM接口FPGA 详细Verilog代码

QDR SRAM介绍 QDR 具有独立的读、写数据通路,均使用DDR,在每个时钟周期内会传输四个总线宽度的数据 (两个读和两个写),这就是QDR四倍数据速率的由来。 这里用到的是典型2字突发的QDR,...


高速ADC模拟输入架构类型详解

采用高速模数转换器(ADC)的系统设计非常困难,对于输入有两类ADC架构可供选择:缓冲型和无缓冲型。 缓冲和无缓冲架构的特征 缓冲架构的基本特征 高线性度缓冲器,但需要更高的功率;...


高速ADC输入接口设计的6个条件

采用高输入频率、高速模数转换器(ADC)的系统设计是一项具挑战性的任务。ADC输入接口设计有6个主要条件,你知道是那些吗? 输入阻抗 输入阻抗是设计的特征阻抗。ADC的内部输入阻抗取决于...


MIPI联盟公开其MIPI I3C传感器接口规范

接口规范的公开有助于智能手机、可穿戴设备、物联网设备、增强现实/虚拟现实和汽车系统实现更多设计创新 致力于为移动和受移动影响行业制定接口规格的国际组织MIPI®联盟今日宣布公开...


【原创深度】WISP为农村地区提供高速互联网接入

互联网为人们的生活提供了便利。在城市中,人们可以通过电缆或光纤接入互联网,轻松获得超百兆带宽的下载速度。然而,这轻而易举就能够得到的资源,在很多农村地区,是无论付出什么...


杜绝高速转换器带宽条款

有许多以转换器的带宽为中心的混淆规范。我应该使用什么带宽条款来为我的下一个设计选择合适的转换器? 当开始一个新的设计时,首先需要确定的参数是带宽。带宽将提供设计方向,并...


终结高速转换器带宽术语

有很多令人困惑的规格都与转换器带宽有关。为了在新的设计中选用适当的转换器,我应当使用什么带宽术语呢? 开始一个新设计时,需要决定的首要参数就是带宽。带宽为设计指明方向,...


[原创] TI TIDEP-0087电动汽车(EV)充电桩人机接口(HMI)参考设计

TI公司的TIDEP-0087是采用AM335x系列微处理器的电动汽车( EV)充电基础设施人机接口(HMI)参考设计,采用软件加速图像和Qt电...


高速电路中电阻端接有什么作用?有哪几种端接方式?

先说说电路为什么需要端接?众所周知,电路中如果阻抗不连续,就会造成信号的反射,引起上冲下冲,振铃等信号失真,严重影响信号质量。所以在进行电路设计的时候阻抗匹配是很重要的...


HDMI FORUM发布 HDMI 规格2.1 版

HDMI Forum, Inc. 今天宣布发布HDMI规格2.1版,对所有HDMI 2.0 采用者开放。最新的HDMI规格支持一系列更高的视频分辨率、包...


ROHM旗下蓝碧石半导体开始量产在不稳定的电源环境下也可进行高速数据备份的1Mbit FeRAM

ROHM集团旗下蓝碧石半导体面向需要高速高频率的日志数据获取和紧急时高速数据备份的智能仪表/计量设备/医疗设...


这九条高速PCB信号走线规则,你未必懂?

规则一:高速信号走线屏蔽规则 在高速的PCB设计中,时钟等关键的高速信号线,走线需要进行屏蔽处理,如果没有屏蔽或只屏蔽了部分,都会造成EMI的泄漏。建议屏蔽线,每1000mil,打孔接地...


利用集成式工业接口 数字隔离器 减少尺寸与成本

随着竞争产品价格的降低和产品差异化需求的增加,在工 业市场上生存也变得越来越艰难。同时,安全标准不见有 丝毫放宽,这要求更多的工业应用采用电流隔离,给光耦 合器带来不利影响。...