低壓差分傳送技術(shù)是基于低壓差分信號(Low Volt-agc Differential signaling)的傳送技術(shù),從一個電路板系統(tǒng)內(nèi)的高速信號傳送到不同電路系統(tǒng)之間的快速數(shù)據(jù)傳送都可以應(yīng)用低壓差分傳送技術(shù)來實現(xiàn),其應(yīng)用正變得越來越重要。低壓差分信號相對于單端的傳送具有較高的噪聲抑制功能,其較低的電壓擺幅允許差分對線具有較高的數(shù)據(jù)傳輸速率,消耗較小的功率以及產(chǎn)生更低的電磁輻射。
LVDS:Low Voltage Differential Signaling,低電壓差分信號。
LVDS傳輸支持速率一般在155Mbps(大約為77MHZ)以上。
LVDS是一種低擺幅的差分信號技術(shù),它使得信號能在差分PCB線對或平衡電纜上以幾百Mbps的速率傳輸,其低壓幅和低電流驅(qū)動輸出實現(xiàn)了低噪聲和低功耗。
差分信號抗噪特性
從差分信號傳輸線路上可以看出,若是理想狀況,線路沒有干擾時,
在發(fā)送側(cè),可以形象理解為:
IN= IN+ — IN-
在接收側(cè),可以理解為:
IN+ — IN- =OUT
所以:
OUT = IN
在實際線路傳輸中,線路存在干擾,并且同時出現(xiàn)在差分線對上,
在發(fā)送側(cè),仍然是:
IN = IN+ — IN-
線路傳輸干擾同時存在于差分對上,假設(shè)干擾為q,則接收則:
(IN+ + q) — (IN- + q) = IN+ — IN- = OUT
所以:
OUT = IN
噪聲被抑止掉。 上述可以形象理解差分方式抑止噪聲的能力。
Xilinx公司差分原語的使用
(原語,其英文名字為Primitive,是Xilinx針對其器件特征開發(fā)的一系列常用模塊的名字,用戶可以將其看成Xilinx公司為用戶提供的庫函數(shù),類似于C++中的“cout”等關(guān)鍵字,是芯片中的基本元件,代表FPGA中實際擁有的硬件邏輯單元,如LUT,D觸發(fā)器,RAM等,相當(dāng)于軟件中的機(jī)器語言。在實現(xiàn)過程中的翻譯步驟時,要將所有的設(shè)計單元都轉(zhuǎn)譯為目標(biāo)器件中的基本元件,否則就是不可實現(xiàn)的。原語在設(shè)計中可以直接例化使用,是最直接的代碼輸入方式,其和HDL語言的關(guān)系,類似于匯編語言和C語言的關(guān)系。)
差分I/O端口組件
1) IBUFDS
IBUFDS原語用于將差分輸入信號轉(zhuǎn)化成標(biāo)準(zhǔn)單端信號,且可加入可選延遲。在IBUFDS原語中,輸入信號為I、IB,一個為主,一個為從,二者相位相反。
IBUFDS的邏輯真值表所列,其中“-*”表示輸出維持上一次的輸出值,保持不變。
IBUFDS原語的例化代碼模板如下所示:
// IBUFDS: 差分輸入緩沖器(Differential Input Buffer)
// 適用芯片:Virtex-II/II-Pro/4, Spartan-3/3E
// Xilinx HDL庫向?qū)О姹?,ISE 9.1
IBUFDS #(
.DIFF_TERM("FALSE"),
// 差分終端,只有Virtex-4系列芯片才有,可設(shè)置為True/Flase
.IOSTANDARD("DEFAULT")
// 指定輸入端口的電平標(biāo)準(zhǔn),如果不確定,可設(shè)為DEFAULT
) IBUFDS_inst (
.O(O), // 時鐘緩沖輸出
.I(I), // 差分時鐘的正端輸入,需要和頂層模塊的端口直接連接
.IB(IB) // 差分時鐘的負(fù)端輸入,需要和頂層模塊的端口直接連接
);
// 結(jié)束IBUFDS模塊的例化過程
2) OBUFDS
OBUFDS將標(biāo)準(zhǔn)單端信號轉(zhuǎn)換成差分信號,輸出端口需要直接對應(yīng)到頂層模塊的輸出信號,和IBUFDS為一對互逆操作。OBUFDS原語的真值表如表所列。
OBUFDS原語的例化代碼模板如下所示:
// OBUFDS: 差分輸出緩沖器(Differential Output Buffer)
// 適用芯片:Virtex-II/II-Pro/4, Spartan-3/3E
// Xilinx HDL庫向?qū)О姹?,ISE 9.1
OBUFDS #(
.IOSTANDARD("DEFAULT")
// 指名輸出端口的電平標(biāo)準(zhǔn)
) OBUFDS_inst (
.O(O), // 差分正端輸出,直接連接到頂層模塊端口
.OB(OB), // 差分負(fù)端輸出,直接連接到頂層模塊端口
.I(I) // 緩沖器輸入
);
// 結(jié)束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
與全局時鐘資源相關(guān)的原語常用的與全局時鐘資源相關(guān)的Xilinx器件原語包括:IBUFG、IBUFGDS、BUFG、BUFGP、BUFGCE、 BUFGMUX、BUFGDLL和DCM等,如圖1所示。
IBUFGDS是IBUFG的差分形式,當(dāng)信號從一對差分全局時鐘管腳輸入時,必須使用IBUFGDS作為全局時鐘輸入緩沖。IBUFG支持BLVDS、LDT、LVDSEXT、LVDS、LVPECL和ULVDS等多種格式的IO標(biāo)準(zhǔn)。
verilog Instantiation Template
IBUFGDS instanece_name(.O(user_O),
.I (user_I),
.IB (user_IB));
參考資料:
1)基于LVDS技術(shù)與FPGA的高速通訊應(yīng)用研究,韓黨群,唐征兵,張慶玲
2)LVDS原理與應(yīng)用簡介
3) 美國國家半導(dǎo)體的《LVDS用戶手冊》
Xilinx FPGA 如何使用LVDS
無論使用HDL flow還是schematic flow,只需要例化IBUFDS,OBUFDS之類的差分緩沖器,就可以使用LVDS了。
例化之后,要定位Pin位置,使用PACE,在IO Standard中選擇LVDS33或者LVDS25,還能選擇有DCI的版本。定端口時,注意看Datasheet中Pin名字分P/N,這P也要對應(yīng)buffer中的P,N也要對應(yīng)N。而且注意同一個bank只能有一個電壓標(biāo)準(zhǔn)。
如果用FPGA Editor觀察布局布線后的情況,就會發(fā)現(xiàn),F(xiàn)PGA Editor中沒有IBUFDS這個Component,這個Buffer是藏在IOB里的,點擊到Pin的圖塊中,可以看到里面有一個Buffer,就起到了IBUFDS這個作用。
評論