[转]FPGA使用LVDS差分信号的一些注意事项
最近在調試一個LVDS的屏顯功能,涉及到了一些LVDS的東東,簡單地整理如下,后續會再補充。
(1)對于altera FPGA(CYCLONE III)
1、對于作為LVDS傳輸的BANK必須接2.5V的VCCIO;
2、左右BANK(即1/2/5/6 BANK)的LVDS發送差分對信號無需外接匹配電阻,而上下BANK(即3/4/7/8 BANK)則需要,如果硬件工程師忘了,還可以在FPGA的IO引腳分配時里加端接電阻設置;
3、分配管腳時,左右BANK的LVDS差分信號腳在IO分配時選擇的IO電平標準是LVDS,而上下BANK的LVDS差分信號腳在IO分配時選擇的IO電平標準是LVDS_E_3R;
4、分配管腳時,只要指定LVDS信號的p端(+),則n端(-)會自動分配。在verilog代碼中只要一個信號接口即可,無需在代碼中定義一個差分對接口;
5、速度高時需用IP核(200MHz或400Mbps以上,串并轉換器),在altera FPGA內使用的LVDS收發IP核是altlvds_rx和altlvds_tx,相應的IP使用說明在megawizard里有。
LVDS是一種高速串行接口。速度一般都是幾百MHZ以上。Altera低端的Cyclone IVE/Cyclone III的LVDS速度都可以達到800Mbps以上,高端的更能上到1.6Gbps。因此,IO的性能是遠遠比FPGA內部的LE性能要好的。這么高的速率情況下,你如果是用內部的LE來移位再輸出到LVDS IO上,頂多能上到400Mbps(如果上DDIO的話)就已經不錯了,再大的話是移不出來的。
這種情況下,你只有調用專用的串轉并/并轉串模塊,也就是LVDS RX/TX模塊。這個模塊是專用的解串電路,跟Tranceiver有點像,但是功能沒有Tranceiver多,性能沒有它好。
了解上面一點后,你的問題其實就是數據對齊的問題了。你輸入的是并行的數據,轉成串行的數據以后,必然會有一個數據位對齊的問題。說來話有點多了,這個是高速鏈路的知識了。數據對齊有很多方式,Altera的LVDS模塊就是用bitslip來控制的,bitslip是移位控制,在LVDS上電訓練鏈路的那個時間,用bitslip來控制移位,發現如果不是訓練碼型的話就移一位直到能接收到正確的碼型為止。
數據對齊還有另外一種方法。做LVDS接口的一般都有一個隨路時鐘,這個時鐘是跟TX,RX的同源/同步的。移動這個時鐘的相位也能起到數據對齊的作用。但是前提是時鐘頻率跟數據頻率的比例和串行因子一定要是相等的。例如,數據頻率是800Mbps,串行因子是8,那么參考時鐘頻率需要是100MHZ。
(2)對于xilinx FPGA
區別altera的地方在于首先在Verilog的代碼里,xilinx的LVDS信號需要定義一對差分對信號,通過xilinx的原語進行差分對轉單端或者單端轉成差分對信號。另外在IO引腳分配時,xilinx的電平標準都是一樣的,比如都是LVDS_33。
下圖1是altera下的LVDS信號引腳分配,可見用戶只需要分配p端(+)引腳即可。
圖1 altera LVDS引腳分配情況
下圖2是xilinx的LVDS信號引腳分配,xilinx的LVDS引腳區分p端和n端。當然在vivado下引腳分配可以只分配P端腳號,N端腳號會自動分配。而在代碼里都需要寫明差分對信號,再通過原語轉成單端信號。
圖2 xilinx下LVDS的引腳分配情況
總結
以上是生活随笔為你收集整理的[转]FPGA使用LVDS差分信号的一些注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 系统倒计时显示时间,An
- 下一篇: 小程序实现GBK编码数据转为Unicod