FPGA中差分信號的定義和使用(一)


做數字電路設計的朋友對差分信號的定義應該都不會太陌生,在當前比較流行的高速串行總線上,基本都是使用的差分信號。比如USB,PCIE,SATA等等。大多數的FPGA也都支持差分信號,甚至某些新型號的CPLD也開始支持差分信號了。

那么在FPGA中如何正確定義和使用差分信號呢?在這篇文章里,我們基於ALTERA公司的CYCLONE III系列的FPGA芯片,做一些討論。

一,差分信號輸出

我們先在設計中定義一個名字為DIF_OUT的輸出信號。並將UART_CLK時鍾賦給它(UART_CLK為串口時鍾,大概為115.2kHz)。(該實驗是在一個FPGA的項目上添加部分差分信號的設計來做的,會引用到原設計里的一些信號,但在介紹中,只會給出與差分信號實驗相關的部分)如下面所示:

module FPGA_TOP

……

DIF_OUT

……
);

……

output DIF_OUT

……

assign DIF_OUT = UART_CLK;

endmodule

在設計里,DIF_OUT和其他變量的定義和賦值方式是一樣的,沒有任何的區別。如果需要將DIF_OUT當做差分信號輸出的話,就必須在Pin Planner中對其I/O Standard進行定義。如下圖所示,我們可以把I/O Standard定義為1.2V的單端輸出信號。

clip_image002

我們也可以把I/O Standard定義為BUS_LVDS類型的信號,這個時候會出現什么情況呢?從下面的圖可以看到,系統會在將DIF_OUT定義為Bus LVDS類型的同時,多添加一個DIF_OUT(n)的信號,並且根據DIF_OUT的location自動選定DIF_OUT(n)的location。在Differential Pair里,會顯示這兩個信號互為差分信號對,也就是說,這是一組差分信號。

clip_image004

那我們看一下這一組差分信號的輸出電平。下面是在示波器上抓取的信號波形,可以看到二者的電平是相反的。

clip_image006

再看一下兩者的電平值,可以看到,電平是0V,高電平是330mV左右。這是正常的差分信號的電平。

clip_image008

我們再通過實例討論一下CYCLONE III中定義差分信號時的注意事項。

1. 差分信號對必須按照芯片的定義來配置。

FPGA芯片的管腳定義中,會給出哪兩個IO可以當做一對差分信號來使用,如下圖中,我們剛才使用了EP3C5E144 BANK3中的IO,DIFFIO_B11p(52)和IO,DIFFIO_B11n(53)來定義DIF_OUT這一對差分信號。

clip_image010

如果我們不這樣定義呢,比如說定義DIF_OUT到Pin46上,看會出現什么情況。先定義DIF_OUT到Pin46上,I/O Standard暫且選為2.5V,如下圖所示:

clip_image012

然后我們去看I/O Standard的下拉列表,根本就沒有Bus LVDS的選項,也就是說,沒有辦法把這個信號定義為差分信號。如果我們先定義I/O Standard為Bus LVDS,然后去選擇location到PIN_46,這個時候會出現下面的對話框,也就是說,沒有辦法定義這個pin為差分信號。

clip_image013

2. 差分信號所在BANK的IO參考電壓(VCCIO)必須設定為2.5V

我們在BANK3添加DP_DATA[7]的信號,location選為PIN_38,I/O Standard選為3.3-V LVTTL(這就意味着BANK3的IO參考電壓為3.3V),然后編譯設計。軟件會報告如下的錯誤(截圖的原因,只給出Error的前半部分):

clip_image015

可以看出,差分信號需要的VCCIO是2.5V。

實際上軟件並不知道在實際的系統上該BANK的VCCIO接的電源是多少,只要不定義該BANK的任一IO的I/O Standard為非2.5V的值,編譯的時候都會認為該BANK的VCCIO是2.5V。至於說如果VCCIO接了非2.5V的電源,編譯后的程序在FPGA上能不能正常工作就不太好講了。唯一可以確認的是,我實驗的結果是VCCIO接3.3V的話差分信號可以正常工作。

3. Location上緊鄰着某一對差分信號的信號不能作為單端信號使用

我們把DP_SEL[0]信號的location設定到PIN_51,I/O Standard設定為2.5V,重新編譯系統,會看到下面的Error:

clip_image017

也就是說,DP_SEL[0]這個單端信號離DIF_OUT這對差分信號太近了,不能這樣分配。我們把DP_SEL[0]定義到BANK3中的location PIN_49上,重新綜合,可以發現,軟件沒有報錯,在Pin Planner中,也正確定義了這三個信號,如下圖所示:

clip_image019

如果我們選擇DP_SEL[0]的location為PIN_50的話,軟件仍然會報上面的錯誤,也就是說,同BANK中,location離差分信號距離小於等於2的信號不能用作單端信號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM