低壓差分傳送技術是基于低壓差分信號(Low Volt-agc 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
噪聲被抑止掉。 上述可以形象理解差分方式抑止噪聲的能力。
Xilinx公司差分原語的使用
(原語,其英文名字為Primitive,是Xilinx針對其器件特征開發的一系列常用模塊的名字,用戶可以將其看成Xilinx公司為用戶提供的庫函數,類似于C++中的“cout”等關鍵字,是芯片中的基本元件,代表FPGA中實際擁有的硬件邏輯單元,如LUT,D觸發器,RAM等,相當于軟件中的機器語言。在實現過程中的翻譯步驟時,要將所有的設計單元都轉譯為目標器件中的基本元件,否則就是不可實現的。原語在設計中可以直接例化使用,是最直接的代碼輸入方式,其和HDL語言的關系,類似于匯編語言和C語言的關系。)
差分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模塊的例化過程
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模塊的例化過程
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標準。
verilog Instantiation Template
IBUFGDS instanece_name(.O(user_O),
.I (user_I),
.IB (user_IB));
參考資料:
1)基于LVDS技術與FPGA的高速通訊應用研究,韓黨群,唐征兵,張慶玲
2)LVDS原理與應用簡介
3) 美國國家半導體的《LVDS用戶手冊》
Xilinx FPGA 如何使用LVDS
無論使用HDL flow還是schematic flow,只需要例化IBUFDS,OBUFDS之類的差分緩沖器,就可以使用LVDS了。
例化之后,要定位Pin位置,使用PACE,在IO Standard中選擇LVDS33或者LVDS25,還能選擇有DCI的版本。定端口時,注意看Datasheet中Pin名字分P/N,這P也要對應buffer中的P,N也要對應N。而且注意同一個bank只能有一個電壓標準。
如果用FPGA Editor觀察布局布線后的情況,就會發現,FPGA Editor中沒有IBUFDS這個Component,這個Buffer是藏在IOB里的,點擊到Pin的圖塊中,可以看到里面有一個Buffer,就起到了IBUFDS這個作用。
評論