今天講解是RGMII的FPGA設計。因為這邊文章主要是用XILINX的約束工具,所以標記為XILINX,其實你用altera平臺也可以的。設計分為2部分,一部分講解MDIO操作和IEE802.3寄存器要求。另外一部分主要講解PHY層的軟件設計。
RGMII是千兆網總線,但是比GMII差別在于數據發送和接受是4BIT,RGMII是雙邊得到數據,所以千萬要注意約束雙邊沿的數據。觀察RGMII是不是跟MII很像,所以兼容總線100,M/10M接口。
有人問我,是不是很蛋疼,為啥不用ALTERA和xilinx的 TRI-mode MAC ip核心設計。關鍵三模式MAC的IP只能掛在nios或者microblaze一類處理器,你還要學習這些處理器平臺。而且很多工業以太網也不是基于TCP/IP協議的。所以這次有必要講述PHY層的操作。
對于PHY模式和MAC模式,主要差別MAC沒有前導碼和4個字節的CRC32校驗碼。而PHY層是帶這些。經常使用PC軟件發送是MAC層發送。
可以看出前導碼是固定,CRC我們下載已經搞好。已經上傳了基本CRC的算法文件。CRC32_8_CONTROL.rar?,有人問我為啥要用CRC32校驗,如果你不用CRC32,你發給PC,pc不會認你的以太網包的。 ? 注意,CRC校驗是不包括前導碼還有CRC32的4個字節數據。
crc32_8 crc32_8_inst
(
.crc(crc) , // output [7:0] crc
.d(p_data) , // input [7:0] d_sig
.calc(calc) , // input calc_sig
.init(init) , // input init_sig
.d_valid(d_valid) ,// input d_valid_sig
.clk(clk_125mhz) ,// input clk_125mhz
.rst_n(rst_n) // input rst_n
);
if((p_data == 8‘hd5) &&(cnt_pre 》= 4’d7))
begin //開始CRC校驗
calc 《= 1‘b1;
d_valid 《= 1’b1;
init 《= 1‘b0;
end
else if(cnt_crc 《 3’d4) //4個字節的校驗碼
begin
d_valid 《= 1‘b1;
calc 《= 1’b0;
init 《= 1‘b0;
cnt_crc 《= cnt_crc + 1’b1;
cnt_pre 《= 4‘d0;
end
else
begin //數據無效,對校驗程序設置初始化值
d_valid 《= 1’b0;
calc 《= 1‘b0;
init 《= 1’b1;
end
上述基本問題已經初步解決,關鍵怎么看待這個設計給用戶怎么一個好的接口。初步設想使用兩個讀和寫fifo來兼容三種不同的速度模式。在發送的fifo中提供發送fifo的空閑標示,標示可以發送數據。而接收的fifo上面提供完整幀指示,讀緩沖滿指示。
-
Xilinx
+關注
關注
71文章
2164瀏覽量
121015 -
RGMII
+關注
關注
0文章
27瀏覽量
12154
發布評論請先 登錄
相關推薦
評論