01概述
本文總結一下前段時間完成的FPGA以太網通信功能。該方案參考了MILIANKE的設計,但在其基礎上簡化了某些不必要的步驟以及解決了一些由于忽視細節導致的棘手的問題。
02RGMII接口
本設計采用RGMII接口的88E1512芯片。RGMII接口的主要優勢在于,它可以同時適用于1000M、100M、10M三種速率,并且接口占用引腳數較少。
RGMII 使用 4bit 數據接口采用上下沿 DDR(Double Data Rate)的方式在一個時鐘周期內傳輸 8bit 數據信號,即上升沿發送或者接收數據的低4位[3:0],下降沿發送或者接收數據的高4位[7:4]。同理,使用 1bit 控制接口采用 DDR 的方式在一個時鐘周期內傳輸 2bit 控制信號。
- 發送端:tx_clk,tx_d[3:0],tx_ctrl;
- 接收端:rx_clk,rx_d[3:0],rx_ctrl;
圖1 RGMII接口
- 三種速率模式
MII接口適用于1000M、100M、10M三種傳輸速率。
當工作于1000M 時,時鐘信號 TXC 和 RXC 均為 125MHz,4bit數據信號上下沿值均有效,控制信號上下沿值也均有效。
當工作于 100M時,時鐘信號 TXC 和 RXC均為25MHz,4bit數據信號只有上升沿值[3:0]有效,相當于此時數據信號切換為單沿SDR(Single Data Rata)4位輸模式。控制信號仍為上下沿有效。
當工作于10M時,時鐘信號TXC和RXC均為2.5MHz,數據信號和控制信號的使用和100M速率時完全相同。
03UDP通信方案
該以太網通信方案如圖2所示,最上層為用戶邏輯模塊,用于處理和使用解析后的以太網通信數據;uiudp_stack模塊采用MILIANKE提供的協議棧網表文件;FPGA 以太網IP核采用Tri Mode Ethernet Mac;PHY芯片采用88E1512;最后RJ-45接口通過網線與上位機連接。
圖2 FPGA UDP以太網通信方案
- IP核配置
使用千兆通訊,因此將速率設為 1Gbps;
接口參數配置如下:
有關Shared Logic的選擇可參考我之前寫的文章。
04以太網數據流回環傳輸方案
如圖3所示,以太網數據環路傳輸方案,是在電腦上通過網絡調試助手向FPGA發送任意小于1472字節長度的UDP數據包。由于Tri Mode Ethernet Mac IP核接口數據流為8bits/125M,而uiudp_stack為64bits/15.625M,因此需要在中間插入FIFO緩存模塊,進行數據位寬轉換以及跨時鐘域處理。
圖3 以太網數據回環傳輸方案
05調試遇到問題
修改電腦IP地址、子網掩碼,上位機UDP端口號、IP地址,然后測試了軟件功能,發現UDP丟包率較高,為30%左右,而且FPGA端接收回路數據沒問題,只是發送回路有問題。因此對軟件中所有模塊進行測試,修改所有可能影響丟包率的代碼部分,都沒能解決問題。
“排除一切不可能的原因,剩下的即使再不可能,那也是真相”,當軟件沒有問題,那只能是硬件部分有問題了。于是我考慮這很可能是因為FPGA引腳配置不對。
一開始tx_d引腳I/O電平標準配置為LVCMOS,考慮到RGMII接口為雙沿動作,數據傳輸速率較高,可能LVCMOS無法滿足,因此參考了DDR3的設計,改用SSTL電平。編譯之后重新做回環測試,UDP丟包率<1/1000,問題解決。
-
FPGA
+關注
關注
1629文章
21736瀏覽量
603385 -
接口
+關注
關注
33文章
8598瀏覽量
151157 -
千兆以太網
+關注
關注
0文章
67瀏覽量
13870 -
UDP
+關注
關注
0文章
325瀏覽量
33939 -
RGMII
+關注
關注
0文章
27瀏覽量
12169
發布評論請先 登錄
相關推薦
評論