最近調(diào)試芯片遇到一個(gè)選擇題,需要決定數(shù)據(jù)接口的接口標(biāo)準(zhǔn),是選用LVDS差分接口還是CMOS單端接口。說(shuō)實(shí)話,之前接觸多的還是CMOS單端接口,只是看到過(guò)很多資料介紹過(guò)LVDS差分接口。
官方說(shuō)法里,它的主要優(yōu)點(diǎn)有:
- 抗干擾能力強(qiáng),具有更高的數(shù)據(jù)傳輸速率
- 更好的信號(hào)完整性
- 降低了電平幅度和電路功耗
既然有這么多優(yōu)點(diǎn),這次我們就選用LVDS差分接口,看看我們能不能感受到LVDS的優(yōu)勢(shì)。
每對(duì)LVDS信號(hào)是一個(gè)差分信號(hào)對(duì),一個(gè)信號(hào)用兩個(gè)相反的p,n信號(hào)線表示,通過(guò)差值 |Vp - Vn|傳輸數(shù)據(jù),這樣可以有效減小共模噪聲的干擾,信號(hào)線傳輸如下圖:
圖中含有DATA_CLK, RX_FRAME兩個(gè)LVDS信號(hào)對(duì)
而FPGA內(nèi)部處理信號(hào)肯定還是需要使用單端信號(hào),這時(shí)就需要經(jīng)過(guò)一個(gè)差分轉(zhuǎn)單端的“工具”,將差分信號(hào)轉(zhuǎn)換為FPGA更方便處理的單端信號(hào)。
在Xilinx中,我們可以用IBUFDS原語(yǔ),可以在Language Template中找到這個(gè)原語(yǔ)的示例,經(jīng)過(guò)修改一番后,可以將差分的data_clk轉(zhuǎn)換為單端的data_clk, 原語(yǔ)如下:
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)換的單端信號(hào)。
除了CLK時(shí)鐘信號(hào),其他信號(hào)的輸入轉(zhuǎn)換基本結(jié)束了;而CLK時(shí)鐘信號(hào)還需要接入BUFG,因?yàn)镃LK時(shí)鐘只有接入BUFG才能接入全局時(shí)鐘網(wǎng)絡(luò),這對(duì)于減小時(shí)序問(wèn)題有幫助。
同樣在Language Template中找到這個(gè)原語(yǔ)的示例,修改后如下:
BUFG BUFG_i0 (
.O(data_clk), // 1-bit output: Clock output, 36MHz.
.I(data_clk_tmp) // 1-bit input: Clock input, 36MHz.
);
一個(gè)輸入一個(gè)輸出,非常簡(jiǎn)單的原語(yǔ)調(diào)用!
另一邊,有輸入就會(huì)有輸出,輸出的問(wèn)題也好解決,同樣使用一個(gè)OBUFDS原語(yǔ)實(shí)現(xiàn)單端轉(zhuǎn)差分,在Language Template中找到原語(yǔ),修改后如下:
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ù)之后,將單端信號(hào)接入OBUFDS的I端口,O端口輸出差分信號(hào)的P端,OB端口輸出差分信號(hào)的N端。
最后一個(gè)小問(wèn)題就是在XDC設(shè)置中,因?yàn)橐粋€(gè)信號(hào)對(duì)有兩個(gè)管腳,比單端信號(hào)多了一倍的管腳綁定工作量;但其實(shí)我們可以只需要綁定P端的管腳,軟件會(huì)自動(dòng)幫我們綁定N端的管腳。
在設(shè)置輸入輸出端口的“IOSTANDARD”中,遇到了些許問(wèn)題,這里寫出來(lái)記錄一下,也讓后面遇到這個(gè)問(wèn)題的人有個(gè)參考;最初設(shè)置差分信號(hào)的“IOSTANDARD”時(shí),我想當(dāng)然的使用了“LVDS”,“LVDS18”等參數(shù),但是這些參數(shù)都不能最終生成比特流;
在查了一些資料以及Vivado本身的I/O Port界面里參數(shù)后發(fā)現(xiàn),差分信號(hào)的IOSTANDARD需要這樣設(shè)置:
set_property IOSTANDARD DIFF_HSTL_II_18 [get_ports tx_frame_p]
因?yàn)槲业腎O電壓是1.8V,所以最終使用了“DIFF_HSTL_II_18”,如果有更好的方案,可以一起探討探討。
總結(jié):
- 輸入信號(hào)需要用到IBUFDS實(shí)現(xiàn)差分轉(zhuǎn)單端,輸入時(shí)鐘還需要加BUFG
- 輸出信號(hào)使用OBUFDS實(shí)現(xiàn)單端轉(zhuǎn)差分
- 差分信號(hào)只需要綁P端管腳,“IOSTANDARD”設(shè)置需要注意
輸入輸出端口的簡(jiǎn)單處理之后,這些信號(hào)為了提高傳輸數(shù)據(jù)的效率,還使用了DDR(Double Data Rate)技術(shù)傳輸數(shù)據(jù)。
-
CMOS
+關(guān)注
關(guān)注
58文章
5642瀏覽量
234853 -
FPGA設(shè)計(jì)
+關(guān)注
關(guān)注
9文章
428瀏覽量
26449 -
差分信號(hào)
+關(guān)注
關(guān)注
3文章
364瀏覽量
27594 -
lvds接口
+關(guān)注
關(guān)注
1文章
120瀏覽量
17377 -
CLK
+關(guān)注
關(guān)注
0文章
126瀏覽量
17089
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論