FPGA調試光纖模塊


利用FPGA調試光纖接口接口:

由於與項目需要,前段時間調試了光纖接口,記錄一些設計經驗。

設計中采用FPGA控制光纖模塊完成光纖數據的收發,FPGA采用Xilinx公司的Spartan6 LX45T,由於其內部自帶的2個GTP收發器,能作為多種高速通信協議(千兆以太網、PCI-E,SATA等)的橋梁,且Xilinx提供了免費的IP核,設計比較方便。

首先,建立ISE工程,添加GTP核,(該過程可參考Xilinx提供的文檔:LogiCORE IP Spartan-6 FPGA GTP Transceiver Wizard v1.11User Guide

 

 

選擇Spartan6 GTP收發器1.11版本,接下來進行GTP核的設置,

 

 

Spartan6 LX45T系列FPGA內部有2個GTP核,每個核又具有兩個獨立的通道,因此可根據自己的需要選擇,

 

 

接下來配置GTP速率以及數據協議,很多高速傳輸中都采用的是aurora-8b10b協議(https://en.wikipedia.org/wiki/8b/10b_encoding),速率以及參考時鍾都可以根據需要設置(本項目光纖最高速率1.25Gbps),

 

 

 

接下來是協議的一些配置選項,各個選項的含義可以參考RocketIO™ Transceiver User GuideSpartan-6 FPGA GTP Transceivers,里面有這些選項的詳細說明,

 

 

這里選擇數據傳輸中的逗號對齊,比較重要,主要是用於數據告訴傳輸中的數據對齊,后面幾頁的配置默認就可以。

最后工程生成以后可以直接打開GTP核工程,編譯后便可進行modelsim仿真,仿真結果一般都不會出現問題。

最后,可根據自己的需要修改源代碼,其中,比較關鍵的地方需要注意:

1、  TXCHARISK參數,該參數用於指明當前數據是否為對齊字符(K28.5,即0xBC),當發送對齊字符時,必須TXCHARISK=1,當然0xBC也可以作為實際數據,只要TXCHARISK=0,就不會認為該數據為對齊字符;

2、  數據寬度問題,在設置GTP速率及協議的時候,注意數據寬度的選擇,若選擇16bits或者32bits,則數據在接收端可能會發生錯位現象,(發送0x0102,接收到為0x0201),仿真時不會出現問題,因為在Frame_check中進行了判斷,若發生錯位,會得到糾正,但選擇8bits則不會出現該問題,省去了后續的糾錯任務;

3、  約束文件問題,打開GTP核工程后,可以看到有兩個約束文件,一個是GTP屬性,一個是頂層約束,

INST mgt1_0t1r_i/tile0_mgt1_0t1r_i/gtpa1_dual_i CLKINDC_B_0

 

NET "tile0_txusrclk0_i" TNM_NET = "tile0_txusrclk0_i";

TIMESPEC "TS_tile0_txusrclk0_i" = PERIOD "tile0_txusrclk0_i" 8.0;

 

若設計者希望建立自己的頂層文件,並在頂層文件中例化GTP核,則需要在約束語句上加上頂層例化名稱:

INST gtp_top_i/mgt1_0t1r_i/tile0_mgt1_0t1r_i/gtpa1_dual_i CLKINDC_B_0

 

NET " gtp_top_i/tile0_txusrclk0_i" TNM_NET = "tile0_txusrclk0_i";

TIMESPEC "TS_tile0_txusrclk0_i" = PERIOD "tile0_txusrclk0_i" 8.0;

 

其中,具體設計細節可參考上面提到的3個參考文檔。在硬件實現上,主要需要配置GTP的差分時鍾,光纖的RX、TX和GTP的RX、TX連接。


免責聲明!

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



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