当前位置:   article > 正文

Xilinx 差分信号 LVDS传输实战_xilinx lvds

xilinx lvds

目录

1.LVDS的概念    

2.XILINX FPGA 差分信号解决方案

(1)IBUFDS

(2)OBUFDS

(3)IOBUFDS(三态差分输入输出)

3.LVDS中的终端电阻

4.LVDS 电气特性

(1)LVDS25

(2)LVDS25

5.LVDS 自环测试


 

1.LVDS的概念    

    LVDS Low Voltage Differential Signalin )是一种低振幅差分信号技术。它使用幅度非常低的信号(约 350mV ) 通过一对差分 PCB 走线或平衡电缆传输数据。大部分高速数据传输中,都会用到 LVDS 传输。
    目前 FPGA    LVDS 实际上有大量的应用,特别是在高速 ADC, 高分辨率摄像头,液晶屏显示技术等应用领域。所以掌握 LVDS 通信也是我们 FPGA 开发者的必备基本技能。本文首先简要介绍一些 XILINX FPGA LVDS 解决方案。

2.XILINX FPGA 差分信号解决方案

(1)IBUFDS

(2)OBUFDS

(3)IOBUFDS(三态差分输入输出)

3.LVDS中的终端电阻

注:如果要使用内部的终端电阻,对于 HP 的 LVDS 信号 BANK 电压必须是 1.8V,而对于 HR 的 LVDS25 BANK 信号必须是 2.5V,否则可以使用外部终端电阻。

4.LVDS 电气特性

(1)LVDS25


VCCO 2.5V
VOH 是高电平最大 1.675V
VOL 低电平最小 0.7V
VODIFF 差模电压最大 600mv , 最小 247mv, 典型值 350mv
VOCM 输出共模电压,最小 1V 最大 1.425V ,典型值 1.25V
VIDIFF 输入差模电压,最大 600mv, 最小 100mv, 典型 350mv
VICM 输入共模电压,最大 1.5V ,最小 0.3V ,典型 1.2V

(2)LVDS25


VCCO 1.8V
VOH 是高电平最大 1.675V
VOL 低电平最小 0.825V
VODIFF 差模电压最大 600mv , 最小 247mv, 典型值 350mv
VOCM 输出共模电压,最小 1V 最大 1.425V ,典型值 1.25V
VIDIFF 输入差模电压,最大 600mv, 最小 100mv, 典型 350mv
VICM 输入共模电压,最大 1.5V ,最小 0.3V ,典型 1.2V
LVDS 器件电气特性是否兼容主要看, VODIF VOCM VIDIFF VICM ,可以看到, LVDS25 LVDS 的差分电 气特性是兼容的。

5.LVDS 自环测试

  1. module lvds_loop(
  2. // sysclk input 系统时钟
  3. input clk_i_p ,
  4. input clk_i_n ,
  5. // TTL输入输出
  6. input rx_i ,
  7. output tx_o ,
  8. //lvds loop input 输入的LVDS时钟
  9. input dclki_p ,
  10. input dclki_n ,
  11. input din_p ,
  12. input din_n ,
  13. //lvds loop output 输出的LVDS时钟
  14. output dclko_p ,
  15. output dclko_n ,
  16. output dout_p ,
  17. output dout_n
  18. );
  19. wire clk50m,dclki,din;
  20. reg rx_lvds = 1'b0;
  21. wire clk_i;
  22. // 得到单端系统时钟,对差分时钟采用 IBUFGDS IP 核去转换
  23. IBUFGDS CLK_U(
  24. .I ( clk_i_p ),
  25. .IB ( clk_i_n ),
  26. .O ( clk_i )
  27. );
  28. //clk_wiz_0 uclk(.clk_out1(clk50m),.clk_out2(clk5m), .clk_in1_p(clk_i_p),.clk_in1_n(clk_i_n));
  29. clk_wiz_0 uclk(.clk_out1(clk50m),.clk_in1(clk_i));
  30. // lvds out, 把 rx 接收到的数据,通过LVDS发送出去
  31. // 输出50M的差分时钟
  32. OBUFDS #(
  33. .IOSTANDARD ( "DEFAULT" ), // Specify the output I/O standard
  34. .SLEW ( "SLOW" )
  35. )
  36. dclko_OBUFDS
  37. (
  38. .O ( dclko_p ),
  39. .OB ( dclko_n ),
  40. .I ( clk50m )
  41. );
  42. // 输出接收到的数据
  43. OBUFDS #(
  44. .IOSTANDARD ( "DEFAULT" ), // Specify the output I/O standard
  45. .SLEW ( "SLOW" )
  46. )
  47. dout_OBUFDS
  48. (
  49. .O ( dout_p ),
  50. .OB ( dout_n ),
  51. .I ( rx_i )
  52. );
  53. //lvds in
  54. // 还原单端时钟
  55. IBUFDS
  56. #(
  57. .DIFF_TERM ( "TRUE" ), // Differential Termination
  58. .IBUF_LOW_PWR ( "TRUE" ), // Low power="TRUE", Highest performance="FALSE"
  59. .IOSTANDARD ( "DEFAULT" ) // Specify the input I/O standard
  60. )
  61. dclki_IBUFDS
  62. (
  63. .O ( dclki ), // 1-bit output: Buffer output
  64. .I ( dclki_p ), // 1-bit input: Diff_p buffer input (connect directly to top-level port)
  65. .IB ( dclki_n ) // 1-bit input: Diff_n buffer input (connect directly to top-level port)
  66. );
  67. // 还原单端数据
  68. IBUFDS
  69. #(
  70. .DIFF_TERM ( "TRUE" ), // Differential Termination
  71. .IBUF_LOW_PWR ( "TRUE" ), // Low power="TRUE", Highest performance="FALSE"
  72. .IOSTANDARD ( "DEFAULT" ) // Specify the input I/O standard
  73. )
  74. ddatai_IBUFDS
  75. (
  76. .O ( din ), // 1-bit output: Buffer output
  77. .I ( din_p ), // 1-bit input: Diff_p buffer input (connect directly to top-level port)
  78. .IB ( din_n ) // 1-bit input: Diff_n buffer input (connect directly to top-level port)
  79. );
  80. always @(posedge dclki)begin
  81. rx_lvds <= din;
  82. end
  83. assign tx_o = rx_lvds;
  84. endmodule

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号