0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LVDS高速ADC接口_Xilinx FPGA实现

Hx 作者:工程师陈翠 2018-06-30 10:23 次阅读

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

);

ISERDESE2 #(

.DATA_RATE(“SDR”), // DDR, SDR

.DATA_WIDTH(8), // Parallel data width (2-8,10,14)

.DYN_CLKDIV_INV_EN(“FALSE”), // Enable DYNCLKDIVINVSEL inversion (FALSE, TRUE)

.DYN_CLK_INV_EN(“FALSE”), // Enable DYNCLKINVSEL inversion (FALSE, TRUE)

.INIT_Q1(1’b0),

.INIT_Q2(1‘b0),

.INIT_Q3(1’b0),

.INIT_Q4(1‘b0),

.INTERFACE_TYPE(“NETWORKING”),// MEMORY, MEMORY_DDR3, MEMORY_QDR, NETWORKING, OVERSAMPLE

.IOBDELAY(“IBUF”), // NONE, BOTH, IBUF, IFD

.NUM_CE(2), // Number of clock enables (1,2)

.OFB_USED(“FALSE”), // Select OFB path (FALSE, TRUE)

.SERDES_MODE(“MASTER”), // MASTER, SLAVE

.SRVAL_Q1(1’b0),

.SRVAL_Q2(1‘b0),

.SRVAL_Q3(1’b0),

.SRVAL_Q4(1‘b0)

ISERDESE2_inst0 (

.O(W2_dc_clk), // 1-bit output: Combinatorial output

.Q1(W_allign_word[0]), // Q1 - Q8: 1-bit (each) output: Registered data outputs

.Q2(W_allign_word[1]),

.Q3(W_allign_word[2]),

.Q4(W_allign_word[3]),

.Q5(W_allign_word[4]),

.Q6(W_allign_word[5]),

.Q7(W_allign_word[6]),

.Q8(W_allign_word[7]),

.SHIFTOUT1(),

.SHIFTOUT2(),

.BITSLIP(),

.CE1(1’b1),

.CE2(1‘b1),

.CLKDIVP(1’b0), // 1-bit input: TBD

.CLK(W_dc_clk), // 1-bit input: High-speed clock

.CLKB(~W_dc_clk), // 1-bit input: High-speed secondary clock

.CLKDIV(W_fc_clk), // 1-bit input: Divided clock

.OCLK(1‘b0), // 1-bit input: High speed output clock used when INTERFACE_TYPE=“MEMORY”

.DYNCLKDIVSEL(1’b0), // 1-bit input: Dynamic CLKDIV inversion

.DYNCLKSEL(1‘b0), // 1-bit input: Dynamic CLK/CLKB inversion

.D(W0_dc_clk), // 1-bit input: Data input

.DDLY(W1_dc_clk), // 1-bit input: Serial data from IDELAYE2

.OFB(1’b0), // 1-bit input: Data feedback from OSERDESE2

.OCLKB(1‘b0), // 1-bit input: High speed negative edge output clock

.RST(~I_reset_n), // 1-bit input: Active high asynchronous reset

.SHIFTIN1(1’b0),

.SHIFTIN2(1‘b0)

);

1.1手动调节对齐

首先来看看手动调节算法,用vivado的vio可以很方便的输入输出,可手动在线修改观察现象,对后面的自动训练算法也有一定的启发作用。

默认R_delay_cnt=0时,可以看到输入的正弦波形很乱

LVDS高速ADC接口_Xilinx FPGA实现

LVDS高速ADC接口_Xilinx FPGA实现

慢慢的增加R_delay_cnt,当R_delay_cnt=12时,开始出现稳定的正弦波,实验发现R_delay_cnt=14,15,16时恰好采到时钟的边缘,也就是跟输入的原始时钟对齐了,可以看到采到边缘是allign_word一直在跳变,有的是0,有的是1。一直到R_delay_cnt=18,正弦波都很稳定。有效窗口可以准确计算出来,200M的Idelay参考时钟,78ps/tap。7tap*78ps=546ps。说明数据的有效窗口很小,毕竟是320M的DDR,半个周期都才1.56ns.

LVDS高速ADC接口_Xilinx FPGA实现

LVDS高速ADC接口_Xilinx FPGA实现

继续增加R_delay_cnt,当R_delay_cnt=20时,正弦波又变得不规则了。

LVDS高速ADC接口_Xilinx FPGA实现

LVDS高速ADC接口_Xilinx FPGA实现

最后取R_delay_cnt=15,可以在代码里面写死。

1.2自动训练算法

既然有了手动调节的算法,为什么还要用自动训练对齐的算法呢?在高低温测试的时候,器件的延迟会受温度的影响发生变化,特别是在时钟频率很高,数据有效窗口很小的时候,这时候就需要能够动态的改变R_delay_cnt的值去自适应delay的变化,增加了鲁棒性。

有了上面的手动调节算法,自动训练的思路也很简单了。上电复位后R_delay_cnt一直自加,记下最后一个全0和第一个全1的值,取中点。这里只考虑了一种情况,还可能是从全1到全0的情况。代码如下

wire W_delay_rdy ;

reg [4:0] R_delay_cnt ;

reg R_allign_down;

reg [4:0] R_cnt_low ;

reg [4:0] R_cnt_high ;

reg [5:0] R_cnt_sum ;

wire [4:0] W_half_cnt ;

wire [4:0] W_delay_cnt ;

wire [7:0] W_allign_word;

//auto allign fsm

//00000000-》11111111

// |

// half

always @(posedge W_fc_clk or negedge I_reset_n)

begin

if(~I_reset_n)

begin

R_allign_down 《= 0;

end

else if(&R_cnt_tx)

begin

R_allign_down 《= 0;

end

else if(W_allign_word==8’hff)

begin

R_allign_down 《= 1;

end

end

always @(posedge W_fc_clk or negedge I_reset_n)

begin

if(~I_reset_n)

begin

R_delay_cnt 《= 0;

end

else if(&R_cnt_tx)

begin

R_delay_cnt 《= 5‘b1;

end

else if(~R_allign_down)

begin

R_delay_cnt 《= R_delay_cnt + 1’b1;

end

end

always @(posedge W_fc_clk or negedge I_reset_n)

begin

if(~I_reset_n)

begin

R_cnt_low 《= 0;

end

else if(W_allign_word==8‘h00)

begin

R_cnt_low 《= R_delay_cnt;

end

end

always @(posedge W_fc_clk or negedge I_reset_n)

begin

if(~I_reset_n)

begin

R_cnt_high 《= 0;

end

else if(W_allign_word==8’hff)

begin

R_cnt_high 《= R_delay_cnt;

end

end

always @(posedge W_fc_clk or negedge I_reset_n)

begin

if(~I_reset_n)

begin

R_cnt_sum 《= 0;

end

else if(R_allign_down)

begin

R_cnt_sum 《= {{R_cnt_low[4],R_cnt_low} + {R_cnt_high[4],R_cnt_high}};

end

end

assign W_half_cnt = R_cnt_sum[5:1];

assign W_delay_cnt = R_allign_down? W_half_cnt: R_delay_cnt;

2,对帧同步信号和数据的处理

用上面产生的数据采样时钟同时去采样FCLK和DATA,使用Iserdes可以1:8进行串并转换。但是我们不知道字节的边界在哪里,所以要使用一个bit_slip对串转并的结果进行移位,移位的同时检测FCLK转换的输出,当输出是8’b11110000的时候就停止移位。

LVDS高速ADC接口_Xilinx FPGA实现

利用FC找到字节边界的代码如下

//-------------------------------------FC handle bit_slip-------------------------------------

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_inst9 (

.O(W_fc_refclk), // Buffer output

.I(I_AD_FPGA_FC_p), // Diff_p buffer input (connect directly to top-level port)

.IB(I_AD_FPGA_FC_n) // Diff_n buffer input (connect directly to top-level port)

);

ISERDESE2 #(

.DATA_RATE(“DDR”), // DDR, SDR

.DATA_WIDTH(8), // Parallel data width (2-8,10,14)

.DYN_CLKDIV_INV_EN(“FALSE”), // Enable DYNCLKDIVINVSEL inversion (FALSE, TRUE)

.DYN_CLK_INV_EN(“FALSE”), // Enable DYNCLKINVSEL inversion (FALSE, TRUE)

.INIT_Q1(1‘b0),

.INIT_Q2(1’b0),

.INIT_Q3(1‘b0),

.INIT_Q4(1’b0),

.INTERFACE_TYPE(“NETWORKING”),// MEMORY, MEMORY_DDR3, MEMORY_QDR, NETWORKING, OVERSAMPLE

.IOBDELAY(“NONE”), // NONE, BOTH, IBUF, IFD

.NUM_CE(2), // Number of clock enables (1,2)

.OFB_USED(“FALSE”), // Select OFB path (FALSE, TRUE)

.SERDES_MODE(“MASTER”), // MASTER, SLAVE

.SRVAL_Q1(1‘b0),

.SRVAL_Q2(1’b0),

.SRVAL_Q3(1‘b0),

.SRVAL_Q4(1’b0)

ISERDESE2_inst9 (

.O(), // 1-bit output: Combinatorial output

.Q1(W_fc_patten[0]), // Q1 - Q8: 1-bit (each) output: Registered data outputs

.Q2(W_fc_patten[1]),

.Q3(W_fc_patten[2]),

.Q4(W_fc_patten[3]),

.Q5(W_fc_patten[4]),

.Q6(W_fc_patten[5]),

.Q7(W_fc_patten[6]),

.Q8(W_fc_patten[7]),

.SHIFTOUT1(),

.SHIFTOUT2(),

.BITSLIP(R_bit_slip),

.CE1(1‘b1),

.CE2(1’b1),

.CLKDIVP(1‘b0), // 1-bit input: TBD

.CLK(W_dc_clk), // 1-bit input: High-speed clock

.CLKB(~W_dc_clk), // 1-bit input: High-speed secondary clock

.CLKDIV(W_fc_clk), // 1-bit input: Divided clock

.OCLK(1’b0), // 1-bit input: High speed output clock used when INTERFACE_TYPE=“MEMORY”

.DYNCLKDIVSEL(1‘b0), // 1-bit input: Dynamic CLKDIV inversion

.DYNCLKSEL(1’b0), // 1-bit input: Dynamic CLK/CLKB inversion

.D(W_fc_refclk), // 1-bit input: Data input

.DDLY(1‘b0), // 1-bit input: Serial data from IDELAYE2

.OFB(1’b0), // 1-bit input: Data feedback from OSERDESE2

.OCLKB(1‘b0), // 1-bit input: High speed negative edge output clock

.RST(~I_reset_n), // 1-bit input: Active high asynchronous reset

.SHIFTIN1(1’b0),

.SHIFTIN2(1‘b0)

);

always @(posedge W_fc_clk or negedge I_reset_n)

begin

if(~I_reset_n)

begin

R_bit_slip 《= 0;

R_wait 《= 0;

end

else

begin

if (R_wait==2’d3 && W_fc_patten!=8‘b11110000)

begin

R_bit_slip 《= 1;

R_wait 《= 2’d1;

end

else

begin

R_bit_slip 《= 0;

R_wait 《= R_wait + 1‘d1;

end

end

end

数据采样代码和上面的差不多

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_inst1 (

.O(W_data_in1[0]), // Buffer output

.I(I_ad_lvds_d0_p[0]), // Diff_p buffer input (connect directly to top-level port)

.IB(I_ad_lvds_d0_n[0]) // Diff_n buffer input (connect directly to top-level port)

);

ISERDESE2 #(

.DATA_RATE(“DDR”), // DDR, SDR

.DATA_WIDTH(8), // Parallel data width (2-8,10,14)

.DYN_CLKDIV_INV_EN(“FALSE”), // Enable DYNCLKDIVINVSEL inversion (FALSE, TRUE)

.DYN_CLK_INV_EN(“FALSE”), // Enable DYNCLKINVSEL inversion (FALSE, TRUE)

.INIT_Q1(1’b0),

.INIT_Q2(1‘b0),

.INIT_Q3(1’b0),

.INIT_Q4(1‘b0),

.INTERFACE_TYPE(“NETWORKING”),// MEMORY, MEMORY_DDR3, MEMORY_QDR, NETWORKING, OVERSAMPLE

.IOBDELAY(“NONE”), // NONE, BOTH, IBUF, IFD

.NUM_CE(2), // Number of clock enables (1,2)

.OFB_USED(“FALSE”), // Select OFB path (FALSE, TRUE)

.SERDES_MODE(“MASTER”), // MASTER, SLAVE

.SRVAL_Q1(1’b0),

.SRVAL_Q2(1‘b0),

.SRVAL_Q3(1’b0),

.SRVAL_Q4(1‘b0)

ISERDESE2_inst1 (

.O(), // 1-bit output: Combinatorial output

.Q1(W_ad_data1[0]), // Q1 - Q8: 1-bit (each) output: Registered data outputs

.Q2(W_ad_data1[1]),

.Q3(W_ad_data1[2]),

.Q4(W_ad_data1[3]),

.Q5(W_ad_data1[4]),

.Q6(W_ad_data1[5]),

.Q7(W_ad_data1[6]),

.Q8(W_ad_data1[7]),

.SHIFTOUT1(),

.SHIFTOUT2(),

.BITSLIP(R_bit_slip),

.CE1(1’b1),

.CE2(1‘b1),

.CLKDIVP(1’b0), // 1-bit input: TBD

.CLK(W_dc_clk), // 1-bit input: High-speed clock

.CLKB(~W_dc_clk), // 1-bit input: High-speed secondary clock

.CLKDIV(W_fc_clk), // 1-bit input: Divided clock

.OCLK(1‘b0), // 1-bit input: High speed output clock used when INTERFACE_TYPE=“MEMORY”

.DYNCLKDIVSEL(1’b0), // 1-bit input: Dynamic CLKDIV inversion

.DYNCLKSEL(1‘b0), // 1-bit input: Dynamic CLK/CLKB inversion

.D(W_data_in1[0]), // 1-bit input: Data input

.DDLY(1’b0), // 1-bit input: Serial data from IDELAYE2

.OFB(1‘b0), // 1-bit input: Data feedback from OSERDESE2

.OCLKB(1’b0), // 1-bit input: High speed negative edge output clock

.RST(~I_reset_n), // 1-bit input: Active high asynchronous reset

.SHIFTIN1(1‘b0),

.SHIFTIN2(1’b0)

);

当数据率不是很高的IDDR数据,使用DDR替代Iserdes接收。IDDR和Iserdes使用的资源相同(待验证)

附:用到的FPGA资源详解

LVDS高速ADC接口_Xilinx FPGA实现

HR Bank真实的器件如下,一对IOB,可单独使用,可差分使用。后面的资源从上到下依次是ISERDES(ILOGIC),IDELAY,OLOGIC(OSERDES),ILOGIC,IDELAY,OLOGIC。(ILOGIC可作为IDDR,OLOGIC可作为ODDR)。左上角的是一个clock region(如X0Y2)的中间分布的四个BUFIO和BUGR(局部时钟驱动,局部时钟分频,二者延时相等)。后面是一个IDELAYCTRL。

LVDS高速ADC接口_Xilinx FPGA实现

下面分别详细介绍:

IDEALY,

经过IDELAY必须要经过ISERDES,可直通。

ISERDES,

ISERDES和ILOGIC使用相同的资源,可互换

ILOGIC,

LVDS高速ADC接口_Xilinx FPGA实现

OLOGIC,

LVDS高速ADC接口_Xilinx FPGA实现

OSERDES,和OLOGIC使用相同的资源,可互换

功能描述

• Edge triggered D type flip-flop(FF)

• DDR mode (SAME_EDGE or OPPOSITE_EDGE)

• Level sensitive latch(Latch)

• Asynchronous/combinatorial(直通)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1600

    文章

    21279

    浏览量

    592845
  • lvds
    +关注

    关注

    2

    文章

    847

    浏览量

    64559
  • ADC接口
    +关注

    关注

    0

    文章

    5

    浏览量

    3059
收藏 人收藏

    评论

    相关推荐

    基于FPGA高速LVDS数据传输

    高速LVDS数据传输方案和协议基于FPGA高速LVDS数据传输本人在北京工作6年,从事FPGA
    发表于 03-01 18:47

    如何寻找使用XILINX FPGA高速ADC评估套件?

    嗨,我正在寻找使用XILINX FPGA高速ADC(分辨率8到14位,速度从50MSPS到200MSPS)评估套件。这将是伟大的如果我可以使用ISE webpack软件运行板。如果有
    发表于 08-30 09:10

    双通道14位、500 MSPS采样率的AD9684 高速并行LVDS ADC接口介绍

    工程,已经使用Xilinx kintex-7实现这个ADC接口数据接收驱动与后续信号处理。 由于AD9684需要外部触发时钟输入,需要板卡上的外部基准时钟输入,通过
    发表于 12-06 15:33

    如何将高速ADC与串行LVDS输出连接到virtex 7 fpga

    亲爱的大家,我希望将高速ADC与串行LVDS输出连接到virtex 7 fpga。我使用的ADC评估板是AD9635_125EBZ。我想知道
    发表于 07-26 18:27

    利用FPGA 实现与TS201 的LinkPort 高速数据

    随着技术的发展, 往往需要在不同的系统之间实现高速通信, 现介绍了一种基于LVDS高速数据传输的接口LinkPort , 给出了在
    发表于 09-22 08:26 98次下载

    基于FPGALVDS接口应用

    介绍了LVDS技术的原理,对LVDS接口高速数据传输系统中的应用做了简要的分析,着重介绍了基于FPGA
    发表于 01-11 10:46 99次下载
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>LVDS</b><b class='flag-5'>接口</b>应用

    XilinxFPGALVDS差分高速传输的实现

    XilinxFPGALVDS差分高速传输的实现
    发表于 03-01 13:12 64次下载

    基于FPGALVDS过采样技术研究并用Xilinx评估板进行验证

    针对LVDS接口,研究并实现了一种基于FPGALVDS过采样技术,重点对LVDS过采样技术中系
    发表于 11-18 05:13 6962次阅读
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>LVDS</b>过采样技术研究并用<b class='flag-5'>Xilinx</b>评估板进行验证

    Xilinx FPGA的SerDes接口详细说明

    因为摄像头输出的LVDS信号速率会达到600Mbps,我们将不能够通过FPGA的I/O接口直接去读取这么高速率的信号。因此,需要使用Xilinx
    发表于 12-30 17:24 39次下载
    <b class='flag-5'>Xilinx</b> <b class='flag-5'>FPGA</b>的SerDes<b class='flag-5'>接口</b>详细说明

    如何使用XilinxFPGA高速PCB信号实现优化设计

    本文档的主要内容详细介绍的是如何使用XilinxFPGA高速PCB信号实现优化设计。
    发表于 01-13 17:00 25次下载
    如何使用<b class='flag-5'>Xilinx</b>的<b class='flag-5'>FPGA</b>对<b class='flag-5'>高速</b>PCB信号<b class='flag-5'>实现</b>优化设计

    具有LVDS输出的LTM9011 ADC的AN147-Altera Stratix IV FPGA接口

    具有LVDS输出的LTM9011 ADC的AN147-Altera Stratix IV FPGA接口
    发表于 05-09 21:19 14次下载
    具有<b class='flag-5'>LVDS</b>输出的LTM9011 <b class='flag-5'>ADC</b>的AN147-Altera Stratix IV <b class='flag-5'>FPGA</b><b class='flag-5'>接口</b>

    wp02-将凌力尔特公司的DDR LVDS ADC与Altera Stratix IV FPGA接口

    wp02-将凌力尔特公司的DDR LVDS ADC与Altera Stratix IV FPGA接口
    发表于 05-23 11:13 1次下载
    wp02-将凌力尔特公司的DDR <b class='flag-5'>LVDS</b> <b class='flag-5'>ADC</b>与Altera Stratix IV <b class='flag-5'>FPGA</b><b class='flag-5'>接口</b>

    设计参考书籍-Xilinx FPGA伴你玩转USB3.0与LVDS(3)

    设计参考书籍-Xilinx FPGA伴你玩转USB3.0与LVDS(3)
    发表于 11-18 15:51 0次下载

    设计参考书籍-Xilinx FPGA伴你玩转USB3.0与LVDS(9)

    设计参考书籍-Xilinx FPGA伴你玩转USB3.0与LVDS(9)
    发表于 11-18 16:18 0次下载

    LVDS高速ADC接口xilinx FPGA实现

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