接⼝协议(1)----在xilinx7系列FPGA上配置LVDS
接⼝协议(1)----在xilinx 7 系列FPGA上配置LVDS
1.0 背景
LVDS(Low-Voltage Differential Signaling ,低电压差分信号)是美国国家半导体(National Semiconductor, NS,现TI)于1994年提出的⼀种信号传输模式的电平标准,它采⽤极低的电压摆幅⾼速差动传输数据,可以实现点对点或⼀点对多点的连接,具有低功耗、低误码率、低串扰和低辐射等优点,已经被⼴泛应⽤于串⾏⾼速数据通讯场合当,如⾼速背板、电缆和板到板数据传输与时钟分配,以及单个PCB内的通信链路。
每对LVDS信号是⼀个差分信号对,⼀个信号⽤两个相反的p,n信号线表⽰,通过差值 [公式] 传输数据,这样可以有效减⼩共模噪声的⼲扰,信号线传输如下图:
2.0 xilinx 7系列⾥的lvds
Xilinx 7系列fpga包含ISERDES和OSERDES原语,这些原语使得rdes电路的设计⾮常简单,并且当使⽤逐位deskew时,根据使⽤的系列和速度等级,允许以415 Mb/s到1200 Mb/s的速度进⾏更⾼的操作。较低的操作速度使⽤静态数据对齐。
以下图为例⼦
在XAPP585⾥有这么⼀张图,我觉得很好⽤,received clock是输⼊得时钟,从图上可以看到,他的占空⽐为3:4,⼀个时钟周期每条线传7个bit得数据,对⽐正常得信号传输,⼀个clock 只能传⼀个bit得数据,所以⼜称lvds为⾼速串⾏接⼝。
2.1 传输模式
lvds有两种传输模式,⼀种是SDR(Single Data Rate),⼀种是DDR(Double Data Rate),通过⼀组图⽚就可以看到SDR和DDR的区别:
上图中,FB_CLK是在第⼀章⾥得Received CLK倍频之后得到得时钟,虽然说⼀个时钟传输7个bit数据,但实际上还是需要将⼤时钟经过倍频之后得时钟沿去传输,每个⼩时钟传⼀个或者两个得数据。
上图⼀是SDR模式,每个clk传输1个bit数据。
上图⼆是DDR模式,每个clk传输2个bit数据,上升沿和下降沿触发。
英语四级证书查询2.2 模式选择
SDR和DDR模式选择是有条件的:
1. 当所需的⽐特率⼩于所选时钟⽹络在所需设备和速度等级中所⽀持的最⼤时钟时,应该使⽤SDR技术。进球英语
2. 在这个速度以上可以使⽤DDR技术,在这种情况下可实现的最⼤⽐特率受到锁相环或MMCM的最⼤输出频率的限制。
使⽤SDR技术的优点是所需的⼀般互连逻辑少得多,并且与时钟的占空⽐失真⽆关。
然⽽使⽤DDR技术,在对数据采样的时候就有可能发⽣时钟偏移,采样到错的数据。
3.0 lvds 接收端
3.1 时钟处理
在第⼀章节有提到,lvds的信号线都是差分信号,需要使⽤FPGA的buffer原语将其转换成需要使⽤的单信号线。
IBUFGDS_DIFF_OUT #(
.DIFF_TERM (DIFF_TERM ),
.IBUF_LOW_PWR ("FALSE"))
iob_clk_in (
.I (clkin_p ),
.IB (clkin_n ),
.O (rx_clk_in_p ),
.OB (rx_clk_in_n ));sad是什么意思
经过BUF之后的时钟才是我们可以使⽤的时钟,当然转换之后有⼀步是必须要做的,就是delay⼀下
⽤这个时钟做被频,⽣成三个时钟,rxpllmmcm_x1,rxpllmmcm_xs,rxpllmmcm_d4
MMCME2_ADV #(
.BANDWIDTH ("OPTIMIZED"),
.CLKFBOUT_MULT_F (7*MMCM_MODE),
.CLKFBOUT_PHASE (0.0),
.CLKIN1_PERIOD (CLKIN_PERIOD),
.CLKIN2_PERIOD (CLKIN_PERIOD),
.CLKOUT0_DIVIDE_F (2*MMCM_MODE),
.CLKOUT0_DUTY_CYCLE (0.5),
.CLKOUT0_PHASE (0.0),
人无完人英语.CLKOUT0_USE_FINE_PS ("FALSE"),
.CLKOUT1_PHASE (11.25),
.
ladenCLKOUT1_DIVIDE (4*MMCM_MODE),
.CLKOUT1_DUTY_CYCLE (0.5),
.CLKOUT1_USE_FINE_PS ("FALSE"),
PENSATION ("ZHOLD"),
.DIVCLK_DIVIDE (1),
.REF_JITTER1 (0.100))
rx_mmcm_adv_inst (
.CLKFBOUT (rxpllmmcm_x1),
.CLKFBOUTB (),
.CLKFBSTOPPED (),
.CLKINSTOPPED (),
英语李老师事件.
CLKOUT0 (rxpllmmcm_xs),
.CLKOUT0B (),
.CLKOUT1 (rxpllmmcm_d4),
.PSCLK (1'b0),
.PSEN (1'b0),
.PSINCDEC (1'b0),
.PWRDWN (1'b0),
.LOCKED (mmcm_locked),
.CLKFBIN (pixel_clk),
.CLKIN1 (rx_clkin_p_d),
.CLKIN2 (1'b0),
.
CLKINSEL (1'b1),
.DADDR (7'h00),
.DCLK (1'b0),
.DEN (1'b0),
.DI (16'h0000),
.DWE (1'b0),
.RST (ret));
其中时钟的传输是有限制的,在xilinx xapp585 中提出SDR时钟需要两个时钟缓冲区,DDR时钟需要三个。其他没有列出的⽅案要么是不⽀持,要么是不推荐。
这⾥采⽤DDR模式,上⾯⽣成的3个时钟分别经过时clock buffer,⽣成pixel_clk,rx_clk,rx_clk_d4.
美国之声voaparameter SAMPL_CLOCK ="BUFIO";// Parameter to t sampling clock buffer type, BUFIO, BUF_H, BUF_G parameter INTER_CLOCK ="BUF_R";// Parameter to t intermediate clock b
uffer type, BUFR, BUF_H, BUF_G parameter PIXEL_CLOCK ="BUF_G";// Parameter to t final pixel buffer type, BUF_R, BUF_H, BUF_G
if(PIXEL_CLOCK =="BUF_G") begin // Final clock lection
BUFG bufg_mmcm_x1 (.I(rxpllmmcm_x1),.O(pixel_clk));
assign status[1:0]=2'b00 ;
end
el if(PIXEL_CLOCK =="BUF_R") begin
BUFR #(.BUFR_DIVIDE("1"),.SIM_DEVICE("7SERIES"))bufr_mmcm_x1 (.I(rxpllmmcm_x1),.CE(1'b1),.O(pixel_clk),.CLR(1'b0)); assign status[1:0]=2'b01 ;
end
el begin
BUFH bufh_mmcm_x1 (.I(rxpllmmcm_x1),.O(pixel_clk));
assign status[1:0]=2'b10 ;
end
捡便宜if(INTER_CLOCK =="BUF_G") begin // Intermediate clock lection
BUFG bufg_mmcm_d4 (.I(rxpllmmcm_d4),.O(rxclk_d4));
assign status[3:2]=2'b00 ;
end
el if(INTER_CLOCK =="BUF_R") begin
BUFR #(.BUFR_DIVIDE("2"),.SIM_DEVICE("7SERIES"))bufr_mmcm_d4 (.I(rxpllmmcm_xs),.CE(1'b1),.O(rxclk_d4),.CLR(1'b0)); assign status[3:2]=2'b01 ;
mlgb是什么意思
end
el begin
BUFH bufh_mmcm_d4 (.I(rxpllmmcm_d4),.O(rxclk_d4));
assign status[3:2]=2'b10 ;
end
beelzebubif(SAMPL_CLOCK =="BUF_G") begin // Sample clock lection
BUFG bufg_mmcm_xn (.I(rxpllmmcm_xs),.O(rxclk));
assign status[5:4]=2'b00 ;
end
el if(SAMPL_CLOCK =="BUFIO") begin
BUFIO bufio_mmcm_xn (.I (rxpllmmcm_xs),.O(rxclk));
assign status[5:4]=2'b11 ;
end
el begin
BUFH bufh_mmcm_xn (.I(rxpllmmcm_xs),.O(rxclk));
assign status[5:4]=2'b10 ;
end