0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【紫光同創(chuàng)國(guó)產(chǎn)FPGA教程】【第二十三章】千兆以太網(wǎng)傳輸實(shí)驗(yàn)

FPGA技術(shù)專(zhuān)欄 ? 來(lái)源:芯驛電子科技 ? 作者:芯驛電子科技 ? 2021-04-07 10:38 ? 次閱讀

本原創(chuàng)教程由芯驛電子科技(上海)有限公司(ALINX)創(chuàng)作,版權(quán)歸本公司所有,如需轉(zhuǎn)載,需授權(quán)并注明出處()。

適用于板卡型號(hào):

PGL22G

1. 簡(jiǎn)介

本實(shí)驗(yàn)將實(shí)現(xiàn)FPGA芯片和PC之間進(jìn)行千兆以太網(wǎng)數(shù)據(jù)通信, 通信協(xié)議采用Ethernet UDP通信協(xié)議。 FPGA通過(guò)RGMII總線和開(kāi)發(fā)板上的Gigabit PHY芯片通信, Gigabit PHY芯片把數(shù)據(jù)通過(guò)網(wǎng)線發(fā)給PC,程序中實(shí)現(xiàn)了ARP,UDP,PING功能,此外還實(shí)現(xiàn)了100/1000M自適應(yīng)。

2. 硬件介紹

在開(kāi)發(fā)板上通過(guò)1片RTL8211EG以太網(wǎng)PHY芯片為用戶(hù)提供網(wǎng)絡(luò)通信服務(wù)。以太網(wǎng)PHY芯片是連接到Pango FPGA的IO接口上。芯片支持10/100/1000 Mbps網(wǎng)絡(luò)傳輸速率,通過(guò)RGMII接口跟FPGA進(jìn)行數(shù)據(jù)通信。RTL8211EG支持MDI/MDX自適應(yīng),各種速度自適應(yīng),Master/Slave自適應(yīng),支持MDIO總線進(jìn)行PHY的寄存器管理。當(dāng)網(wǎng)口Link到千兆以太網(wǎng)時(shí), FPGA通過(guò)RGMII總線和PHY芯片進(jìn)行數(shù)據(jù)通信,當(dāng)網(wǎng)口Link到百兆以太網(wǎng)時(shí), FPGA通過(guò)MII總線和PHY芯片進(jìn)行數(shù)據(jù)通信。另外FPGA可以通過(guò)MDI/MDIO管理接口來(lái)配置或讀取PHY芯片內(nèi)部的寄存器。在千兆的RGMII通信模式下(以U8為例), 發(fā)送數(shù)據(jù)時(shí),發(fā)送時(shí)鐘為125Mhz的E_GTXC信號(hào), 數(shù)據(jù)為E_TXD[3:0], 數(shù)據(jù)有效信號(hào)為E_TXEN, E_TXC信號(hào)連接但沒(méi)有使用; 接收數(shù)據(jù)時(shí),接收時(shí)鐘為125Mhz的E_RXC信號(hào), 數(shù)據(jù)為E_RXC[3:0], 數(shù)據(jù)有效信號(hào)為E_RXDV。關(guān)于詳細(xì)的管腳說(shuō)明和RGMII/MII的通信時(shí)序,請(qǐng)大家參考RTL8211EG的芯片手冊(cè)。

硬件電路設(shè)計(jì)如下:

o4YBAGBlMhSAdkeeAAEx3kHVg_M159.jpg開(kāi)發(fā)板網(wǎng)絡(luò)部分電路

關(guān)于詳細(xì)的管腳說(shuō)明和RGMII的通信時(shí)序,請(qǐng)大家參考相關(guān)芯片手冊(cè)。

3. 以太網(wǎng)幀

3.1 以太網(wǎng)幀格式

下圖為以太網(wǎng)的幀格式:

pIYBAGBlMhWAWUKQAABgT8nqI9k327.jpg

前導(dǎo)碼(Preamble):8字節(jié),連續(xù)7個(gè)8’h55加1個(gè)8’hd5,表示一個(gè)幀的開(kāi)始,用于雙方設(shè)備數(shù)據(jù)的同步。

目的MAC地址:6字節(jié),存放目的設(shè)備的物理地址,即MAC地址

源MAC地址:6字節(jié),存放發(fā)送端設(shè)備的物理地址

類(lèi)型:2字節(jié),用于指定協(xié)議類(lèi)型,常用的有0800表示IP協(xié)議,0806表示ARP協(xié)議,8035

表示RARP協(xié)議

數(shù)據(jù):46到1500字節(jié),最少46字節(jié),不足需要補(bǔ)全46字節(jié),例如IP協(xié)議層就包含在數(shù)據(jù)

部分,包括其IP頭及數(shù)據(jù)。

FCS:幀尾,4字節(jié),稱(chēng)為幀校驗(yàn)序列,采用32位CRC校驗(yàn),對(duì)目的MAC地址字段到數(shù)據(jù)字

段進(jìn)行校驗(yàn)。

進(jìn)一步擴(kuò)展,以UDP協(xié)議為例,可以看到其結(jié)構(gòu)如下,除了以太網(wǎng)首部的14字節(jié),數(shù)據(jù)部分包含IP首部,UDP首部,應(yīng)用數(shù)據(jù)共46~1500字節(jié)。

o4YBAGBlMhWACH7dAACIUIJVI9I373.jpg

3.2 ARP數(shù)據(jù)報(bào)格式

ARP地址解析協(xié)議,即ARP(Address Resolution Protocol),根據(jù)IP地址獲取物理地址。主機(jī)發(fā)送包含目的IP地址的ARP請(qǐng)求廣播(MAC地址為48’hff_ff_ff_ff_ff_ff)到網(wǎng)絡(luò)上的主機(jī),并接收返回消息,以此確定目標(biāo)的物理地址,收到返回消息后將IP地址和物理地址保存到緩存中,并保留一段時(shí)間,下次請(qǐng)求時(shí)直接查詢(xún)ARP緩存以節(jié)約資源。下圖為ARP數(shù)據(jù)報(bào)格式 。

pIYBAGBlMhaAY0EuAACl1hzsDP8060.jpg

幀類(lèi)型:ARP幀類(lèi)型為兩字節(jié)0806

硬件類(lèi)型:指鏈路層網(wǎng)絡(luò)類(lèi)型,1為以太網(wǎng)

協(xié)議類(lèi)型:指要轉(zhuǎn)換的地址類(lèi)型,采用0x0800 IP類(lèi)型,之后的硬件地址長(zhǎng)度和協(xié)議地址長(zhǎng)度分別對(duì)應(yīng)6和4

OP字段中1表示ARP請(qǐng)求,2表示ARP應(yīng)答

例如:|ff ff ff ff ff ff|00 0a 35 01 fe c0|08 06|00 01|08 00|06|04|00 01|00 0a 35 01 fe c0

|c0 a8 00 02| ff ff ff ff ff ff|c0 a8 00 03| 表示向192.168.0.3地址發(fā)送ARP請(qǐng)求。

|00 0a 35 01 fe c0 | 60 ab c1 a2 d5 15 |08 06|00 01|08 00|06|04|00 02| 60 ab c1 a2 d5 15

|c0 a8 00 03|00 0a 35 01 fe c0|c0 a8 00 02|表示向192.168.0.2地址發(fā)送ARP應(yīng)答。

3.3 IP 數(shù)據(jù)報(bào)格式

因?yàn)閁DP協(xié)議包只是IP包中的一種, 所以我們來(lái)介紹一下IP包的數(shù)據(jù)格式。下圖為IP分組的報(bào)文頭格式,報(bào)文頭的前20個(gè)字節(jié)是固定的,后面的可變

o4YBAGBlMhaADwWXAAAjg-tHO1s419.jpg

版本:占 4 位,指 IP 協(xié)議的版本目前的 IP 協(xié)議版本號(hào)為 4 (即 IPv4)

首部長(zhǎng)度:占4位,可表示的最大數(shù)值是15個(gè)單位(一個(gè)單位為 4 字節(jié))因此IP 的首部長(zhǎng)度的最大值是 60 字節(jié)

區(qū)分服務(wù):占8位,用來(lái)獲得更好的服務(wù),在舊標(biāo)準(zhǔn)中叫做服務(wù)類(lèi)型,但實(shí)際上一直未被使用過(guò).1998 年這個(gè)字段改名為區(qū)分服務(wù).只有在使用區(qū)分服務(wù)(DiffServ)時(shí),這個(gè)字段才起作用.一般的情況下都不使用這個(gè)字段

總長(zhǎng)度:占16位,指首部和數(shù)據(jù)之和的長(zhǎng)度,單位為字節(jié),因此數(shù)據(jù)報(bào)的最大長(zhǎng)度為 65535 字節(jié).總長(zhǎng)度必須不超過(guò)最大傳送單元 MTU

標(biāo)識(shí):占16位,它是一個(gè)計(jì)數(shù)器,用來(lái)產(chǎn)生數(shù)據(jù)報(bào)的標(biāo)識(shí)

標(biāo)志(flag):

占3位,目前只有前兩位有意義

MF

標(biāo)志字段的最低位是 MF (More Fragment)

MF=1 表示后面“還有分片”。MF=0 表示最后一個(gè)分片

DF

標(biāo)志字段中間的一位是 DF (Don't Fragment)

只有當(dāng) DF=0 時(shí)才允許分片

片偏移:占12位,指較長(zhǎng)的分組在分片后某片在原分組中的相對(duì)位置.片偏移以 8 個(gè)字節(jié)為偏移單位

生存時(shí)間:占8位,記為T(mén)TL (Time To Live) 數(shù)據(jù)報(bào)在網(wǎng)絡(luò)中可通過(guò)的路由器數(shù)的最大值,TTL 字段是由發(fā)送端初始設(shè)置一個(gè) 8 bit字段.推薦的初始值由分配數(shù)字 RFC 指定,當(dāng)前值為 64.發(fā)送 ICMP 回顯應(yīng)答時(shí)經(jīng)常把 TTL 設(shè)為最大值 255

協(xié)議:占8位,指出此數(shù)據(jù)報(bào)攜帶的數(shù)據(jù)使用何種協(xié)議以便目的主機(jī)的IP層將數(shù)據(jù)部分上交給哪個(gè)處理過(guò)程, 1表示為 ICMP 協(xié)議, 2表示為 IGMP 協(xié)議, 6表示為 TCP 協(xié)議, 17表示為 UDP 協(xié)議

首部檢驗(yàn)和:占16位,只檢驗(yàn)數(shù)據(jù)報(bào)的首部不檢驗(yàn)數(shù)據(jù)部分,采用二進(jìn)制反碼求和,即將16位數(shù)據(jù)相加后,再將進(jìn)位與低16位相加,直到進(jìn)位為0,最后將16位取反。

源地址和目的地址:都各占4 字節(jié),分別記錄源地址和目的地址

3.4 UDP協(xié)議

UDP是User Datagram Protocol(用戶(hù)數(shù)據(jù)報(bào)協(xié)議)的英文縮寫(xiě)。UDP只提供一種基本的、低延遲的被稱(chēng)為數(shù)據(jù)報(bào)的通訊。所謂數(shù)據(jù)報(bào),就是一種自帶尋址信息,從發(fā)送端走到接收端的數(shù)據(jù)包。UDP協(xié)議經(jīng)常用于圖像傳輸、網(wǎng)絡(luò)監(jiān)控?cái)?shù)據(jù)交換等數(shù)據(jù)傳輸速度要求比較高的場(chǎng)合。

UDP協(xié)議的報(bào)頭格式:

UDP報(bào)頭由4個(gè)域組成,其中每個(gè)域各占用2個(gè)字節(jié),具體如下:

pIYBAGBlMheAOiSCAABRARXgZ_4197.jpg

① UDP源端口號(hào)

② 目標(biāo)端口號(hào)

③ 數(shù)據(jù)報(bào)長(zhǎng)度

④ 校驗(yàn)和

UDP協(xié)議使用端口號(hào)為不同的應(yīng)用保留其各自的數(shù)據(jù)傳輸通道。數(shù)據(jù)發(fā)送一方將UDP數(shù)據(jù)報(bào)通過(guò)源端口發(fā)送出去,而數(shù)據(jù)接收一方則通過(guò)目標(biāo)端口接收數(shù)據(jù)。

數(shù)據(jù)報(bào)的長(zhǎng)度是指包括報(bào)頭和數(shù)據(jù)部分在內(nèi)的總字節(jié)數(shù)。因?yàn)閳?bào)頭的長(zhǎng)度是固定的,所以該域主要被用來(lái)計(jì)算可變長(zhǎng)度的數(shù)據(jù)部分(又稱(chēng)為數(shù)據(jù)負(fù)載)。數(shù)據(jù)報(bào)的最大長(zhǎng)度根據(jù)操作環(huán)境的不同而各異。從理論上說(shuō),包含報(bào)頭在內(nèi)的數(shù)據(jù)報(bào)的最大長(zhǎng)度為65535字節(jié)。不過(guò),一些實(shí)際應(yīng)用往往會(huì)限制數(shù)據(jù)報(bào)的大小,有時(shí)會(huì)降低到8192字節(jié)。

UDP協(xié)議使用報(bào)頭中的校驗(yàn)值來(lái)保證數(shù)據(jù)的安全。校驗(yàn)值首先在數(shù)據(jù)發(fā)送方通過(guò)特殊的算法計(jì)算得出,在傳遞到接收方之后,還需要再重新計(jì)算。如果某個(gè)數(shù)據(jù)報(bào)在傳輸過(guò)程中被第三方篡改或者由于線路噪音等原因受到損壞,發(fā)送和接收方的校驗(yàn)計(jì)算值將不會(huì)相符,由此UDP協(xié)議可以檢測(cè)是否出錯(cuò)。雖然UDP提供有錯(cuò)誤檢測(cè),但檢測(cè)到錯(cuò)誤時(shí),錯(cuò)誤校正,只是簡(jiǎn)單地把損壞的消息段扔掉,或者給應(yīng)用程序提供警告信息。

3.5 Ping功能

ICMP是TCP/IP協(xié)議族的一個(gè)IP層子協(xié)議,包含在IP數(shù)據(jù)報(bào)里,用于IP主機(jī)、路由器之間傳遞控制消息??刂葡⑹侵妇W(wǎng)絡(luò)是否連通,主機(jī)是否可達(dá)等功能。其中ping功能采用回送請(qǐng)求和回答報(bào)文,回送請(qǐng)求報(bào)文類(lèi)型為8’h08,回答報(bào)文類(lèi)型為8’h00。

o4YBAGBlMhiAR8bMAABWnawg_vk318.jpgpIYBAGBlMhiALuXuAAAbpCwBr-I864.jpg

4. SMI(MDC/MDIO)總線接口

串行管理接口(Serial Management Interface),也被稱(chēng)作MII管理接口(MII Management Interface),包括MDC和MDIO兩條信號(hào)線。MDIO是一個(gè)PHY的管理接口,用來(lái)讀/寫(xiě)PHY的寄存器,以控制PHY的行為或獲取PHY的狀態(tài),MDC為MDIO提供時(shí)鐘,由MAC端提供,在本實(shí)驗(yàn)中也就是FPGA端。在RTL8211EG文檔里可以看到MDC的周期最小為400ns,也就是最大時(shí)鐘為2.5MHz。

o4YBAGBlMhmANvTJAADcDABzP-w589.jpg

4.1 SMI幀格式

如下圖,為SMI的讀寫(xiě)幀格式:

pIYBAGBlMhmAIu5MAACCioL4-wc299.jpg

名稱(chēng) 說(shuō)明
Preamble 由MAC發(fā)送32個(gè)連續(xù)的邏輯“1”,同步于MDC信號(hào),用于MAC與PHY之間的同步
ST 幀開(kāi)始位,固定為01
OP 操作碼,10表示讀,01表示寫(xiě)
PHYAD PHY的地址,5 bits
REGAD 寄存器地址,5 bits
TA Turn Around,MDIO方向轉(zhuǎn)換,在寫(xiě)狀態(tài)下,不需要轉(zhuǎn)換方向,值為10,在讀狀態(tài)下,MAC輸出端為高阻態(tài),在第二個(gè)周期,PHY將MDIO拉低
DATA 共16bits數(shù)據(jù)
IDLE 空閑狀態(tài),此狀態(tài)下MDIO為高阻態(tài),由外部上拉電阻拉高

4.2 讀寫(xiě)時(shí)序

1)讀時(shí)序

o4YBAGBlMhqAXOYHAACLdDNc_Wg525.jpg

可以看到在Turn Around狀態(tài)下,第一個(gè)周期MDIO為高阻態(tài),第二個(gè)周期由PHY端拉低。

2)寫(xiě)時(shí)序

pIYBAGBlMhuAZPpyAACYIivE3-Q890.jpg

為了保證能夠正確采集到數(shù)據(jù),在MDC上升沿之前就把數(shù)據(jù)準(zhǔn)備好,在本實(shí)驗(yàn)中為下降沿發(fā)送數(shù)據(jù),上升沿接收數(shù)據(jù)。

5. 程序設(shè)計(jì)

本實(shí)驗(yàn)以千兆以太網(wǎng)RGMII通信為例來(lái)設(shè)計(jì)verilog程序,會(huì)先發(fā)送預(yù)設(shè)的UDP數(shù)據(jù)到網(wǎng)絡(luò),每秒鐘發(fā)送一次,如果FPGA檢測(cè)網(wǎng)口發(fā)來(lái)的UDP的數(shù)據(jù)包,會(huì)把接收到的數(shù)據(jù)包存儲(chǔ)在FPGA內(nèi)部的RAM中,再不斷的把RAM中的數(shù)據(jù)包通過(guò)網(wǎng)口發(fā)回到ethernet網(wǎng)絡(luò)。程序分為兩部分,分別為發(fā)送和接收,實(shí)現(xiàn)了ARP,UDP,Ping功能。以下為原理實(shí)現(xiàn)框圖:

o4YBAGBlMhuANgQmAAAuPhPPNXs605.jpg

5.1 發(fā)送部分

1)MAC層發(fā)送

發(fā)送部分中, mac_tx.v為MAC層發(fā)送模塊,首先在SEND_START狀態(tài),等待mac_tx_ready信號(hào),如果有效,表明IP或ARP的數(shù)據(jù)已經(jīng)準(zhǔn)備好,可以開(kāi)始發(fā)送。再進(jìn)入發(fā)送前導(dǎo)碼狀態(tài),結(jié)束時(shí)發(fā)送mac_data_req,請(qǐng)求IP或ARP的數(shù)據(jù),之后進(jìn)入發(fā)送數(shù)據(jù)狀態(tài),最后進(jìn)入發(fā)送CRC狀態(tài)。在發(fā)送數(shù)據(jù)過(guò)程中,需要同時(shí)進(jìn)行CRC校驗(yàn)。

pIYBAGBlMhyAbXSQAAAxFcxNiDY858.jpg

信號(hào)名稱(chēng) 方向 寬度(bit) 說(shuō)明
clk in 1 系統(tǒng)時(shí)鐘
rst_n in 1 異步復(fù)位,低電平復(fù)位
crc_result in 32 CRC32結(jié)果
crcen out 1 CRC使能信號(hào)
crcre out 1 CRC復(fù)位信號(hào)
crc_din out 8 CRC模塊輸入信號(hào)
mac_frame_data in 8 從IP或ARP來(lái)的數(shù)據(jù)
mac_tx_req in 1 MAC的發(fā)送請(qǐng)求
mac_tx_ready in 1 IP或ARP數(shù)據(jù)已準(zhǔn)備好
mac_tx_end in 1 IP或ARP數(shù)據(jù)已經(jīng)傳輸完畢
mac_tx_data out 8 向PHY發(fā)送數(shù)據(jù)
mac_send_end out 1 MAC數(shù)據(jù)發(fā)送結(jié)束
mac_data_valid out 1 MAC數(shù)據(jù)有效信號(hào),即gmii_tx_en
mac_data_req out 1 MAC層向IP或ARP請(qǐng)求數(shù)據(jù)

2)MAC發(fā)送模式

工程中的mac_tx_mode.v為發(fā)送模式選擇,根據(jù)發(fā)送模式是IP或ARP選擇相應(yīng)的信號(hào)與數(shù)據(jù)。

信號(hào)名稱(chēng) 方向 寬度(bit) 說(shuō)明
clk in 1 系統(tǒng)時(shí)鐘
rst_n in 1 異步復(fù)位,低電平復(fù)位
mac_send_end in 1 MAC發(fā)送結(jié)束
arp_tx_req in 1 ARP發(fā)送請(qǐng)求
arp_tx_ready in 1 ARP數(shù)據(jù)已準(zhǔn)備好
arp_tx_data in 8 ARP數(shù)據(jù)
arp_tx_end in 1 ARP數(shù)據(jù)發(fā)送到MAC層結(jié)束
arp_tx_ack in 1 ARP發(fā)送響應(yīng)信號(hào)
ip_tx_req in 1 IP發(fā)送請(qǐng)求
ip_tx_ready in 1 IP數(shù)據(jù)已準(zhǔn)備好
ip_tx_data in 8 IP數(shù)據(jù)
ip_tx_end in 1 IP數(shù)據(jù)發(fā)送到MAC層結(jié)束
mac_tx_ready out 1 MAC數(shù)據(jù)已準(zhǔn)備好信號(hào)
ip_tx_ack out 1 IP發(fā)送響應(yīng)信號(hào)
mac_tx_ack in 1 MAC發(fā)送響應(yīng)信號(hào)
mac_tx_req out 1 MAC發(fā)送請(qǐng)求
mac_tx_data out 8 MAC發(fā)送數(shù)據(jù)
mac_tx_end out 1 MAC數(shù)據(jù)發(fā)送結(jié)束

3)ARP發(fā)送

發(fā)送部分中,arp_tx.v為ARP發(fā)送模塊, 在IDLE狀態(tài)下,等待ARP發(fā)送請(qǐng)求或ARP應(yīng)答請(qǐng)求信號(hào),之后進(jìn)入請(qǐng)求或應(yīng)答等待狀態(tài),并通知MAC層,數(shù)據(jù)已經(jīng)準(zhǔn)備好,等待mac_data_req信號(hào),之后進(jìn)入請(qǐng)求或應(yīng)答數(shù)據(jù)發(fā)送狀態(tài)。由于數(shù)據(jù)不足46字節(jié),需要補(bǔ)全46字節(jié)發(fā)送。

o4YBAGBlMhyAHwemAAA7FNu4rnA642.jpg

信號(hào)名稱(chēng) 方向 寬度(bit) 說(shuō)明
clk in 1 系統(tǒng)時(shí)鐘
rst_n in 1 異步復(fù)位,低電平復(fù)位
destination_mac_addr in 48 發(fā)送的目的MAC地址
source_mac_addr in 48 發(fā)送的源MAC地址
source_ip_addr in 32 發(fā)送的源IP地址
destination_ip_addr in 32 發(fā)送的目的IP地址
mac_data_req in 1 MAC層請(qǐng)求數(shù)據(jù)信號(hào)
arp_request_req in 1 ARP請(qǐng)求的請(qǐng)求信號(hào)
arp_reply_ack out 1 ARP回復(fù)的應(yīng)答信號(hào)
arp_reply_req in 1 ARP回復(fù)的請(qǐng)求信號(hào)
arp_rec_source_ip_addr in 32 ARP接收的源IP地址,回復(fù)時(shí)放到目的IP地址
arp_rec_source_mac_addr in 48 ARP接收的源MAC地址,回復(fù)時(shí)放到目的MAC地址
mac_send_end in 1 MAC發(fā)送結(jié)束
mac_tx_ack in 1 MAC發(fā)送應(yīng)答
arp_tx_ready out 1 ARP數(shù)據(jù)準(zhǔn)備好
arp_tx_data out 8 ARP發(fā)送數(shù)據(jù)
arp_tx_end out 1 ARP數(shù)據(jù)發(fā)送結(jié)束

4)IP層發(fā)送

在發(fā)送部分,ip_tx.v為IP層發(fā)送模塊,在IDLE狀態(tài)下,如果ip_tx_req有效,也就是UDP或ICMP發(fā)送請(qǐng)求信號(hào),進(jìn)入等待發(fā)送數(shù)據(jù)長(zhǎng)度狀態(tài),之后進(jìn)入產(chǎn)生校驗(yàn)和狀態(tài),校驗(yàn)和是將IP首部所有數(shù)據(jù)以16位相加,最后將進(jìn)位再與低16位相加,直到進(jìn)入為0,再將低16位取反,得出校驗(yàn)和結(jié)果。此程序中校驗(yàn)和以樹(shù)型加法結(jié)構(gòu),并插入流水線,能有效降低加法部分的延遲,但缺點(diǎn)是會(huì)消耗較多邏輯資源。如下圖ABCD四個(gè)輸入,A與B相加,結(jié)果為E,C與D相加,結(jié)果為F,再將E與F相加,結(jié)果為G,在每個(gè)相加結(jié)果之后都有寄存器。

pIYBAGBlMh2AFXPAAAAt_M5KRs4421.jpg

在生成校驗(yàn)和之后,等待MAC層數(shù)據(jù)請(qǐng)求,開(kāi)始發(fā)送數(shù)據(jù),并在即將結(jié)束發(fā)送IP首部后請(qǐng)求UDP或ICMP數(shù)據(jù)。等發(fā)送完,進(jìn)入IDLE狀態(tài)。

信號(hào)名稱(chēng) 方向 寬度(bit) 說(shuō)明
clk in 1 系統(tǒng)時(shí)鐘
rst_n in 1 異步復(fù)位,低電平復(fù)位
destination_mac_addr in 48 發(fā)送的目的MAC地址
source_mac_addr in 48 發(fā)送的源MAC地址
source_ip_addr in 32 發(fā)送的源IP地址
destination_ip_addr in 32 發(fā)送的目的IP地址
TTL in 8 生存時(shí)間
ip_send_type in 8 上層協(xié)議號(hào),如UDP,ICMP
upper_layer_data in 8 從UDP或ICMP過(guò)來(lái)的數(shù)據(jù)
upper_data_req out 1 向上層請(qǐng)求數(shù)據(jù)
mac_tx_ack in 1 MAC發(fā)送應(yīng)答
mac_send_end in 1 MAC發(fā)送結(jié)束信號(hào)
mac_data_req in 1 MAC層請(qǐng)求數(shù)據(jù)信號(hào)
upper_tx_ready in 1 上層UDP或ICMP數(shù)據(jù)準(zhǔn)備好
ip_tx_req in 1 發(fā)送請(qǐng)求,從上層過(guò)來(lái)
ip_send_data_length in 16 發(fā)送數(shù)據(jù)總長(zhǎng)度
ip_tx_ack out 產(chǎn)生IP發(fā)送應(yīng)答
ip_tx_busy out P發(fā)送忙信號(hào)
ip_tx_ready out 1 IP數(shù)據(jù)已準(zhǔn)備好
ip_tx_data out 8 IP數(shù)據(jù)
ip_tx_end out 1 IP數(shù)據(jù)發(fā)送到MAC層結(jié)束

5)IP發(fā)送模式

工程中的ip_tx_mode.v為發(fā)送模式選擇,根據(jù)發(fā)送模式是UDP或ICMP選擇相應(yīng)的信號(hào)與數(shù)據(jù)。

信號(hào)名稱(chēng) 方向 寬度(bit) 說(shuō)明
clk in 1 系統(tǒng)時(shí)鐘
rst_n in 1 異步復(fù)位,低電平復(fù)位
mac_send_end in 1 MAC數(shù)據(jù)發(fā)送結(jié)束
udp_tx_req in UDP發(fā)送請(qǐng)求
udp_tx_ready in 1 UDP數(shù)據(jù)準(zhǔn)備好
udp_tx_data in 8 UDP發(fā)送數(shù)據(jù)
udp_send_data_length in 16 UDP發(fā)送數(shù)據(jù)長(zhǎng)度
udp_tx_ack out 1 輸出UDP發(fā)送應(yīng)答
icmp_tx_req in 1 ICMP發(fā)送請(qǐng)求
icmp_tx_ready in 1 ICMP數(shù)據(jù)準(zhǔn)備好
icmp_tx_data in 8 ICMP發(fā)送數(shù)據(jù)
icmp_send_data_length in 16 ICMP發(fā)送數(shù)據(jù)長(zhǎng)度
icmp_tx_ack out 1 ICMP發(fā)送應(yīng)答
ip_tx_ack in 1 IP發(fā)送應(yīng)答
ip_tx_req in 1 IP發(fā)送請(qǐng)求
ip_tx_ready out 1 IP數(shù)據(jù)已準(zhǔn)備好
ip_tx_data out 8 IP數(shù)據(jù)
ip_send_type out 8 上層協(xié)議號(hào),如UDP,ICMP
ip_send_data_length out 16 發(fā)送數(shù)據(jù)總長(zhǎng)度

6)UDP發(fā)送

發(fā)送部分中,udp_tx.v為UDP發(fā)送模塊,第一步將數(shù)據(jù)寫(xiě)入U(xiǎn)DP發(fā)送RAM,同時(shí)計(jì)算校驗(yàn)和,第二步將RAM中數(shù)據(jù)發(fā)送出去。UDP校驗(yàn)和與IP校驗(yàn)和計(jì)算方法一致。在計(jì)算時(shí)需要將偽首部加上,偽首部包括目的IP地址,源IP地址,網(wǎng)絡(luò)類(lèi)型,UDP數(shù)據(jù)長(zhǎng)度。

信號(hào)名稱(chēng) 方向 寬度(bit) 說(shuō)明
clk in 1 系統(tǒng)時(shí)鐘
rst_n in 1 異步復(fù)位,低電平復(fù)位
source_ip_addr in 32 發(fā)送的源IP地址
destination_ip_addr in 32 發(fā)送的目的IP地址
udp_send_source_port in 16 源端口號(hào)
udp_send_destination_port in 16 目的端口號(hào)
udp_send_data_length in 16 UDP發(fā)送數(shù)據(jù)長(zhǎng)度,用戶(hù)需給出其值
ram_wr_data in 8 寫(xiě)UDP的RAM數(shù)據(jù)
ram_wr_en in 1 寫(xiě)RAM使能
udp_ram_data_req out 1 請(qǐng)求寫(xiě)RAM數(shù)據(jù)
mac_send_end in 1 MAC發(fā)送結(jié)束信號(hào)
udp_tx_req in 1 UDP發(fā)送請(qǐng)求
ip_tx_req out 1 IP發(fā)送請(qǐng)求
ip_tx_ack in 1 Ip應(yīng)答
udp_data_req in 1 IP層請(qǐng)求數(shù)據(jù)
udp_tx_ready out 1 UDP數(shù)據(jù)準(zhǔn)備好
udp_tx_data out 8 UDP數(shù)據(jù)
udp_tx_end out 1 UDP發(fā)送結(jié)束(未使用)
almost_full out 1 Fifo接近滿(mǎn)標(biāo)志

5.2 接收部分

1) MAC層接收

在接收部分,其中mac_rx.v為mac層接收文件,首先在IDLE狀態(tài)下需要判斷rx_dv信號(hào)是否為高,在REC_PREAMBLE前導(dǎo)碼狀態(tài)下,接收前導(dǎo)碼。之后進(jìn)入接收MAC頭部狀態(tài),即目的MAC地址,源MAC地址,類(lèi)型,將它們緩存起來(lái),并在此狀態(tài)判斷前導(dǎo)碼是否正確,錯(cuò)誤則進(jìn)入REC_ERROR錯(cuò)誤狀態(tài),在REC_IDENTIFY狀態(tài)判斷類(lèi)型是IP(8’h0800)或ARP(8’h0806)。然后進(jìn)入接收數(shù)據(jù)狀態(tài),將數(shù)據(jù)傳送到IP或ARP模塊,等待IP或ARP數(shù)據(jù)接收完畢,再接收CRC數(shù)據(jù)。并在接收數(shù)據(jù)的過(guò)程中對(duì)接收的數(shù)據(jù)進(jìn)行CRC處理,將結(jié)果與接收到的CRC數(shù)據(jù)進(jìn)行對(duì)比,判斷數(shù)據(jù)是否接收正確,正確則結(jié)束,錯(cuò)誤則進(jìn)入ERROR狀態(tài)。

pIYBAGBlMh2AH4iYAAAk6FACm-M211.jpg

信號(hào)名稱(chēng) 方向 寬度(bit) 說(shuō)明
clk in 1 系統(tǒng)時(shí)鐘
rst_n in 1 異步復(fù)位,低電平復(fù)位
crc_result in 32 CRC32結(jié)果
crcen out 1 CRC使能信號(hào)
crcre out 1 CRC復(fù)位信號(hào)
crc_din out 8 CRC模塊輸入信號(hào)
rx_dv in 1 從PHY層過(guò)來(lái)的rx_dv信號(hào)
mac_rx_datain in 8 從PHY層接收的數(shù)據(jù)
checksum_err in 1 IP層校驗(yàn)和錯(cuò)誤
ip_rx_end in 1 IP層接收結(jié)束
arp_rx_end in 1 ARP層接收結(jié)束
ip_rx_req out 1 請(qǐng)求IP層接收
arp_rx_req out 1 請(qǐng)求ARP接收
mac_rx_dataout out 8 MAC層接收數(shù)據(jù)輸出給IP或ARP
mac_rec_error out 1 MAC層接收錯(cuò)誤
mac_rx_destination_mac_addr out 48 MAC接收的目的IP地址
mac_rx_source_mac_addr out 48 MAC接收的源IP地址

2) ARP接收

工程中的arp_rx.v為ARP接收模塊,實(shí)現(xiàn)ARP數(shù)據(jù)接收,在IDLE狀態(tài)下,接收到從MAC層發(fā)來(lái)的arp_rx_req信號(hào),進(jìn)入ARP接收狀態(tài),在此狀態(tài)下,提取出目的MAC地址,源MAC地址,目的IP地址,源IP地址,并判斷操作碼OP是請(qǐng)求還是應(yīng)答。如果是請(qǐng)求,則判斷接收到的目的IP地址是否為本機(jī)地址,如果是,發(fā)送應(yīng)答請(qǐng)求信號(hào)arp_reply_req,如果不是,則忽略。如果OP是應(yīng)答,則判斷接收到的目的IP地址及目的MAC地址是否與本機(jī)一致,如果是,則拉高arp_found信號(hào),表明接收到了對(duì)方的地址。并將對(duì)方的MAC地址及IP地址存入ARP緩存中。

o4YBAGBlMh6AA5HQAAAYk5VqSAA109.jpg

信號(hào)名稱(chēng) 方向 寬度(bit) 說(shuō)明
clk in 1 系統(tǒng)時(shí)鐘
rst_n in 1 異步復(fù)位,低電平復(fù)位
local_ip_addr in 32 本地IP地址
local_mac_addr in 48 本地MAC地址
arp_rx_data in 8 ARP接收數(shù)據(jù)
arp_rx_req in 1 ARP接收請(qǐng)求
arp_rx_end out 1 ARP接收完成
arp_reply_ack in 1 ARP回復(fù)應(yīng)答
arp_reply_req out 1 ARP回復(fù)請(qǐng)求
arp_rec_source_ip_addr in 32 ARP接收的源IP地址
arp_rec_source_mac_addr in 48 ARP接收的源MAC地址
arp_found out 1 ARP接收到請(qǐng)求應(yīng)答正確

3) IP層接收模塊

在工程中,ip_rx為IP層接收模塊,實(shí)現(xiàn)IP層的數(shù)據(jù)接收,信息提取,并進(jìn)行校驗(yàn)和檢查。首先在IDLE狀態(tài)下,判斷從MAC層發(fā)過(guò)來(lái)的ip_rx_req信號(hào),進(jìn)入接收IP首部狀態(tài),先在REC_HEADER0提取出首部長(zhǎng)度及IP總長(zhǎng)度,進(jìn)入REC_HEADER1狀態(tài),在此狀態(tài)提取出目的IP地址,源IP地址,協(xié)議類(lèi)型,根據(jù)協(xié)議類(lèi)型發(fā)送udp_rx_req或icmp_rx_req。在接收首部的同時(shí)進(jìn)行校驗(yàn)和的檢查,將首部接收的所有數(shù)據(jù)相加,存入32位寄存器,再將高16位與低16位相加,直到高16位為0 ,再將低16位取反,判斷其是否為0,如果是0,則檢驗(yàn)正確,否則錯(cuò)誤,進(jìn)入IDLE狀態(tài),丟棄此幀數(shù)據(jù),等待下次接收。

信號(hào)名稱(chēng) 方向 寬度(bit) 說(shuō)明
clk in 1 系統(tǒng)時(shí)鐘
rst_n in 1 異步復(fù)位,低電平復(fù)位
local_ip_addr in 32 本地IP地址
local_mac_addr in 48 本地MAC地址
ip_rx_data in 8 從MAC層接收的數(shù)據(jù)
ip_rx_req in 1 MAC層發(fā)送的IP接收請(qǐng)求信號(hào)
mac_rx_destination_mac_addr in 48 MAC層接收的目的MAC地址
udp_rx_req out 1 UDP接收請(qǐng)求信號(hào)
icmp_rx_req out 1 ICMP接收請(qǐng)求信號(hào)
ip_addr_check_error out 1 地址檢查錯(cuò)誤信號(hào)
upper_layer_data_length out 16 上層協(xié)議的數(shù)據(jù)長(zhǎng)度
ip_total_data_length out 16 數(shù)據(jù)總長(zhǎng)度
net_protocol out 8 網(wǎng)絡(luò)協(xié)議號(hào)
ip_rec_source_addr out 32 IP層接收的源IP地址
ip_rec_destination_addr out 32 IP層接收的目的IP地址
ip_rx_end out 1 IP層接收結(jié)束
ip_checksum_error out 1 IP層校驗(yàn)和檢查錯(cuò)誤信號(hào)

4) UDP接收

在工程中,udp_rx.v為UDP接收模塊,在此模塊首先接收UDP首部,再接收數(shù)據(jù)部分,并將數(shù)據(jù)部分存入RAM中,在接收的同時(shí)進(jìn)行UDP校驗(yàn)和檢查,如果UDP數(shù)據(jù)是奇數(shù)個(gè)字節(jié),在計(jì)算校驗(yàn)和時(shí),在最后一個(gè)字節(jié)后加上8’h00,并進(jìn)行校驗(yàn)和計(jì)算。校驗(yàn)方法與IP校驗(yàn)和一樣,如果校驗(yàn)正確,將拉高udp_rec_data_valid信號(hào),表明接收的UDP數(shù)據(jù)有效,否則無(wú)效,等待下次接收。

信號(hào)名稱(chēng) 方向 寬度(bit) 說(shuō)明
clk in 1 系統(tǒng)時(shí)鐘
rst_n in 1 異步復(fù)位,低電平復(fù)位
udp_rx_data in 8 UDP接收數(shù)據(jù)
udp_rx_req in 1 UDP接收請(qǐng)求
mac_rec_error in 1 MAC層接收錯(cuò)誤
net_protocol in 8 網(wǎng)絡(luò)協(xié)議號(hào)
ip_rec_source_addr in 32 IP層接收的源IP地址
ip_rec_destination_addr in 32 IP層接收的目的IP地址
ip_checksum_error in 1 IP層校驗(yàn)和檢查錯(cuò)誤信號(hào)
ip_addr_check_error in 1 地址檢查錯(cuò)誤信號(hào)
upper_layer_data_length in 16 上層協(xié)議的數(shù)據(jù)長(zhǎng)度
udp_rec_ram_rdata out 8 UDP接收RAM讀數(shù)據(jù)
udp_rec_ram_read_addr in 11 UDP接收RAM讀地址
udp_rec_data_length out 16 UDP接收數(shù)據(jù)長(zhǎng)度
udp_rec_data_valid out 1 UDP接收數(shù)據(jù)有效

5.3 SMI接口

1)SMI讀寫(xiě)控制模塊

smi_read_write.v文件用于SMI接口的讀寫(xiě)控制,在IDLE狀態(tài)下根據(jù)寫(xiě)請(qǐng)求或讀請(qǐng)求到相應(yīng)的狀態(tài),再根據(jù)SMI時(shí)序?qū)崿F(xiàn)MDC和MDIO的控制。

信號(hào)名稱(chēng) 方向 寬度(bit) 說(shuō)明
clk in 1 系統(tǒng)時(shí)鐘
rst_n in 1 異步復(fù)位,低電平復(fù)位
mdc out 1 MDC時(shí)鐘
mdio inout 1 MDIO數(shù)據(jù)
phy_addr in 5 PHY地址
reg_addr in 5 寄存器地址
write_req in 1 寫(xiě)請(qǐng)求
write_data in 16 寫(xiě)數(shù)據(jù)
read_req in 1 讀請(qǐng)求
read_data out 16 讀數(shù)據(jù)
data_valid out 1 數(shù)據(jù)有效
done out 1 讀或?qū)懡Y(jié)束

2)SMI配置模塊

smi_config.v文件讀取寄存器0x11的bit10和bit[15:14]來(lái)判斷以太網(wǎng)是否已經(jīng)連接和當(dāng)前的以太網(wǎng)速度,默認(rèn)狀態(tài)下,PHY芯片是自動(dòng)協(xié)商速度,根據(jù)對(duì)方的速度做匹配。bit 10為1則link成功,否則失敗,bit[15:14]為00則是10M,01為100M,10或11為1000M,根據(jù)不同的速度點(diǎn)亮LED燈,沒(méi)有l(wèi)ink都不亮,10M亮一個(gè)燈,100M亮兩個(gè)燈,1000M亮三個(gè)燈。

信號(hào)名稱(chēng) 方向 寬度(bit) 說(shuō)明
clk in 1 系統(tǒng)時(shí)鐘
rst_n in 1 異步復(fù)位,低電平復(fù)位
mdc out 1 MDC時(shí)鐘
mdio inout 1 MDIO數(shù)據(jù)
speed out 2 速度 00:10M; 01:100M; 10:1000M
link out 1 寄存器地址
led out 4 寫(xiě)請(qǐng)求

5.4 10/100/1000M仲裁

由于10/100M傳輸數(shù)據(jù)時(shí)是單邊沿采集數(shù)據(jù),因此一個(gè)周期傳輸4bit數(shù)據(jù),而RGMII為雙邊沿采集數(shù)據(jù),所以要進(jìn)行數(shù)據(jù)的轉(zhuǎn)換,如發(fā)送時(shí),要將一周其8bit數(shù)據(jù)轉(zhuǎn)成一周期4bit數(shù)據(jù),因此要設(shè)置數(shù)據(jù)緩存,讀數(shù)據(jù)速率為寫(xiě)數(shù)據(jù)的一半。

1)TX buffer

gmii_tx_buffer.v將要發(fā)送的8bit緩存到eth_data_fifo中,同時(shí)將數(shù)據(jù)長(zhǎng)度緩存到len_fifo中,在狀態(tài)機(jī)中判斷長(zhǎng)度FIFO中的數(shù)據(jù)是否大于0,是則表明已經(jīng)緩存了數(shù)據(jù),之后進(jìn)入讀FIFO數(shù)據(jù)狀態(tài),每?jī)蓚€(gè)周期讀一次數(shù)據(jù),此功能不好理解,最好用signaltap抓取信號(hào)幫助理解。

信號(hào)名稱(chēng) 方向 寬度(bit) 說(shuō)明
clk in 1 系統(tǒng)時(shí)鐘
rst_n in 1 異步復(fù)位,低電平復(fù)位
eth_10_100m_en in 1 10/100M使能信號(hào)
link in 1 Link信號(hào)
gmii_tx_en in 1 內(nèi)部的gmii發(fā)送使能
gmii_txd in 8 內(nèi)部的gmii發(fā)送數(shù)據(jù)
e10_100_tx_en out 1 10/100M發(fā)送使能
e10_100_txd out 8 10/100M發(fā)送數(shù)據(jù)

2)RX buffer

gmii_rx_buffer.v將接收的10/100M數(shù)據(jù)緩存到eth_data_fifo中,同時(shí)將數(shù)據(jù)長(zhǎng)度緩存到len_fifo中,在狀態(tài)機(jī)中判斷長(zhǎng)度FIFO中的數(shù)據(jù)是否大于0,是則表明已經(jīng)緩存了數(shù)據(jù),之后進(jìn)入讀FIFO數(shù)據(jù)狀態(tài),每?jī)蓚€(gè)周期讀一次數(shù)據(jù),最好用signaltap抓取信號(hào)幫助理解。

信號(hào)名稱(chēng) 方向 寬度(bit) 說(shuō)明
clk in 1 系統(tǒng)時(shí)鐘
rst_n in 1 異步復(fù)位,低電平復(fù)位
eth_10_100m_en in 1 100M使能信號(hào)
eth_10m_en in 1 10M使能信號(hào)
link in 1 Link信號(hào)
gmii_rx_dv in 1 外部的gmii接收有效
gmii_rxd in 8 外部的gmii接收數(shù)據(jù)
e10_100_rx_dv out 1 10/100M接收有效信號(hào)
e10_100_rxd out 8 10/100M接收數(shù)據(jù)

3)仲裁

gmii_arbi.v用于三種速度的仲裁,同時(shí)設(shè)定了發(fā)送的間隔都為1S。

信號(hào)名稱(chēng) 方向 寬度(bit) 說(shuō)明
clk in 1 系統(tǒng)時(shí)鐘
rst_n in 1 異步復(fù)位,低電平復(fù)位
speed in 2 以太網(wǎng)速度
link in 1 Link信號(hào)
gmii_rx_dv in 1 外部的gmii接收有效
gmii_rxd in 8 外部的gmii接收數(shù)據(jù)
gmii_tx_en in 1 內(nèi)部的gmii發(fā)送使能
gmii_txd out 8 內(nèi)部的gmii發(fā)送數(shù)據(jù)
pack_total_len out 32 延遲數(shù)值,每種速度都設(shè)置為1S
e_rst_n out 1 復(fù)位MAC信號(hào)
e_rx_dv out 1 仲裁后接收有效信號(hào)
e_rxd out 8 仲裁后接收有效數(shù)據(jù)
e_tx_en out 1 仲裁后發(fā)送使能信號(hào)
e_txd out 8 仲裁后發(fā)送數(shù)據(jù)信號(hào)

5.5 其他部分

1)ICMP應(yīng)答

在工程中,icmp_reply.v實(shí)現(xiàn)ping功能,首先接收其他設(shè)備發(fā)過(guò)來(lái)的icmp數(shù)據(jù),判斷類(lèi)型是否是回送請(qǐng)求(ECHO REQUEST),如果是,將數(shù)據(jù)存入RAM,并計(jì)算校驗(yàn)和,判斷校驗(yàn)和是否正確,如果正確則進(jìn)入發(fā)送狀態(tài),將數(shù)據(jù)發(fā)送出去。

信號(hào)名稱(chēng) 方向 寬度(bit) 說(shuō)明
clk in 1 系統(tǒng)時(shí)鐘
rst_n in 1 異步復(fù)位,低電平復(fù)位
mac_send_end in 1 Mac發(fā)送結(jié)束信號(hào)
ip_tx_ack in 1 IP發(fā)送應(yīng)答
icmp_rx_data in 8 ICMP接收數(shù)據(jù)
icmp_rx_req in 1 ICMP接收請(qǐng)求
icmp_rev_error in 1 接收錯(cuò)誤信號(hào)
upper_layer_data_length in 16 上層協(xié)議長(zhǎng)度
icmp_data_req in 1 發(fā)送請(qǐng)求ICMP數(shù)據(jù)
icmp_tx_ready out 1 ICMP發(fā)送準(zhǔn)備好
icmp_tx_data out 8 ICMP發(fā)送數(shù)據(jù)
icmp_tx_end out 1 ICMP發(fā)送結(jié)束
icmp_tx_req out 1 ICMP發(fā)送請(qǐng)求

2)ARP緩存

在工程中,arp_cache.v為arp緩存模塊,將接收到的其他設(shè)備IP地址和MAC地址緩存,在發(fā)送數(shù)據(jù)之前,查詢(xún)目的地址是否存在,如果不存在,則向目的地址發(fā)送ARP請(qǐng)求,等待應(yīng)答。在設(shè)計(jì)文件中,只做了一個(gè)緩存空間,如果有需要,可擴(kuò)展。

信號(hào)名稱(chēng) 方向 寬度(bit) 說(shuō)明
clk in 1 系統(tǒng)時(shí)鐘
rst_n in 1 異步復(fù)位,低電平復(fù)位
arp_found in 1 ARP接收到回復(fù)正確
arp_rec_source_ip_addr in 32 ARP接收的源IP地址
arp_rec_source_mac_addr in 48 ARP接收的源MAC地址
destination_ip_addr in 32 目的IP地址
destination_mac_addr out 48 目的MAC地址
mac_not_exist out 1 目的地址對(duì)應(yīng)的MAC地址不存在

3)CRC校驗(yàn)?zāi)K(crc.v)

一個(gè)IP數(shù)據(jù)包的CRC32校驗(yàn)是在目標(biāo)MAC 地址開(kāi)始計(jì)算的,一直計(jì)算到一個(gè)包的最后一個(gè)數(shù)據(jù)為止。以太網(wǎng)的CRC32的verilog的算法和多項(xiàng)式可以在以下網(wǎng)站中直接生成:

asics.com/webtools/crc

pIYBAGBlMh6AQiLaAAFtegJnEeA663.jpg

4)以太網(wǎng)測(cè)試模塊(mac_test.v)

測(cè)試模塊實(shí)現(xiàn)數(shù)據(jù)流的控制,首先在按下按鍵后發(fā)送ARP請(qǐng)求信號(hào),直到對(duì)方回應(yīng),進(jìn)入發(fā)送UDP數(shù)據(jù)狀態(tài),如果在WAIT狀態(tài)時(shí)發(fā)現(xiàn)UDP接收數(shù)據(jù)有效,則將接收的數(shù)據(jù)發(fā)送出去。循環(huán)1秒發(fā)送,在每次發(fā)送前需要檢查目的IP地址是否能在ARP緩存里找到,如果沒(méi)有,則發(fā)送ARP請(qǐng)求。

信號(hào)名稱(chēng) 方向 寬度(bit) 說(shuō)明
clk_50m in 1 系統(tǒng)時(shí)鐘
rst_n in 1 異步復(fù)位,低電平復(fù)位
pack_total_len in 32 包長(zhǎng)度
push_button in 1 按鍵信號(hào)
gmii_tx_clk in 1 GMII發(fā)送時(shí)鐘
gmii_rx_clk in 1 GMII接收時(shí)鐘
gmii_rx_dv in 1 接收數(shù)據(jù)有效信號(hào)
gmii_rxd in 8 接收數(shù)據(jù)
gmii_tx_en out 1 發(fā)送數(shù)據(jù)有效信號(hào)
gmii_txd out 8 發(fā)送數(shù)據(jù)

5)RGMII轉(zhuǎn)GMII模塊

util_gmii_to_rgmii.v文件是將RGMII與GMII轉(zhuǎn)換,提取出控制信號(hào)與數(shù)據(jù)信號(hào)。與PHY連接是RGMII接口。

o4YBAGBlMh6AAnXCAAAKR9-gvPU304.jpg

GMII接口

pIYBAGBlMh-ALOQ7AAAMcsYg3VM593.jpg

RGMII接口

RGMII接口是GMII接口的簡(jiǎn)化版,在時(shí)鐘的上升沿及下降沿都采樣數(shù)據(jù),上升沿發(fā)送TXD[3:0]/RXD[3:0],下降沿發(fā)送TXD[7:4]/RXD[7:4],TX_EN傳送TX_EN(上升沿)和TX_ER(下降沿)兩種信息,RX_DV傳送RX_DV(上升沿)和RX_ER(下降沿)兩種信息。

6. 下載和試驗(yàn)

6.1 準(zhǔn)備工作

第一步:首先確認(rèn)一下自己PC的網(wǎng)卡是否是千兆網(wǎng)卡,用戶(hù)可以點(diǎn)擊本地連接查看,再用五類(lèi)+或者六類(lèi)網(wǎng)線連接開(kāi)發(fā)板的網(wǎng)口和PC的網(wǎng)口。

第二步:修改PC的IP地址為192.168.0.3。PC的IP Address需要和mac_test.v中設(shè)置一致,不然網(wǎng)絡(luò)調(diào)試助手會(huì)接收不到開(kāi)發(fā)板發(fā)送的UDP數(shù)據(jù)包。

o4YBAGBlMh-AfRD0AAAXvgccV84762.jpg

pIYBAGBlMiCALw1kAABu-Nz6EpI729.jpg

第三步:安裝Wireshark是為了方便用戶(hù)網(wǎng)絡(luò)通信的調(diào)試,安裝”\07_軟件工具及驅(qū)動(dòng)\網(wǎng)絡(luò)調(diào)試工具\(yùn)wireshark_cn”目錄下的網(wǎng)絡(luò)抓包工具Wireshark, 我們?cè)趯?shí)驗(yàn)的時(shí)候可以用這工具來(lái)查看PC網(wǎng)口發(fā)送的數(shù)據(jù)和接收到的數(shù)據(jù)的詳細(xì)信息。

o4YBAGBlMiCAKfHEAAAOJCeSmz4188.jpg

6.2 以太網(wǎng)通信測(cè)試

第一步:燒寫(xiě)ethernet_test.bit文件到FPGA,(如果需固化到FLASH中燒寫(xiě)ethernet_test.bin文件),等待兩三秒,看到三個(gè)LED燈亮,為千兆網(wǎng)卡,兩個(gè)燈亮為百兆網(wǎng)卡,如果都沒(méi)亮,需要檢查網(wǎng)口連接情況。

第二步:以管理員權(quán)限打開(kāi)CMD窗口,輸入arp –a查看ARP綁定結(jié)果,可以看到開(kāi)發(fā)板的IP地址和MAC地址已經(jīng)緩存。

pIYBAGBlMiGACKNKAABj2DB0VZc390.jpg

第三步:在CMD窗口中,輸入ping 192.168.0.2查看PC與開(kāi)發(fā)板是否ping通。

o4YBAGBlMiGACJ_OAABr-SlpS3c355.jpg

第四步:打開(kāi)“\07_軟件工具及驅(qū)動(dòng)\網(wǎng)絡(luò)調(diào)試工具\(yùn)NetAssist “目錄下的網(wǎng)絡(luò)調(diào)試助手并設(shè)置參數(shù)如下,再按連接按鈕(這里的本地的IP地址為PC的IP Address, 本地端口需要跟FPGA程序中的一致,為8080)。

pIYBAGBlMiKAZBhrAACPIBBY4vk908.jpg

這時(shí)網(wǎng)絡(luò)數(shù)據(jù)接收窗口會(huì)顯示FPGA發(fā)給PC的以太網(wǎng)數(shù)據(jù)包"HELLO ALINX HEIJIN"目標(biāo)主機(jī)的IP地址需要和FPGA程序中的IP地址一致,目標(biāo)端口號(hào)也需要和FPGA程序的一致(8080)。如下圖網(wǎng)絡(luò)顯示:

o4YBAGBlMiOAczhcAACGROtUaMQ008.jpg

第五步:再在網(wǎng)絡(luò)調(diào)試助手的發(fā)送窗口發(fā)送一大串字符,在網(wǎng)絡(luò)的數(shù)據(jù)接收窗口我們可以看到從FPGA返回的數(shù)據(jù)也變成剛發(fā)送的字符串。

pIYBAGBlMiOAP9-CAACW-BtKYZM180.jpg

也可以發(fā)送較少字符,低于46字節(jié),F(xiàn)PGA程序會(huì)自動(dòng)補(bǔ)充至46字節(jié),如下圖:

o4YBAGBlMiSAWZScAACRVyZUiN0487.jpg

第六步:這一步對(duì)用戶(hù)來(lái)講是可選的,用戶(hù)如果想查看更多數(shù)據(jù)包傳輸?shù)男畔?,可以使用網(wǎng)絡(luò)抓包工具Wireshark來(lái)查看PC的網(wǎng)卡接收和發(fā)送的網(wǎng)絡(luò)數(shù)據(jù),打開(kāi)安裝好的wireshark抓包工具,點(diǎn)擊菜單抓包->網(wǎng)絡(luò)接口。

pIYBAGBlMiWAf-pKAAFo6P3UaWE929.jpg

在彈出的抓包接口窗口選擇PC的千兆網(wǎng)卡,按開(kāi)始按鈕開(kāi)始抓包。

o4YBAGBlMiWAM4ePAAB4gjcENGQ620.jpg

在wireshark抓包窗口我們可以看到開(kāi)發(fā)板(192.168.0.2)向PC網(wǎng)口(192.168.0.2)發(fā)來(lái)的數(shù)據(jù)包,這里會(huì)顯示數(shù)據(jù)包的目標(biāo)MAC, 源MAC,IP包頭和UDP包等信息, 如下圖開(kāi)發(fā)板抓包窗口顯示:

pIYBAGBlMiaAO5dQAACgz8T3Akk537.jpg

6.3 以太網(wǎng)速度測(cè)試

我們可以通過(guò)抓包工具wireshark測(cè)量以太網(wǎng)部分的數(shù)據(jù)發(fā)送的速度,因?yàn)榍д滓蕴W(wǎng)理想模式網(wǎng)絡(luò)的速度可以達(dá)到1Gbps,但實(shí)際因?yàn)槊總€(gè)數(shù)據(jù)包中有包頭,CRC等非數(shù)據(jù)字符,而且每包之間有空隙,一般千兆以太網(wǎng)的數(shù)據(jù)傳輸速度最高在950Mbps左右。傳輸是上下對(duì)稱(chēng)傳輸,就是說(shuō)上行和下行都能達(dá)到950Mbps左右。在這里,因?yàn)樽グ黽ireshark只能統(tǒng)計(jì)接收的數(shù)據(jù)包,而不會(huì)發(fā)送數(shù)據(jù),所以這里只是測(cè)試FPGA發(fā)給電腦的輸送數(shù)據(jù)的速度。

第一步:修改程序,修改工程中mac_test.v中的代碼,如下圖所示

o4YBAGBlMieAWFkKAABYGexfxS0979.jpg

把上圖中的紅色標(biāo)的”//”去掉,如下:

pIYBAGBlMieAZhH0AABHfsvKPCs503.jpg

第二步:編譯綜合完成后下載測(cè)試程序,下載完成后這時(shí)FPGA網(wǎng)絡(luò)會(huì)進(jìn)行動(dòng)態(tài)綁定,PC機(jī)的IP設(shè)置請(qǐng)參照5.2章節(jié)(如已設(shè)置忽略)。

打開(kāi)wireshark,點(diǎn)擊菜單“抓包”->"抓包參數(shù)選擇”。在抓包選項(xiàng)中設(shè)置緩沖大小為1000megabyte,在10000個(gè)數(shù)據(jù)包之后停止抓包。(這里需要注意:如果不設(shè)置的話wireshark因?yàn)樽サ陌?,處理不了?dǎo)致軟件崩潰)

o4YBAGBlMiiAOgabAABmtBA7WrU693.jpg

按開(kāi)始后抓包,等待接收到10000個(gè)包后停止抓包,用時(shí)0.087932秒。

pIYBAGBlMiiAKKNdAAIJd-zNBq0599.jpg

我們可以看到每個(gè)數(shù)據(jù)包的內(nèi)容都是00->FF的數(shù)據(jù),總共是3個(gè)00->FF,1個(gè)00->e7的數(shù)據(jù)??偣彩?000個(gè)有效數(shù)據(jù)。

o4YBAGBlMimAcx4cAAGqGdXNFh4559.jpg

這里我們看到軟件用了0.087932秒收到了10000個(gè)數(shù)據(jù)包,每個(gè)數(shù)據(jù)包里含有的有效數(shù)據(jù)是1000個(gè)字節(jié)(8bit)。所以我們可以算出以太網(wǎng)的傳輸速度為:

傳輸速度 = 1000* 10000 * 8 / 0.087932 = 910Mbps。

這里提示一下,網(wǎng)絡(luò)傳輸?shù)乃俣雀L(zhǎng)也有關(guān)系,數(shù)據(jù)包長(zhǎng)越長(zhǎng),效率就越高,傳輸數(shù)據(jù)的速度會(huì)變高;數(shù)據(jù)包越短,效率就越低,傳輸數(shù)據(jù)的速度就慢。這個(gè)道理我想大家應(yīng)該明白的吧!

下面是1000000包的時(shí)間是8.799832秒,自己可以按照上面的方面算下速度,速度是非常穩(wěn)定的。

o4YBAGBlMimANtxnAAFZisWKtgY659.jpg

6.4 以太網(wǎng)100M/1000M測(cè)試

改變電腦的網(wǎng)卡速度,首先打開(kāi)網(wǎng)絡(luò)連接,找到本地網(wǎng)卡,右鍵點(diǎn)擊屬性彈出如下窗口,再點(diǎn)擊配置。

pIYBAGBlMiqAJkMeAADzzxnuENE720.jpg

在彈出的窗口中找到鏈接速度,選擇100Mbps全雙工,點(diǎn)擊確定,等待幾秒鐘,會(huì)發(fā)現(xiàn)LED燈會(huì)發(fā)生改變,之后再按前面的操作步驟進(jìn)行測(cè)試。

o4YBAGBlMiqABEjOAABpczDKxXQ646.jpg

到這里為止,我們的以太網(wǎng)數(shù)據(jù)通信就全部結(jié)束了,要實(shí)現(xiàn)以太網(wǎng)的數(shù)據(jù)通信首先需要理解以太網(wǎng)數(shù)據(jù)包的格式和通信協(xié)議,還需要了解MAC和PHY之間的GMII,RGMII,MII,RMII接口的時(shí)序。千兆以太網(wǎng)的數(shù)據(jù)傳輸速度非??欤沂侨p工傳輸,而且UDP通信的數(shù)據(jù)速度可以達(dá)到900Mbps以上,非常適合高速數(shù)據(jù)傳輸?shù)膱?chǎng)合,比如視頻圖像傳輸,高速數(shù)據(jù)采集等等。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1643

    文章

    21983

    瀏覽量

    614597
  • 以太網(wǎng)
    +關(guān)注

    關(guān)注

    40

    文章

    5594

    瀏覽量

    174970
  • PHY
    PHY
    +關(guān)注

    關(guān)注

    2

    文章

    315

    瀏覽量

    52545
  • RGMII
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    12374
  • 紫光同創(chuàng)
    +關(guān)注

    關(guān)注

    5

    文章

    96

    瀏覽量

    27890
收藏 2人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    紫光同創(chuàng)國(guó)產(chǎn)FPGA教程】【第二十七章】千兆以太網(wǎng)視頻傳輸實(shí)驗(yàn)

    簡(jiǎn)介 本實(shí)驗(yàn)將實(shí)現(xiàn)視頻圖像的以太網(wǎng)傳輸,也相當(dāng)于用 FPGA 來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)攝像頭的功能。這里采用黑金的 500 萬(wàn)攝像頭 AN5642 模組,通過(guò)配置 OV5640 的寄存器實(shí)現(xiàn) JP
    的頭像 發(fā)表于 04-12 10:29 ?1.4w次閱讀
    【<b class='flag-5'>紫光</b><b class='flag-5'>同創(chuàng)</b><b class='flag-5'>國(guó)產(chǎn)</b><b class='flag-5'>FPGA</b>教程】【<b class='flag-5'>第二十</b>七章】<b class='flag-5'>千兆</b><b class='flag-5'>以太網(wǎng)視頻傳輸</b><b class='flag-5'>實(shí)驗(yàn)</b>

    紫光同創(chuàng)國(guó)產(chǎn)FPGA教程】【第二十四章】AD9238以太網(wǎng)傳輸

    使用ADC的以太網(wǎng)傳輸實(shí)驗(yàn)中使用的ADC模塊型號(hào)為AN9238,最大采樣率65Mhz,精度為12位?;谇懊嬷v到的以太網(wǎng)實(shí)驗(yàn),在本
    的頭像 發(fā)表于 04-08 09:13 ?1.1w次閱讀
    【<b class='flag-5'>紫光</b><b class='flag-5'>同創(chuàng)</b><b class='flag-5'>國(guó)產(chǎn)</b><b class='flag-5'>FPGA</b>教程】【<b class='flag-5'>第二十</b>四章】AD9238<b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>傳輸</b>

    紫光同創(chuàng)國(guó)產(chǎn)FPGA教程】【第二十五章】AD7606以太網(wǎng)傳輸

    練習(xí)使用ADC的以太網(wǎng)傳輸,實(shí)驗(yàn)中使用的ADC模塊型號(hào)為AN706,最大采樣率200Khz,精度為16位。基于前面講到的以太網(wǎng)實(shí)驗(yàn),在本
    的頭像 發(fā)表于 04-09 09:20 ?1.6w次閱讀
    【<b class='flag-5'>紫光</b><b class='flag-5'>同創(chuàng)</b><b class='flag-5'>國(guó)產(chǎn)</b><b class='flag-5'>FPGA</b>教程】【<b class='flag-5'>第二十</b>五章】AD7606<b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>傳輸</b>

    紫光同創(chuàng)國(guó)產(chǎn)FPGA教程】【第二十六章】AD9280以太網(wǎng)傳輸

    實(shí)驗(yàn)練習(xí)使用ADC的以太網(wǎng)傳輸,實(shí)驗(yàn)中使用的ADDA模塊型號(hào)為AN108,ADC最大采樣率32Mhz,精度為8位?;谇懊嬷v到的以太網(wǎng)
    的頭像 發(fā)表于 04-13 10:26 ?1.8w次閱讀
    【<b class='flag-5'>紫光</b><b class='flag-5'>同創(chuàng)</b><b class='flag-5'>國(guó)產(chǎn)</b><b class='flag-5'>FPGA</b>教程】【<b class='flag-5'>第二十</b>六章】AD9280<b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>傳輸</b>

    科技賦能推動(dòng)綠色低碳發(fā)展 第二十三屆高交會(huì)“環(huán)保”亮點(diǎn)看這里!

    ? 洞察科技前沿發(fā)展趨勢(shì),讓創(chuàng)新成為產(chǎn)業(yè)發(fā)展的核心“基因”。一年一度以“科技”“創(chuàng)新”的熱詞,第二十三屆高交會(huì)開(kāi)展!作為觀察產(chǎn)業(yè)、行業(yè)發(fā)展的重要窗口,今年高交會(huì)以“推動(dòng)高質(zhì)量發(fā)展,構(gòu)建新發(fā)展格局
    發(fā)表于 12-29 18:22 ?1295次閱讀
    科技賦能推動(dòng)綠色低碳發(fā)展 <b class='flag-5'>第二十三</b>屆高交會(huì)“環(huán)?!绷咙c(diǎn)看這里!

    【正點(diǎn)原子FPGA連載】第二十五章設(shè)備樹(shù)下的LED驅(qū)動(dòng)實(shí)驗(yàn)-領(lǐng)航者ZYNQ之linux開(kāi)發(fā)指南

    原子公眾號(hào),獲取最新資料第二十五章設(shè)備樹(shù)下的LED驅(qū)動(dòng)實(shí)驗(yàn)上一章我們?cè)敿?xì)的講解了設(shè)備樹(shù)語(yǔ)法以及在驅(qū)動(dòng)開(kāi)發(fā)中常用的OF函數(shù),本章我們就開(kāi)始第一個(gè)基于設(shè)備樹(shù)的Linux驅(qū)動(dòng)實(shí)驗(yàn)。本章在第二十三章
    發(fā)表于 09-16 17:21

    RGB-LCD字符和圖片顯示實(shí)驗(yàn)

    獲取最新資料更新第二十三章RGB-LCD字符和圖片顯示實(shí)驗(yàn)我們?cè)凇癛GB-LCD彩條顯示實(shí)驗(yàn)”中成功的在正點(diǎn)原子的RGB-LCD
    發(fā)表于 12-07 07:33

    火力發(fā)電廠水汽分析方法 第二十三部分:化學(xué)耗氧量的測(cè)定(重鉻

    火力發(fā)電廠水汽分析方法 第二十三部分:化學(xué)耗氧量的測(cè)定(重鉻酸鉀法)DL/T 502.23—2006 Analytical methods of steam and water
    發(fā)表于 06-08 12:15 ?28次下載

    第二十三講 異步計(jì)數(shù)器

    第二十三講 異步計(jì)數(shù)器 概述一、計(jì)數(shù)器:用以統(tǒng)計(jì)輸入計(jì)數(shù)脈沖CP個(gè)數(shù)的電路。計(jì)數(shù)器的“?!保ㄓ肕表示): 二、 計(jì)數(shù)器的分類(lèi)1.按計(jì)數(shù)進(jìn)制分2.按計(jì)數(shù)
    發(fā)表于 03-30 16:27 ?1.3w次閱讀
    <b class='flag-5'>第二十三</b>講 異步計(jì)數(shù)器

    模擬電路網(wǎng)絡(luò)課件 第二十三節(jié):乙類(lèi)雙電源互補(bǔ)對(duì)稱(chēng)功率放大電路

    模擬電路網(wǎng)絡(luò)課件 第二十三節(jié):乙類(lèi)雙電源互補(bǔ)對(duì)稱(chēng)功率放大電路 5.2.1 電路的組成
    發(fā)表于 09-17 08:56 ?2191次閱讀

    2017中國(guó)西部微波射頻技術(shù)研討會(huì)暨第二十三屆國(guó)際電子測(cè)試測(cè)量研討會(huì)

    2017中國(guó)西部微波射頻技術(shù)研討會(huì)暨第二十三屆國(guó)際電子測(cè)試測(cè)量研討會(huì)
    發(fā)表于 07-05 15:12 ?1145次閱讀

    【正點(diǎn)原子FPGA連載】第二十三章RGB-LCD字符和圖片顯示實(shí)驗(yàn) -摘自【正點(diǎn)原子】新起點(diǎn)之FPGA開(kāi)發(fā)指南_V2.1

    【正點(diǎn)原子FPGA連載】第二十三章RGB-LCD字符和圖片顯示實(shí)驗(yàn) -摘自【正點(diǎn)原子】新起點(diǎn)之FPGA開(kāi)發(fā)指南_V2.1
    發(fā)表于 11-24 14:36 ?13次下載
    【正點(diǎn)原子<b class='flag-5'>FPGA</b>連載】<b class='flag-5'>第二十三章</b>RGB-LCD字符和圖片顯示<b class='flag-5'>實(shí)驗(yàn)</b> -摘自【正點(diǎn)原子】新起點(diǎn)之<b class='flag-5'>FPGA</b>開(kāi)發(fā)指南_V2.1

    烽火通信光纖技術(shù)獲“第二十三屆中國(guó)專(zhuān)利獎(jiǎng)”銀獎(jiǎng)

    近日,烽火通信低衰減小彎曲光纖技術(shù),榮獲“第二十三屆中國(guó)專(zhuān)利獎(jiǎng)”銀獎(jiǎng)。在我國(guó)信息網(wǎng)絡(luò)大容量傳輸“主血管”的基礎(chǔ)上,該項(xiàng)技術(shù)深入千家萬(wàn)戶(hù),構(gòu)建了具有豐富毛細(xì)血管的立體信息高速公路網(wǎng)絡(luò)。
    的頭像 發(fā)表于 05-05 16:42 ?1529次閱讀

    峰岹科技獲第二十三屆中國(guó)專(zhuān)利優(yōu)秀獎(jiǎng)

    ★NEWS★近日,中國(guó)專(zhuān)利獎(jiǎng)評(píng)審辦公室發(fā)布《第二十三屆中國(guó)專(zhuān)利獎(jiǎng)評(píng)審結(jié)果》,峰岹科技(深圳)股份有限公司的“一種單相交流永磁電動(dòng)機(jī)的無(wú)傳感器動(dòng)態(tài)驅(qū)動(dòng)方法及系統(tǒng)”發(fā)明專(zhuān)利榮獲中國(guó)專(zhuān)利優(yōu)秀獎(jiǎng),這是峰岹
    的頭像 發(fā)表于 04-28 11:28 ?693次閱讀
    峰岹科技獲<b class='flag-5'>第二十三</b>屆中國(guó)專(zhuān)利優(yōu)秀獎(jiǎng)

    中國(guó)電子科技集團(tuán)公司第二十三研究所選購(gòu)我司炭黑含量測(cè)試儀

    子科技集團(tuán)科技有限公司。經(jīng)過(guò)近60年的發(fā)展,現(xiàn)已成為我國(guó)電傳輸、光傳輸、光傳感技術(shù)的引領(lǐng)者,國(guó)內(nèi)海洋信息裝備領(lǐng)域的引領(lǐng)者。中國(guó)電子科技集團(tuán)公司第二十三研究所選購(gòu)我司HS-TH-350
    的頭像 發(fā)表于 05-17 16:30 ?644次閱讀
    中國(guó)電子科技集團(tuán)公司<b class='flag-5'>第二十三</b>研究所選購(gòu)我司炭黑含量測(cè)試儀