资源描述
(Xilinx) FPGA中LVDS差分高速传输的实现低压差分传送技术是基于低压差分信号 (Low Volt-age Differential signaling)的传送技术,从一个电路板系统内的高速信号传送到不同电路系统之间的快速 数据传送都可以应用低压差分传送技术来实现,其应用正变得越来越重要。低压差分信号相对于单端的传送具有较高的噪声抑制功能,其较低的电压摆幅允许差分对线具有较高的数据传输速率,消耗较小的功率以及产生更低的电磁辐射。LVDS : Low Voltage Differential Signaling,低电压差分信号。LVDS传输支持速率一般在155Mbps (大约为77MHZ)以上。LVDS是一种低摆幅的差分信号技术,它使得信号能在差分PCB线对或平 衡电缆上以几百Mbps的速率传输,其低压幅和低电流驱动输出实现了低噪声和 低功耗。差分信号抗噪特性从差分信号传输线路上可以看出,若是理想状况,线路没有干扰时, 在发送侧,可以形象理解为:IN= IN+ IN-在接收侧,可以理解为:IN+ IN- =OUT所以:OUT = IN在实际线路传输中,线路存在干扰,并且同时出现在差分线对上, 在发送侧,仍然是:IN = IN+ IN-线路传输干扰同时存在于差分对上,假设干扰为q,则接收则:(IN+ + q) (IN- + q) = IN+ IN- = OUT 所以:OUT = IN噪声被抑止掉。上述可以形象理解差分方式抑止噪声的能力1-1各种技术的工蠻标淮工业标准输出撐1 (V00)功純LVDSTIA/EIA-6443.125 Gbps 350 mV低LVPECLNWk10+ Gbps 800 mV中搴高OWLNW10+ Gbps aoa mv中等MLVDSTIA/EIA-89925D Mbps 550 mV低B-LVDSN/ASOD Mbps SSO mV低From:美国国家半导体的LVDS用户手册P9FPGA中的差分管脚为了适用于高速通讯的场合,现在的FPGA都提供了数目众多的LVDS接 口。女口 Spartan-3E系列FPGA提供了下列差分标准:? LVDS? Bus LVDS? mini-LVDS? RSDS? Differential HSTL (1.8V, Types I and III)? Differential SSTL (2.5V and 1.8V, Type I)? 2.5V LVPECL in puts所拥有的差分I/O管脚数目如下Table 2: Availabk User and DiHerenlial (Dili) I/O PairsDeVl&eVQ100 VOGIOOCP132 CPG132TQ144 TQG144PQ20S PQG208FT256 FTG25FG32Q FGG320FG4C0 FGG400FG484 FGCM84DlfTUserIffUe*rDlflUderDITIuerDinurrIJtercmU占电XC3STDDE(730S3 (it)35倒104D wXG3S25flE骷92 仍41 倒10B40W158 (32)S5 172甜卍,XC3S500E6(7)30肿(7)41 倒-156S5(S)190 的77匕232(SS)92 昭-XC3S1200E19077250(56)&9(f2)304(72124-XC3S1 mE250的 f罔304124比;(21)From:Spartan-3E FPGA Family:Complete Data Sheet p5I/O管脚的命名方式:Bank 0W XILINXSpartan-3EFPGA/ Pair NumberBank 2Bank NumberDsai2-*jo_itiiwFigure 30: Dlfferentral Pair Labeling毛I” Positive PdarUy,True DnverIO_L34nIO L3咂亠j “ z亠fNegative Ptarrty,Inverted DriverFrom:Spartan-3E FPGA Family:Complete Data Sheet p164ZC = 50QSpartan-3EDifferentia InputSpartan-3E Differential Input with On-Chip Differential Terminator uFigure 11: Differential Inputs and OutputsFrom:Spartan-3E FPGA Family:Complete Data Sheet p18Spartan-3E系列FPGA器件差分I/O接口输入工作的特性参数:InternalLogicDifferential VO Pair PinsVINNV(NPGND IQvelC Pl 0-1f VIDJKOkJv1CMVfCM = Input common mode voltage =片口 = Differential input voltage = | V|NP - V|NNDSO?3_U1_O123IMFiqure 70: Differential Input VoltagesS1: Reenmmencied Operating Conditions for User l/O$ Using OlfleFEnlial Signal StandardsIOSTANDARD Attiribule畑沖 Ter Drivtr&i%VtCMMin (V)Max (V)Mln(mV)Nom(mV)Max frlVMln (V)Norm (V)Max (V).LVDS_252.3752.5G2.6251003508000.301 252MBLWDSJ52.3752.502S6251003506000.30L252.2flMINI_LVDS_252.3752.502.62&2006000.302.2LVPECL_25inpulOnly100001000051,2RSD& 2523752.502.6251002000.31.20uDIFF_HSTLJ_18L71.81.91000.8-1.1DIFF_HS1L_IH_181.7i.a1,910G-0,8-1,1DIFF_SSTLlfll1.7i.a1.9100-0.7-tlDIFF SSTL2 I2.32.52.7100-1.0-1.6From:Spartan-3E FPGA Family:Complete Data Sheet p126Spartan-3E系列FPGA器件差分I/O接口输出工作的特性参数InternalLogicDifferential I/O Pair PinsvVOUTNOUTPGND levelCM/. X/vJVODVOCMVOL般 ocm=Output common mode voltage =VOUTP + VOUTN2oo=Output differential vottag = |voutp - outn叫加=output voltage indicating a High Logic levelVol = Output voltage Indicating a Low logic levet osats.a m 甜亦Figure 71: Differential Output Voltageslabfe- 82: DC Characteristics of Usr PQs Using Differential Signal SUnrlardsIOSTANDARD AtlrlbLile恤vocwV0HVOLMln(mV)Typ (mV)Maix(mV)Him (mV)Max (mV)Mln (Vtyp (vMax (V)Mln (mV)Max (mVMln (V)Max (V|LVD5.252503504501,1261,375-BLVDS_252SD3504&0一一1.2CI一一一一MINI IVOS 25300&00二501.0-1.450-RSDS_251D0400一1.114一一一DIFF HSTL 1 19亠-一一N二Y匚80-40.4DIFF_HSTL_IIL10一一一-一一畑“40.4DIFF SSTL18 F0.475Vtt-0.47 &DIFF_SSTL2_IVyr + 0.61Vtt-0.61From:Spartan-3E FPGA Family:Complete Data Sheet p127Xilinx公司差分原语的使用(原语,其英文名字为Primitive,是Xilinx针对其器件特征开发的一系列常 用模块的名字,用户可以将其看成 Xilinx公司为用户提供的库函数,类似于 C+ +中的“cou等关键字,是芯片中的基本元件,代表FPGA中实际拥有的硬件逻辑单元,如LUT, D触发器,RAM等,相当于软件中的机器语言。在实现过程 中的翻译步骤时,要将所有的设计单元都转译为目标器件中的基本元件,否则就是不可实现的。原语在设计中可以直接例化使用,是最直接的代码输入方式,其和HDL语言的关系,类似于汇编语言和 C语言的关系。)关于刈inx原语的详细介绍,可以参考下面文章1) FPGA开发实用教程 第4节Xilinx公司原语的使用方法2) ISE 的 Help sofeware Manuals差分I/O端口组件1) IBUFDSIBUFDS原语用于将差分输入信号转化成标准单端信号,且可加入可选延 迟。在IBUFDS原语中,输入信号为I、IB,一个为主,一个为从,二者相位相 反。IBUFDS的逻辑真值表所列,其中-*表示输出维持上一次的输出值,保持不变表IBUFDS原语的输入、输出真值表输人输岀1 1IB0毬;0朮010101?11_*IBUFDS原语的例化代码模板如下所示:/ IBUFDS: 差分输入缓冲器(Differe ntial In put Buffer )/ 适用芯片:Virtex-ll/ll-Pro/4, Sparta n-3/3E/ Xili nx HDL库向导版本,ISE 9.1IBUFDS #(.DIFF_TERM(FALSE),/差分终端,只有Virtex-4 系列芯片才有,可设置为 True/Flase 0 STANDARD(DEFAULT)/指定输入端口的电平标准,如果不确定,可设为DEFAULT)IBUFDS_i nst (.0(0), /时钟缓冲输出(I),/差分时钟的正端输入,需要和顶层模块的端口直接连接.IB(IB) /差分时钟的负端输入,需要和顶层模块的端口直接连接 );/结束IBUFDS模块的例化过程 nx6/books/data/docs/lib/lib0229_197.htmlVerilogIn sta ntiati onTemplateIBUFDS instance_name(.0 (user_O ),在综合结果分析时,IBUFDS的RTL结构如图所示图IBUFDS原语的RTL结构图2) OBUFDSOBUFDS将标准单端信号转换成差分信号,输出端口需要直接对应到顶层 模块的输出信号,和IBUFDS为一对互逆操作。OBUFDS原语的真值表如表所 列。表OBUFDS原语的真值表输入输岀I00B001110OBUFD原语的例化代码模板如下所示:/ OBUFDS:差分输出缓冲器(Differential Output Buffer)/ 适用芯片:Virtex-ll/ll-Pro/4, Sparta n-3/3E/ Xili nx HDL库向导版本,ISE 9.1OBUFDS #(O STANDARD(DEFAULT)/指名输出端口的电平标准)OBUFDS_i nst (.O(O), /差分正端输出,直接连接到顶层模块端口 .OB(OB), /差分负端输出,直接连接到顶层模块端口.l(l)/缓冲器输入);/结束OBUFD模块的例化过程 nx5/data/docs/lib/lib0317_301.htmlVerilogIn sta ntiati onTemplateOBUFDS instance_name (.O (user_O ),.OB (user_OB ),(user_l );在综合结果分析时,OBUFDS原语的RTL结构如图所示。图OBUFDS的RTL结构图3) IOBUFDSIOBUFDS原语真值表InputsBidirectio nalOutputsiTIOIOBoX1zz00010101nIThe dash -) means No C hange.Verilog In sta ntiati onTemplate/ IOBUFDS: Differential Bi-directional Buffer/ Virtex-ll/ll-Pro/4/5, Spartan-3/3E/3A/ Xilinx HDL Libraries Guide, version 9.1iIOBUFDS #(BUF_DELAY_VALUE(O),/ Specify the amou nt of added in put delay for the buffer, 0-16 (Spart an-3E only)FD_DELAY_VALUE(AUTO),/ Specify the amou nt of added delay for in put register, AUTO, 0-8 (Spartan-3E only)OSTANDARD(DEFAULT) / Specify the I/O standard)IOBUFDSnst(.0(0), / Buffer output差分时钟组件1) IBUFGDS与全局时钟资源相关的原语常用的与全局时钟资源相关的刈inx器件原语包括:IBUFG、IBUFGDS、BUFG、BUFGP、BUFGCE、BUFGMUX、BUF GDLL和DCM等,如图1所示。IBUFGDS是IBUFG的差分形式,当信号从一对差分全局时钟管脚输入时, 必须使用IBUFGDS作为全局时钟输入缓冲。IBUFG支持BLVDS、LDT、LVD SEXT、LVDS、LVPECL和ULVDS等多种格式的IO标准。 nx6/books/data/docs/lib/lib0231_199.htmlIBUFGDS原语真值表InputsOutputs1IB000*010T0111The dash 卜)means Ng ChangeIBUFGDS的RTL结构图Verilog Instantiation TemplateIBUFGDS instance_name(.0 (user_O ),(user),.IB (user_IB );LVDS差分的在FPGA中的应用在高速传输的过程中,经常会受到干扰而误码,因此有时候时钟输入采用 差分输入的办法来提高抗干扰的能力。下面已一个二分频为例子:二分频Verilog代码如下:timescale 1ns / 1psmodule div2(clk, div2_clk, rst_n);in put clk;in put rst_ n;output div2_clk;reg div2_clk;always(posedge clk or negedge rst_n)beg inif(!rst_n)div2_clk=0;else div2_clkQBUFGDSrstjn-在添加波形测试文件时要注意,Clock In formation选择Multiple Clocks (因为时钟变为两个clk_p、clk_n)下一步,把clk_p和clk_n都选上:可以看到仿真的clk_p和clk_n都变为差分输入的了00NETNETNETNETclk_p clk_n div2_clk rst nd1 snWeOEnd! Time:10 us3J1 ciK_nJJlcik_F)JJlrsLrt打1 dw2_clk还要对div2 diff.sch进行管脚约束。div2 diff.ucf约束文件如下:LOC = C9 | IOSTANDARD = LVDS_25 ;LOC = D9 | IOSTANDARD = LVDS_25 ;LOC = A10 | IOSTANDARD = LVCMOS33LOC = H13 | IOSTANDARD = LVCMOS33 ;要注意:clk_n和clk_p都要设置在差分管脚对上,clk_ n C9 IO_L14Pclk_p D9 IO_L14N并且逻辑电平标准设置为 LVDS_25。Spartan-3E支持下面的差分逻辑电平 标准。? LVDS? Bus LVDS? mini-LVDS? RSDS? Differential HSTL (1.8V, Types I and III)? Differential SSTL (2.5V and 1.8V, Type I)? 2.5V LVPECL in puts综合、翻译、映射和布线布局后,运行布线布局仿真,可以看到时钟clk已经变为差分时钟了。/dv2_dilf_test/dk_rk/dM2Lcfiff_resi/dk_p/bl/GSR看 div2_diff.sch 的 HDL 文件(View HDL Functional Model)。可以看到 其实sch调用了 IBUFGDS原语。titnescal Ins / Ipsmodule div2_diff(clR_n, 匕丄k_p, rgt nf divi elk);input cJ.k njinput clk_p;input rst_n;output dxv2 elk;wire XLXN_1: div3 div2_diff (.elk(XLXW_1),* rst_n(rst_n) faivZ_c; J.k:divZ_c;丄址) jjlBUFGDS XLXI_2 M (clk_p),.IB(clk n) f.O(XLXlO);/f synthesis attribute IOSTANTARP of XLXI_2 is DEFAULT / synthesis attribute IBUF_DELAY_VALUE of XLXI_2 is ,fQf, defpacant XLXI 2 DTFFTERII =_MFendttiodule在差分设计中,经常会因为配置错误而使得综合出错, 最常见的错误分析如 下:ERROR:Place:332 - This design contains an LVDS IO pair. The pair of I Os must be placed in a specific relative structure.The two IOs can not be placed in this specific structure.The reason for this issue:All of the logic associated with this structure is locked and the relativ e placement of the logic violates thestructure. The problem was found between the relative placement of I BUF clk_p at site PAD27 and IBUF clk_n at siteIPAD28. The following components are part of this structure:IBUF clk_pIBUF clk_n这个错误出错是因为差分管脚clk_p和clk_n没有约束到芯片的差分对 管脚上。需要修改.ucf文件。至于芯片哪个管脚是差分对,可以参考相应芯片的Datasheet。XC3S500E-FG320(Sparta n-3Efpga)有 92 个 I/O 差分管脚和 12个输入差分管脚。ERROR:Pack:946 - The I/O component clk_p has an illegal IOSTANDA RD value.Components of type DIFFMI do not support IOSTANDARD LVCMOS3 3. Please correctthe IOSTANDARD property value.这个错误出错是因为差分管脚设置的逻辑电平标准不对,设置成LVCMOS33,应该设置为芯片支持的LVDS逻辑电平标准。参考资料:1) 基于LVDS技术与FPGA的高速通讯应用研究,韩党群,唐征兵,张庆玲2) LVDS原理与应用简介http:/www.e nt.eetchi M3) 美国国家半导体的LVDS用户手册http:/www.e nt.eetchi Xilinx FPGA 如何使用 LVDS nx/200803/1225.html无论使用 HDL flow 还是 schematic flow,只需要例化 IBUFDS,OBUFDS 之类的差分缓冲器,就可以使用 LVDS 了。例化之后,要定位Pin位置,使用PACE,在IOStandard中选择LVDS33或者LVDS25,还能选择有DCI的版本。定端口 时,注意看Datasheet中Pin名字分P/N,这P也要对应buffer中的P,N也要 对应N。而且注意同一个bank只能有一个电压标准。如果用FPGA Editor观察布局布线后的情况,就会发现,FPGAEditor中没有IBUFDS这个Component,这个Buffer是藏在IOB里的,点 击到Pin的图块中,可以看到里面有一个 Buffer,就起到了 IBUFDS这个作用。
展开阅读全文