差分I/O端口组件  
1)           IBUFDS   
IBUFDS原语用于将差分输入信号转化成标准单端信号,且可加入可选延迟。在IBUFDS原语中,输入信号为I、IB,一个为主,一个为从,二者相位相反。  
 
IBUFDS的逻辑真值表所列,其中“-*”表示输出维持上一次的输出值,保持不变。  
IBUFDS原语的例化代码模板如下所示:  
 
// IBUFDS: 差分输入缓冲器(Differential Input Buffer)  
// 适用芯片:Virtex-II/II-Pro/4, Spartan-3/3E  
// Xilinx HDL库向导版本,ISE 9.1  
IBUFDS #(  
.DIFF_TERM("FALSE"),  
// 差分终端,只有Virtex-4系列芯片才有,可设置为True/Flase  
.IOSTANDARD("DEFAULT")  
// 指定输入端口的电平标准,如果不确定,可设为DEFAULT  
) IBUFDS_inst (  
.O(O), // 时钟缓冲输出  
.I(I), // 差分时钟的正端输入,需要和顶层模块的端口直接连接  
.IB(IB) // 差分时钟的负端输入,需要和顶层模块的端口直接连接  
);  
// 结束IBUFDS模块的例化过程  
 http://www.xilinx.com/itp/xilinx6/books/data/docs/lib/lib0229_197.html  
Verilog Instantiation Template  
IBUFDS instance_name (.O (user_O),  
                                  .I (user_I),  
                                  .IB (user_IB));  
 2)        OBUFDS  
OBUFDS将标准单端信号转换成差分信号,输出端口需要直接对应到顶层模块的输出信号,和IBUFDS为一对互逆操作。OBUFDS原语的真值表如表所列。 OBUFDS原语的例化代码模板如下所示:  
 
// OBUFDS: 差分输出缓冲器(Differential Output Buffer)  
// 适用芯片:Virtex-II/II-Pro/4, Spartan-3/3E  
// Xilinx HDL库向导版本,ISE 9.1  
OBUFDS #(  
.IOSTANDARD("DEFAULT")  
// 指名输出端口的电平标准  
) OBUFDS_inst (  
.O(O), // 差分正端输出,直接连接到顶层模块端口  
.OB(OB), // 差分负端输出,直接连接到顶层模块端口  
.I(I) // 缓冲器输入  
);  
// 结束OBUFDS模块的例化过程  
http://www.xilinx.com/itp/xilinx5/data/docs/lib/lib0317_301.html  
Verilog Instantiation Template  
OBUFDS instance_name (.O (user_O),  
                                  .OB (user_OB),  
                                  .I (user_I));  
3) IOBUFDS  
 
Verilog Instantiation Template  
// IOBUFDS: Differential Bi-directional Buffer  
// Virtex-II/II-Pro/4/5, Spartan-3/3E/3A  
// Xilinx HDL Libraries Guide, version 9.1i  
IOBUFDS #(  
.IBUF_DELAY_VALUE("0"),  
// Specify the amount of added input delay for the buffer, "0"-"16" (Spartan-  
3E only)  
.IFD_DELAY_VALUE("AUTO"),  
// Specify the amount of added delay for input register, "AUTO", "0"-"8"  
(Spartan-3E only)  
.IOSTANDARD("DEFAULT")// 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  
 
 
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  
 |