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