XilinxFPGA中LVDS差分高速传输的实现.docx
- 文档编号:29801818
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:18
- 大小:510.01KB
XilinxFPGA中LVDS差分高速传输的实现.docx
《XilinxFPGA中LVDS差分高速传输的实现.docx》由会员分享,可在线阅读,更多相关《XilinxFPGA中LVDS差分高速传输的实现.docx(18页珍藏版)》请在冰豆网上搜索。
XilinxFPGA中LVDS差分高速传输的实现
(Xilinx)FPGA中LVDS差分高速传输的实现
低压差分传送技术是基于低压差分信号(LowVolt-agcDifferentialsignaling)的传送技术,从一个电路板系统内的高速信号传送到不同电路系统之间的快速数据传送都可以应用低压差分传送技术来实现,其应用正变得越来越重要。
低压差分信号相对于单端的传送具有较高的噪声抑制功能,其较低的电压摆幅允许差分对线具有较高的数据传输速率,消耗较小的功率以及产生更低的电磁辐射。
LVDS:
LowVoltageDifferentialSignaling,低电压差分信号。
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
噪声被抑止掉。
上述可以形象理解差分方式抑止噪声的能力。
From:
美国国家半导体的《LVDS用户手册》P9
FPGA中的差分管脚
为了适用于高速通讯的场合,现在的FPGA都提供了数目众多的LVDS接口。
如Spartan-3E系列FPGA提供了下列差分标准:
?
LVDS
?
BusLVDS
?
mini-LVDS
?
RSDS
?
DifferentialHSTL(1.8V,TypesIandIII)
?
DifferentialSSTL(2.5Vand1.8V,TypeI)
?
2.5VLVPECLinputs
所拥有的差分I/O管脚数目如下
From:
Spartan-3EFPGAFamily:
CompleteDataSheetp5
I/O管脚的命名方式:
From:
Spartan-3EFPGAFamily:
CompleteDataSheetp164
From:
Spartan-3EFPGAFamily:
CompleteDataSheetp18
Spartan-3E系列FPGA器件差分I/O接口输入工作的特性参数:
From:
Spartan-3EFPGAFamily:
CompleteDataSheetp126
Spartan-3E系列FPGA器件差分I/O接口输出工作的特性参数:
From:
Spartan-3EFPGAFamily:
CompleteDataSheetp127
Xilinx公司差分原语的使用
(原语,其英文名字为Primitive,是Xilinx针对其器件特征开发的一系列常用模块的名字,用户可以将其看成Xilinx公司为用户提供的库函数,类似于C++中的“cout”等关键字,是芯片中的基本元件,代表FPGA中实际拥有的硬件逻辑单元,如LUT,D触发器,RAM等,相当于软件中的机器语言。
在实现过程中的翻译步骤时,要将所有的设计单元都转译为目标器件中的基本元件,否则就是不可实现的。
原语在设计中可以直接例化使用,是最直接的代码输入方式,其和HDL语言的关系,类似于汇编语言和C语言的关系。
)
关于Xilinx原语的详细介绍,可以参考下面文章
1)FPGA开发实用教程第4节Xilinx公司原语的使用方法
2)ISE的Help—sofewareManuals
差分I/O端口组件
1) IBUFDS
IBUFDS原语用于将差分输入信号转化成标准单端信号,且可加入可选延迟。
在IBUFDS原语中,输入信号为I、IB,一个为主,一个为从,二者相位相反。
IBUFDS的逻辑真值表所列,其中“-*”表示输出维持上一次的输出值,保持不变。
表IBUFDS原语的输入、输出真值表
IBUFDS原语的例化代码模板如下所示:
//IBUFDS:
差分输入缓冲器(DifferentialInputBuffer)
//适用芯片:
Virtex-II/II-Pro/4,Spartan-3/3E
//XilinxHDL库向导版本,ISE9.1
IBUFDS#(
.DIFF_TERM("FALSE"),
//差分终端,只有Virtex-4系列芯片才有,可设置为True/Flase
.IOSTANDARD("DEFAULT")
//指定输入端口的电平标准,如果不确定,可设为DEFAULT
)IBUFDS_inst(
.O(O),//时钟缓冲输出
.I(I),//差分时钟的正端输入,需要和顶层模块的端口直接连接
.IB(IB)//差分时钟的负端输入,需要和顶层模块的端口直接连接
);
//结束IBUFDS模块的例化过程
VerilogInstantiationTemplate
IBUFDSinstance_name(.O(user_O),
.I(user_I),
.IB(user_IB));
在综合结果分析时,IBUFDS的RTL结构如图所示。
图IBUFDS原语的RTL结构图
2) OBUFDS
OBUFDS将标准单端信号转换成差分信号,输出端口需要直接对应到顶层模块的输出信号,和IBUFDS为一对互逆操作。
OBUFDS原语的真值表如表所列。
表OBUFDS原语的真值表
OBUFDS原语的例化代码模板如下所示:
//OBUFDS:
差分输出缓冲器(DifferentialOutputBuffer)
//适用芯片:
Virtex-II/II-Pro/4,Spartan-3/3E
//XilinxHDL库向导版本,ISE9.1
OBUFDS#(
.IOSTANDARD("DEFAULT")
//指名输出端口的电平标准
)OBUFDS_inst(
.O(O),//差分正端输出,直接连接到顶层模块端口
.OB(OB),//差分负端输出,直接连接到顶层模块端口
.I(I)//缓冲器输入
);
//结束OBUFDS模块的例化过程
VerilogInstantiationTemplate
OBUFDSinstance_name(.O(user_O),
.OB(user_OB),
.I(user_I));
在综合结果分析时,OBUFDS原语的RTL结构如图所示。
图OBUFDS的RTL结构图
3)IOBUFDS
IOBUFDS原语真值表
IOBUFDS的RTL结构图
VerilogInstantiationTemplate
//IOBUFDS:
DifferentialBi-directionalBuffer
//Virtex-II/II-Pro/4/5,Spartan-3/3E/3A
//XilinxHDLLibrariesGuide,version9.1i
IOBUFDS#(
.IBUF_DELAY_VALUE("0"),
//Specifytheamountofaddedinputdelayforthebuffer,"0"-"16"(Spartan-
3Eonly)
.IFD_DELAY_VALUE("AUTO"),
//Specifytheamountofaddeddelayforinputregister,"AUTO","0"-"8"
(Spartan-3Eonly)
.IOSTANDARD("DEFAULT")//SpecifytheI/Ostandard
)IOBUFDS_inst(
.O(O),//Bufferoutput
.IO(IO),//Diff_pinout(connectdirectlytotop-levelport)
.IOB(IOB),//Diff_ninout(connectdirectlytotop-levelport)
.I(I),//Bufferinput
.T(T)//3-stateenableinput
);
//EndofIOBUFDS_instinstantiation
差分时钟组件
1)IBUFGDS
与全局时钟资源相关的原语常用的与全局时钟资源相关的Xilinx器件原语包括:
IBUFG、IBUFGDS、BUFG、BUFGP、BUFGCE、BUFGMUX、BUFGDLL和DCM等,如图1所示。
IBUFGDS是IBUFG的差分形式,当信号从一对差分全局时钟管脚输入时,必须使用IBUFGDS作为全局时钟输入缓冲。
IBUFG支持BLVDS、LDT、LVDSEXT、LVDS、LVPECL和ULVDS等多种格式的IO标准。
IBUFGDS原语真值表
IBUFGDS的RTL结构图
VerilogInstantiationTemplate
IBUFGDSinstance_name(.O(user_O),
.I(user_I),
.IB(user_IB));
LVDS差分的在FPGA中的应用
在高速传输的过程中,经常会受到干扰而误码,因此有时候时钟输入采用差分输入的办法来提高抗干扰的能力。
下面已一个二分频为例子:
二分频Verilog代码如下:
`timescale1ns/1ps
modulediv2(clk,div2_clk,rst_n);
inputclk;
inputrst_n;
outputdiv2_clk;
regdiv2_clk;
always@(posedgeclkornegedgerst_n)
begin
if(!
rst_n)
div2_clk<=0;
elsediv2_clk<=~div2_clk;
end
endmodule
布线布局的仿真(Post-RouteSimulation)波形如下:
现在对时钟clk信号进行差分处理,对div2module进行例化(CreateSchematicSymbol)
新建一个div2_diff.sch。
添加div2的module在sch上。
通过搜索,把时钟缓冲差分组件IBUFGDS也放在div2_diff.sch上。
设置好clk的差分管脚,(按照Verilog命名规范)正的命名为clk_p,负的命名为clk_n。
在添加波形测试文件时要注意,ClockInformation选择MultipleClocks(因为时钟变为两个clk_p、clk_n)
下一步,把clk_p和clk_n都选上:
可以看到仿真的clk_p和clk_n都变为差分输入的了。
还要对div2_diff.sch进行管脚约束。
div2_diff.ucf约束文件如下:
NET"clk_p"LOC="C9"|IOSTANDARD=LVDS_25;
NET"clk_n"LOC="D9"|IOSTANDARD=LVDS_25;
NET"div2_clk"LOC="A10"|IOSTANDARD=LVCMOS33;
NET"rst_n"LOC="H13"|IOSTANDARD=LVCMOS33;
要注意:
clk_n和clk_p都要设置在差分管脚对上,
clk_n——C9——IO_L14P
clk_p——D9——IO_L14N
并且逻辑电平标准设置为LVDS_25。
Spartan-3E支持下面的差分逻辑电平标准。
?
LVDS
?
BusLVDS
?
mini-LVDS
?
RSDS
?
DifferentialHSTL(1.8V,TypesIandIII)
?
DifferentialSSTL(2.5Vand1.8V,TypeI)
?
2.5VLVPECLinputs
综合、翻译、映射和布线布局后,运行布线布局仿真,可以看到时钟clk已经变为差分时钟了。
看div2_diff.sch的HDL文件(ViewHDLFunctionalModel)。
可以看到其实sch调用了IBUFGDS原语。
在差分设计中,经常会因为配置错误而使得综合出错,最常见的错误分析如下:
①
ERROR:
Place:
332-ThisdesigncontainsanLVDSIOpair.ThepairofIOsmustbeplacedinaspecificrelativestructure.
ThetwoIOscannotbeplacedinthisspecificstructure.
Thereasonforthisissue:
Allofthelogicassociatedwiththisstructureislockedandtherelativeplacementofthelogicviolatesthe
structure.TheproblemwasfoundbetweentherelativeplacementofIBUFclk_patsitePAD27andIBUFclk_natsite
IPAD28.Thefollowingcomponentsarepartofthisstructure:
IBUFclk_p
IBUFclk_n
这个错误出错是因为差分管脚clk_p和clk_n没有约束到芯片的差分对管脚上。
需要修改.ucf文件。
至于芯片哪个管脚是差分对,可以参考相应芯片的Datasheet。
XC3S500E-FG320(Spartan-3Efpga)有92个I/O差分管脚和12个输入差分管脚。
②
ERROR:
Pack:
946-TheI/Ocomponent"clk_p"hasanillegalIOSTANDARDvalue.
ComponentsoftypeDIFFMIdonotsupportIOSTANDARDLVCMOS33.Pleasecorrect
theIOSTANDARDpropertyvalue.
这个错误出错是因为差分管脚设置的逻辑电平标准不对,设置成LVCMOS33,应该设置为芯片支持的LVDS逻辑电平标准。
参考资料:
1)基于LVDS技术与FPGA的高速通讯应用研究,韩党群,唐征兵,张庆玲
2)LVDS原理与应用简介
3)美国国家半导体的《LVDS用户手册》
XilinxFPGA如何使用LVDS
无论使用HDLflow还是schematicflow,只需要例化IBUFDS,OBUFDS之类的差分缓冲器,就可以使用LVDS了。
例化之后,要定位Pin位置,使用PACE,在IO
Standard中选择LVDS33或者LVDS25,还能选择有DCI的版本。
定端口时,注意看Datasheet中Pin名字分P/N,这P也要对应buffer中的P,N也要对应N。
而且注意同一个bank只能有一个电压标准。
如果用FPGAEditor观察布局布线后的情况,就会发现,FPGA
Editor中没有IBUFDS这个Component,这个Buffer是藏在IOB里的,点击到Pin的图块中,可以看到里面有一个Buffer,就起到了IBUFDS这个作用。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- XilinxFPGA LVDS 高速 传输 实现