发布时间 : 星期三 文章FPGA的LVDS介绍和xilinx原语的使用方法中文说明更新完毕开始阅读
// Specify the amount of added delay for input register, \\(Spartan-3E only)
.IOSTANDARD(\ // Specify the I/O standard ) IOBUFDS_inst ( .O(O), // Buffer output
.IO(IO), // Diff_p inout (connect directly to top-level port) .IOB(IOB), // Diff_n inout (connect directly to top-level port) .I(I), // Buffer input
.T(T) // 3-state enable input );
// End of IOBUFDS_inst instantiation
差分时钟组件 1)IBUFGDS
与全局时钟资源相关的原语常用的与全局时钟资源相关的Xilinx器件原语包括:IBUFG、IBUFGDS、BUFG、BUFGP、BUFGCE、 BUFGMUX、BUFGDLL和DCM等,如图1所示。
IBUFGDS是IBUFG的差分形式,当信号从一对差分全局时钟管脚输入时,必须使用IBUFGDS作为全局时钟输入缓冲。IBUFG支持BLVDS、LDT、LVDSEXT、LVDS、LVPECL和ULVDS等多种格式的IO标准。
http://www.xilinx.com/itp/xilinx6/books/data/docs/lib/lib0231_199.html
IBUFGDS原语真值表
IBUFGDS的RTL结构图
Verilog Instantiation Template
IBUFGDS instance_name (.O (user_O), .I (user_I), .IB (user_IB));
LVDS差分的在FPGA中的应用
在高速传输的过程中,经常会受到干扰而误码,因此有时候时钟输入采用差分输入的办法来提高抗干扰的能力。下面已一个二分频为例子:
二分频Verilog代码如下:
`timescale 1ns / 1ps
module div2(clk, div2_clk, rst_n); input clk; input rst_n;
output div2_clk; reg div2_clk;
always@(posedge clk or negedge rst_n) begin
if(!rst_n)
div2_clk<=0;
else div2_clk<=~div2_clk;
end
endmodule
布线布局的仿真(Post-Route Simulation)波形如下:
现在对时钟clk信号进行差分处理,对div2 module进行例化(Create Schematic Symbol)
新建一个div2_diff.sch。添加div2的module在sch上。通过搜索,把时钟缓冲差分组件IBUFGDS也放在div2_diff.sch上。
设置好clk的差分管脚,(按照Verilog命名规范)正的命名为clk_p,负的命名为clk_n。
在添加波形测试文件时要注意,Clock Information选择Multiple Clocks(因为时钟变为两个clk_p、clk_n)
下一步,把clk_p和clk_n都选上:
可以看到仿真的clk_p和clk_n都变为差分输入的了。