最近調(diào)試芯片遇到一個選擇題,需要決定數(shù)據(jù)接口的接口標準,是選用LVDS差分接口還是CMOS單端接口。說實話,之前接觸多的還是CMOS單端接口,只是看到過很多資料介紹過LVDS差分接口。
官方說法里,它的主要優(yōu)點有:
- 抗干擾能力強,具有更高的數(shù)據(jù)傳輸速率
- 更好的信號完整性
- 降低了電平幅度和電路功耗
既然有這么多優(yōu)點,這次我們就選用LVDS差分接口,看看我們能不能感受到LVDS的優(yōu)勢。
每對LVDS信號是一個差分信號對,一個信號用兩個相反的p,n信號線表示,通過差值 |Vp - Vn|傳輸數(shù)據(jù),這樣可以有效減小共模噪聲的干擾,信號線傳輸如下圖:
圖中含有DATA_CLK, RX_FRAME兩個LVDS信號對
而FPGA內(nèi)部處理信號肯定還是需要使用單端信號,這時就需要經(jīng)過一個差分轉(zhuǎn)單端的“工具”,將差分信號轉(zhuǎn)換為FPGA更方便處理的單端信號。
在Xilinx中,我們可以用IBUFDS原語,可以在Language Template中找到這個原語的示例,經(jīng)過修改一番后,可以將差分的data_clk轉(zhuǎn)換為單端的data_clk, 原語如下:
IBUFDS #(
.DIFF_TERM("FALSE"), // Differential Termination
.IBUF_LOW_PWR("TRUE"), // Low power="TRUE", Highest performance="FALSE"
.IOSTANDARD("DEFAULT") // Specify the input I/O standard
) IBUFDS_inst (
.O(data_clk_tmp), // Buffer output
.I(data_clk_p), // Diff_p buffer input (connect directly to top-level port)
.IB(data_clk_n) // Diff_n buffer input (connect directly to top-level port)
);
將需要轉(zhuǎn)換的data_clk P端和N端接入IBUFDS的I和IB端口,就可以在O端口得到轉(zhuǎn)換的單端信號。
除了CLK時鐘信號,其他信號的輸入轉(zhuǎn)換基本結(jié)束了;而CLK時鐘信號還需要接入BUFG,因為CLK時鐘只有接入BUFG才能接入全局時鐘網(wǎng)絡(luò),這對于減小時序問題有幫助。
同樣在Language Template中找到這個原語的示例,修改后如下:
BUFG BUFG_i0 (
.O(data_clk), // 1-bit output: Clock output, 36MHz.
.I(data_clk_tmp) // 1-bit input: Clock input, 36MHz.
);
一個輸入一個輸出,非常簡單的原語調(diào)用!
另一邊,有輸入就會有輸出,輸出的問題也好解決,同樣使用一個OBUFDS原語實現(xiàn)單端轉(zhuǎn)差分,在Language Template中找到原語,修改后如下:
OBUFDS #(
.IOSTANDARD("LVDS18"), // Specify the output I/O standard
.SLEW("SLOW") // Specify the output slew rate
) OBUFDS_inst (
.O(tx_frame_p), // Diff_p output (connect directly to top-level port)
.OB(tx_frame_n), // Diff_n output (connect directly to top-level port)
.I(tx_frame) // Buffer input
);
設(shè)置好相應(yīng)的參數(shù)之后,將單端信號接入OBUFDS的I端口,O端口輸出差分信號的P端,OB端口輸出差分信號的N端。
最后一個小問題就是在XDC設(shè)置中,因為一個信號對有兩個管腳,比單端信號多了一倍的管腳綁定工作量;但其實我們可以只需要綁定P端的管腳,軟件會自動幫我們綁定N端的管腳。
在設(shè)置輸入輸出端口的“IOSTANDARD”中,遇到了些許問題,這里寫出來記錄一下,也讓后面遇到這個問題的人有個參考;最初設(shè)置差分信號的“IOSTANDARD”時,我想當然的使用了“LVDS”,“LVDS18”等參數(shù),但是這些參數(shù)都不能最終生成比特流;
在查了一些資料以及Vivado本身的I/O Port界面里參數(shù)后發(fā)現(xiàn),差分信號的IOSTANDARD需要這樣設(shè)置:
set_property IOSTANDARD DIFF_HSTL_II_18 [get_ports tx_frame_p]
因為我的IO電壓是1.8V,所以最終使用了“DIFF_HSTL_II_18”,如果有更好的方案,可以一起探討探討。
總結(jié):
- 輸入信號需要用到IBUFDS實現(xiàn)差分轉(zhuǎn)單端,輸入時鐘還需要加BUFG
- 輸出信號使用OBUFDS實現(xiàn)單端轉(zhuǎn)差分
- 差分信號只需要綁P端管腳,“IOSTANDARD”設(shè)置需要注意
輸入輸出端口的簡單處理之后,這些信號為了提高傳輸數(shù)據(jù)的效率,還使用了DDR(Double Data Rate)技術(shù)傳輸數(shù)據(jù)。
-
CMOS
+關(guān)注
關(guān)注
58文章
5721瀏覽量
235577 -
FPGA設(shè)計
+關(guān)注
關(guān)注
9文章
428瀏覽量
26524 -
差分信號
+關(guān)注
關(guān)注
3文章
378瀏覽量
27699 -
lvds接口
+關(guān)注
關(guān)注
1文章
128瀏覽量
17411 -
CLK
+關(guān)注
關(guān)注
0文章
127瀏覽量
17175
發(fā)布評論請先 登錄
相關(guān)推薦
評論