本原創(chuàng)教程由芯驛電子科技(上海)有限公司(ALINX)創(chuàng)作,版權歸本公司所有,如需轉載,需授權并注明出處(http://www.alinx.com)。
適用于板卡型號:
PGL22G
1. 簡介
本實驗將實現(xiàn)FPGA芯片和PC之間進行千兆以太網數(shù)據(jù)通信, 通信協(xié)議采用Ethernet UDP通信協(xié)議。 FPGA通過RGMII總線和開發(fā)板上的Gigabit PHY芯片通信, Gigabit PHY芯片把數(shù)據(jù)通過網線發(fā)給PC,程序中實現(xiàn)了ARP,UDP,PING功能,此外還實現(xiàn)了100/1000M自適應。
2. 硬件介紹
在開發(fā)板上通過1片RTL8211EG以太網PHY芯片為用戶提供網絡通信服務。以太網PHY芯片是連接到Pango FPGA的IO接口上。芯片支持10/100/1000 Mbps網絡傳輸速率,通過RGMII接口跟FPGA進行數(shù)據(jù)通信。RTL8211EG支持MDI/MDX自適應,各種速度自適應,Master/Slave自適應,支持MDIO總線進行PHY的寄存器管理。當網口Link到千兆以太網時, FPGA通過RGMII總線和PHY芯片進行數(shù)據(jù)通信,當網口Link到百兆以太網時, FPGA通過MII總線和PHY芯片進行數(shù)據(jù)通信。另外FPGA可以通過MDI/MDIO管理接口來配置或讀取PHY芯片內部的寄存器。在千兆的RGMII通信模式下(以U8為例), 發(fā)送數(shù)據(jù)時,發(fā)送時鐘為125Mhz的E_GTXC信號, 數(shù)據(jù)為E_TXD[3:0], 數(shù)據(jù)有效信號為E_TXEN, E_TXC信號連接但沒有使用; 接收數(shù)據(jù)時,接收時鐘為125Mhz的E_RXC信號, 數(shù)據(jù)為E_RXC[3:0], 數(shù)據(jù)有效信號為E_RXDV。關于詳細的管腳說明和RGMII/MII的通信時序,請大家參考RTL8211EG的芯片手冊。
硬件電路設計如下:
開發(fā)板網絡部分電路
關于詳細的管腳說明和RGMII的通信時序,請大家參考相關芯片手冊。
3. 以太網幀
3.1 以太網幀格式
下圖為以太網的幀格式:
前導碼(Preamble):8字節(jié),連續(xù)7個8’h55加1個8’hd5,表示一個幀的開始,用于雙方設備數(shù)據(jù)的同步。
目的MAC地址:6字節(jié),存放目的設備的物理地址,即MAC地址
源MAC地址:6字節(jié),存放發(fā)送端設備的物理地址
類型:2字節(jié),用于指定協(xié)議類型,常用的有0800表示IP協(xié)議,0806表示ARP協(xié)議,8035
表示RARP協(xié)議
數(shù)據(jù):46到1500字節(jié),最少46字節(jié),不足需要補全46字節(jié),例如IP協(xié)議層就包含在數(shù)據(jù)
部分,包括其IP頭及數(shù)據(jù)。
FCS:幀尾,4字節(jié),稱為幀校驗序列,采用32位CRC校驗,對目的MAC地址字段到數(shù)據(jù)字
段進行校驗。
進一步擴展,以UDP協(xié)議為例,可以看到其結構如下,除了以太網首部的14字節(jié),數(shù)據(jù)部分包含IP首部,UDP首部,應用數(shù)據(jù)共46~1500字節(jié)。
3.2 ARP數(shù)據(jù)報格式
ARP地址解析協(xié)議,即ARP(Address Resolution Protocol),根據(jù)IP地址獲取物理地址。主機發(fā)送包含目的IP地址的ARP請求廣播(MAC地址為48’hff_ff_ff_ff_ff_ff)到網絡上的主機,并接收返回消息,以此確定目標的物理地址,收到返回消息后將IP地址和物理地址保存到緩存中,并保留一段時間,下次請求時直接查詢ARP緩存以節(jié)約資源。下圖為ARP數(shù)據(jù)報格式 。
幀類型:ARP幀類型為兩字節(jié)0806
硬件類型:指鏈路層網絡類型,1為以太網
協(xié)議類型:指要轉換的地址類型,采用0x0800 IP類型,之后的硬件地址長度和協(xié)議地址長度分別對應6和4
OP字段中1表示ARP請求,2表示ARP應答
例如:|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請求。
|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應答。
3.3 IP 數(shù)據(jù)報格式
因為UDP協(xié)議包只是IP包中的一種, 所以我們來介紹一下IP包的數(shù)據(jù)格式。下圖為IP分組的報文頭格式,報文頭的前20個字節(jié)是固定的,后面的可變
版本:占 4 位,指 IP 協(xié)議的版本目前的 IP 協(xié)議版本號為 4 (即 IPv4)
首部長度:占4位,可表示的最大數(shù)值是15個單位(一個單位為 4 字節(jié))因此IP 的首部長度的最大值是 60 字節(jié)
區(qū)分服務:占8位,用來獲得更好的服務,在舊標準中叫做服務類型,但實際上一直未被使用過.1998 年這個字段改名為區(qū)分服務.只有在使用區(qū)分服務(DiffServ)時,這個字段才起作用.一般的情況下都不使用這個字段
總長度:占16位,指首部和數(shù)據(jù)之和的長度,單位為字節(jié),因此數(shù)據(jù)報的最大長度為 65535 字節(jié).總長度必須不超過最大傳送單元 MTU
標識:占16位,它是一個計數(shù)器,用來產生數(shù)據(jù)報的標識
標志(flag):
占3位,目前只有前兩位有意義
MF
標志字段的最低位是 MF (More Fragment)
MF=1 表示后面“還有分片”。MF=0 表示最后一個分片
DF
標志字段中間的一位是 DF (Don't Fragment)
只有當 DF=0 時才允許分片
片偏移:占12位,指較長的分組在分片后某片在原分組中的相對位置.片偏移以 8 個字節(jié)為偏移單位
生存時間:占8位,記為TTL (Time To Live) 數(shù)據(jù)報在網絡中可通過的路由器數(shù)的最大值,TTL 字段是由發(fā)送端初始設置一個 8 bit字段.推薦的初始值由分配數(shù)字 RFC 指定,當前值為 64.發(fā)送 ICMP 回顯應答時經常把 TTL 設為最大值 255
協(xié)議:占8位,指出此數(shù)據(jù)報攜帶的數(shù)據(jù)使用何種協(xié)議以便目的主機的IP層將數(shù)據(jù)部分上交給哪個處理過程, 1表示為 ICMP 協(xié)議, 2表示為 IGMP 協(xié)議, 6表示為 TCP 協(xié)議, 17表示為 UDP 協(xié)議
首部檢驗和:占16位,只檢驗數(shù)據(jù)報的首部不檢驗數(shù)據(jù)部分,采用二進制反碼求和,即將16位數(shù)據(jù)相加后,再將進位與低16位相加,直到進位為0,最后將16位取反。
源地址和目的地址:都各占4 字節(jié),分別記錄源地址和目的地址
3.4 UDP協(xié)議
UDP是User Datagram Protocol(用戶數(shù)據(jù)報協(xié)議)的英文縮寫。UDP只提供一種基本的、低延遲的被稱為數(shù)據(jù)報的通訊。所謂數(shù)據(jù)報,就是一種自帶尋址信息,從發(fā)送端走到接收端的數(shù)據(jù)包。UDP協(xié)議經常用于圖像傳輸、網絡監(jiān)控數(shù)據(jù)交換等數(shù)據(jù)傳輸速度要求比較高的場合。
UDP協(xié)議的報頭格式:
UDP報頭由4個域組成,其中每個域各占用2個字節(jié),具體如下:
① UDP源端口號
② 目標端口號
③ 數(shù)據(jù)報長度
④ 校驗和
UDP協(xié)議使用端口號為不同的應用保留其各自的數(shù)據(jù)傳輸通道。數(shù)據(jù)發(fā)送一方將UDP數(shù)據(jù)報通過源端口發(fā)送出去,而數(shù)據(jù)接收一方則通過目標端口接收數(shù)據(jù)。
數(shù)據(jù)報的長度是指包括報頭和數(shù)據(jù)部分在內的總字節(jié)數(shù)。因為報頭的長度是固定的,所以該域主要被用來計算可變長度的數(shù)據(jù)部分(又稱為數(shù)據(jù)負載)。數(shù)據(jù)報的最大長度根據(jù)操作環(huán)境的不同而各異。從理論上說,包含報頭在內的數(shù)據(jù)報的最大長度為65535字節(jié)。不過,一些實際應用往往會限制數(shù)據(jù)報的大小,有時會降低到8192字節(jié)。
UDP協(xié)議使用報頭中的校驗值來保證數(shù)據(jù)的安全。校驗值首先在數(shù)據(jù)發(fā)送方通過特殊的算法計算得出,在傳遞到接收方之后,還需要再重新計算。如果某個數(shù)據(jù)報在傳輸過程中被第三方篡改或者由于線路噪音等原因受到損壞,發(fā)送和接收方的校驗計算值將不會相符,由此UDP協(xié)議可以檢測是否出錯。雖然UDP提供有錯誤檢測,但檢測到錯誤時,錯誤校正,只是簡單地把損壞的消息段扔掉,或者給應用程序提供警告信息。
3.5 Ping功能
ICMP是TCP/IP協(xié)議族的一個IP層子協(xié)議,包含在IP數(shù)據(jù)報里,用于IP主機、路由器之間傳遞控制消息??刂葡⑹侵妇W絡是否連通,主機是否可達等功能。其中ping功能采用回送請求和回答報文,回送請求報文類型為8’h08,回答報文類型為8’h00。
4. SMI(MDC/MDIO)總線接口
串行管理接口(Serial Management Interface),也被稱作MII管理接口(MII Management Interface),包括MDC和MDIO兩條信號線。MDIO是一個PHY的管理接口,用來讀/寫PHY的寄存器,以控制PHY的行為或獲取PHY的狀態(tài),MDC為MDIO提供時鐘,由MAC端提供,在本實驗中也就是FPGA端。在RTL8211EG文檔里可以看到MDC的周期最小為400ns,也就是最大時鐘為2.5MHz。
4.1 SMI幀格式
如下圖,為SMI的讀寫幀格式:
名稱 | 說明 |
Preamble | 由MAC發(fā)送32個連續(xù)的邏輯“1”,同步于MDC信號,用于MAC與PHY之間的同步 |
ST | 幀開始位,固定為01 |
OP | 操作碼,10表示讀,01表示寫 |
PHYAD | PHY的地址,5 bits |
REGAD | 寄存器地址,5 bits |
TA | Turn Around,MDIO方向轉換,在寫狀態(tài)下,不需要轉換方向,值為10,在讀狀態(tài)下,MAC輸出端為高阻態(tài),在第二個周期,PHY將MDIO拉低 |
DATA | 共16bits數(shù)據(jù) |
IDLE | 空閑狀態(tài),此狀態(tài)下MDIO為高阻態(tài),由外部上拉電阻拉高 |
4.2 讀寫時序
1)讀時序
可以看到在Turn Around狀態(tài)下,第一個周期MDIO為高阻態(tài),第二個周期由PHY端拉低。
2)寫時序
為了保證能夠正確采集到數(shù)據(jù),在MDC上升沿之前就把數(shù)據(jù)準備好,在本實驗中為下降沿發(fā)送數(shù)據(jù),上升沿接收數(shù)據(jù)。
5. 程序設計
本實驗以千兆以太網RGMII通信為例來設計verilog程序,會先發(fā)送預設的UDP數(shù)據(jù)到網絡,每秒鐘發(fā)送一次,如果FPGA檢測網口發(fā)來的UDP的數(shù)據(jù)包,會把接收到的數(shù)據(jù)包存儲在FPGA內部的RAM中,再不斷的把RAM中的數(shù)據(jù)包通過網口發(fā)回到ethernet網絡。程序分為兩部分,分別為發(fā)送和接收,實現(xiàn)了ARP,UDP,Ping功能。以下為原理實現(xiàn)框圖:
5.1 發(fā)送部分
1)MAC層發(fā)送
發(fā)送部分中, mac_tx.v為MAC層發(fā)送模塊,首先在SEND_START狀態(tài),等待mac_tx_ready信號,如果有效,表明IP或ARP的數(shù)據(jù)已經準備好,可以開始發(fā)送。再進入發(fā)送前導碼狀態(tài),結束時發(fā)送mac_data_req,請求IP或ARP的數(shù)據(jù),之后進入發(fā)送數(shù)據(jù)狀態(tài),最后進入發(fā)送CRC狀態(tài)。在發(fā)送數(shù)據(jù)過程中,需要同時進行CRC校驗。
信號名稱 | 方向 | 寬度(bit) | 說明 |
clk | in | 1 | 系統(tǒng)時鐘 |
rst_n | in | 1 | 異步復位,低電平復位 |
crc_result | in | 32 | CRC32結果 |
crcen | out | 1 | CRC使能信號 |
crcre | out | 1 | CRC復位信號 |
crc_din | out | 8 | CRC模塊輸入信號 |
mac_frame_data | in | 8 | 從IP或ARP來的數(shù)據(jù) |
mac_tx_req | in | 1 | MAC的發(fā)送請求 |
mac_tx_ready | in | 1 | IP或ARP數(shù)據(jù)已準備好 |
mac_tx_end | in | 1 | IP或ARP數(shù)據(jù)已經傳輸完畢 |
mac_tx_data | out | 8 | 向PHY發(fā)送數(shù)據(jù) |
mac_send_end | out | 1 | MAC數(shù)據(jù)發(fā)送結束 |
mac_data_valid | out | 1 | MAC數(shù)據(jù)有效信號,即gmii_tx_en |
mac_data_req | out | 1 | MAC層向IP或ARP請求數(shù)據(jù) |
2)MAC發(fā)送模式
工程中的mac_tx_mode.v為發(fā)送模式選擇,根據(jù)發(fā)送模式是IP或ARP選擇相應的信號與數(shù)據(jù)。
信號名稱 | 方向 | 寬度(bit) | 說明 |
clk | in | 1 | 系統(tǒng)時鐘 |
rst_n | in | 1 | 異步復位,低電平復位 |
mac_send_end | in | 1 | MAC發(fā)送結束 |
arp_tx_req | in | 1 | ARP發(fā)送請求 |
arp_tx_ready | in | 1 | ARP數(shù)據(jù)已準備好 |
arp_tx_data | in | 8 | ARP數(shù)據(jù) |
arp_tx_end | in | 1 | ARP數(shù)據(jù)發(fā)送到MAC層結束 |
arp_tx_ack | in | 1 | ARP發(fā)送響應信號 |
ip_tx_req | in | 1 | IP發(fā)送請求 |
ip_tx_ready | in | 1 | IP數(shù)據(jù)已準備好 |
ip_tx_data | in | 8 | IP數(shù)據(jù) |
ip_tx_end | in | 1 | IP數(shù)據(jù)發(fā)送到MAC層結束 |
mac_tx_ready | out | 1 | MAC數(shù)據(jù)已準備好信號 |
ip_tx_ack | out | 1 | IP發(fā)送響應信號 |
mac_tx_ack | in | 1 | MAC發(fā)送響應信號 |
mac_tx_req | out | 1 | MAC發(fā)送請求 |
mac_tx_data | out | 8 | MAC發(fā)送數(shù)據(jù) |
mac_tx_end | out | 1 | MAC數(shù)據(jù)發(fā)送結束 |
3)ARP發(fā)送
發(fā)送部分中,arp_tx.v為ARP發(fā)送模塊, 在IDLE狀態(tài)下,等待ARP發(fā)送請求或ARP應答請求信號,之后進入請求或應答等待狀態(tài),并通知MAC層,數(shù)據(jù)已經準備好,等待mac_data_req信號,之后進入請求或應答數(shù)據(jù)發(fā)送狀態(tài)。由于數(shù)據(jù)不足46字節(jié),需要補全46字節(jié)發(fā)送。
信號名稱 | 方向 | 寬度(bit) | 說明 |
clk | in | 1 | 系統(tǒng)時鐘 |
rst_n | in | 1 | 異步復位,低電平復位 |
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層請求數(shù)據(jù)信號 |
arp_request_req | in | 1 | ARP請求的請求信號 |
arp_reply_ack | out | 1 | ARP回復的應答信號 |
arp_reply_req | in | 1 | ARP回復的請求信號 |
arp_rec_source_ip_addr | in | 32 | ARP接收的源IP地址,回復時放到目的IP地址 |
arp_rec_source_mac_addr | in | 48 | ARP接收的源MAC地址,回復時放到目的MAC地址 |
mac_send_end | in | 1 | MAC發(fā)送結束 |
mac_tx_ack | in | 1 | MAC發(fā)送應答 |
arp_tx_ready | out | 1 | ARP數(shù)據(jù)準備好 |
arp_tx_data | out | 8 | ARP發(fā)送數(shù)據(jù) |
arp_tx_end | out | 1 | ARP數(shù)據(jù)發(fā)送結束 |
4)IP層發(fā)送
在發(fā)送部分,ip_tx.v為IP層發(fā)送模塊,在IDLE狀態(tài)下,如果ip_tx_req有效,也就是UDP或ICMP發(fā)送請求信號,進入等待發(fā)送數(shù)據(jù)長度狀態(tài),之后進入產生校驗和狀態(tài),校驗和是將IP首部所有數(shù)據(jù)以16位相加,最后將進位再與低16位相加,直到進入為0,再將低16位取反,得出校驗和結果。此程序中校驗和以樹型加法結構,并插入流水線,能有效降低加法部分的延遲,但缺點是會消耗較多邏輯資源。如下圖ABCD四個輸入,A與B相加,結果為E,C與D相加,結果為F,再將E與F相加,結果為G,在每個相加結果之后都有寄存器。
在生成校驗和之后,等待MAC層數(shù)據(jù)請求,開始發(fā)送數(shù)據(jù),并在即將結束發(fā)送IP首部后請求UDP或ICMP數(shù)據(jù)。等發(fā)送完,進入IDLE狀態(tài)。
信號名稱 | 方向 | 寬度(bit) | 說明 |
clk | in | 1 | 系統(tǒng)時鐘 |
rst_n | in | 1 | 異步復位,低電平復位 |
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 | 生存時間 |
ip_send_type | in | 8 | 上層協(xié)議號,如UDP,ICMP |
upper_layer_data | in | 8 | 從UDP或ICMP過來的數(shù)據(jù) |
upper_data_req | out | 1 | 向上層請求數(shù)據(jù) |
mac_tx_ack | in | 1 | MAC發(fā)送應答 |
mac_send_end | in | 1 | MAC發(fā)送結束信號 |
mac_data_req | in | 1 | MAC層請求數(shù)據(jù)信號 |
upper_tx_ready | in | 1 | 上層UDP或ICMP數(shù)據(jù)準備好 |
ip_tx_req | in | 1 | 發(fā)送請求,從上層過來 |
ip_send_data_length | in | 16 | 發(fā)送數(shù)據(jù)總長度 |
ip_tx_ack | out | 產生IP發(fā)送應答 | |
ip_tx_busy | out | P發(fā)送忙信號 | |
ip_tx_ready | out | 1 | IP數(shù)據(jù)已準備好 |
ip_tx_data | out | 8 | IP數(shù)據(jù) |
ip_tx_end | out | 1 | IP數(shù)據(jù)發(fā)送到MAC層結束 |
5)IP發(fā)送模式
工程中的ip_tx_mode.v為發(fā)送模式選擇,根據(jù)發(fā)送模式是UDP或ICMP選擇相應的信號與數(shù)據(jù)。
信號名稱 | 方向 | 寬度(bit) | 說明 |
clk | in | 1 | 系統(tǒng)時鐘 |
rst_n | in | 1 | 異步復位,低電平復位 |
mac_send_end | in | 1 | MAC數(shù)據(jù)發(fā)送結束 |
udp_tx_req | in | UDP發(fā)送請求 | |
udp_tx_ready | in | 1 | UDP數(shù)據(jù)準備好 |
udp_tx_data | in | 8 | UDP發(fā)送數(shù)據(jù) |
udp_send_data_length | in | 16 | UDP發(fā)送數(shù)據(jù)長度 |
udp_tx_ack | out | 1 | 輸出UDP發(fā)送應答 |
icmp_tx_req | in | 1 | ICMP發(fā)送請求 |
icmp_tx_ready | in | 1 | ICMP數(shù)據(jù)準備好 |
icmp_tx_data | in | 8 | ICMP發(fā)送數(shù)據(jù) |
icmp_send_data_length | in | 16 | ICMP發(fā)送數(shù)據(jù)長度 |
icmp_tx_ack | out | 1 | ICMP發(fā)送應答 |
ip_tx_ack | in | 1 | IP發(fā)送應答 |
ip_tx_req | in | 1 | IP發(fā)送請求 |
ip_tx_ready | out | 1 | IP數(shù)據(jù)已準備好 |
ip_tx_data | out | 8 | IP數(shù)據(jù) |
ip_send_type | out | 8 | 上層協(xié)議號,如UDP,ICMP |
ip_send_data_length | out | 16 | 發(fā)送數(shù)據(jù)總長度 |
6)UDP發(fā)送
發(fā)送部分中,udp_tx.v為UDP發(fā)送模塊,第一步將數(shù)據(jù)寫入UDP發(fā)送RAM,同時計算校驗和,第二步將RAM中數(shù)據(jù)發(fā)送出去。UDP校驗和與IP校驗和計算方法一致。在計算時需要將偽首部加上,偽首部包括目的IP地址,源IP地址,網絡類型,UDP數(shù)據(jù)長度。
信號名稱 | 方向 | 寬度(bit) | 說明 |
clk | in | 1 | 系統(tǒng)時鐘 |
rst_n | in | 1 | 異步復位,低電平復位 |
source_ip_addr | in | 32 | 發(fā)送的源IP地址 |
destination_ip_addr | in | 32 | 發(fā)送的目的IP地址 |
udp_send_source_port | in | 16 | 源端口號 |
udp_send_destination_port | in | 16 | 目的端口號 |
udp_send_data_length | in | 16 | UDP發(fā)送數(shù)據(jù)長度,用戶需給出其值 |
ram_wr_data | in | 8 | 寫UDP的RAM數(shù)據(jù) |
ram_wr_en | in | 1 | 寫RAM使能 |
udp_ram_data_req | out | 1 | 請求寫RAM數(shù)據(jù) |
mac_send_end | in | 1 | MAC發(fā)送結束信號 |
udp_tx_req | in | 1 | UDP發(fā)送請求 |
ip_tx_req | out | 1 | IP發(fā)送請求 |
ip_tx_ack | in | 1 | Ip應答 |
udp_data_req | in | 1 | IP層請求數(shù)據(jù) |
udp_tx_ready | out | 1 | UDP數(shù)據(jù)準備好 |
udp_tx_data | out | 8 | UDP數(shù)據(jù) |
udp_tx_end | out | 1 | UDP發(fā)送結束(未使用) |
almost_full | out | 1 | Fifo接近滿標志 |
5.2 接收部分
1) MAC層接收
在接收部分,其中mac_rx.v為mac層接收文件,首先在IDLE狀態(tài)下需要判斷rx_dv信號是否為高,在REC_PREAMBLE前導碼狀態(tài)下,接收前導碼。之后進入接收MAC頭部狀態(tài),即目的MAC地址,源MAC地址,類型,將它們緩存起來,并在此狀態(tài)判斷前導碼是否正確,錯誤則進入REC_ERROR錯誤狀態(tài),在REC_IDENTIFY狀態(tài)判斷類型是IP(8’h0800)或ARP(8’h0806)。然后進入接收數(shù)據(jù)狀態(tài),將數(shù)據(jù)傳送到IP或ARP模塊,等待IP或ARP數(shù)據(jù)接收完畢,再接收CRC數(shù)據(jù)。并在接收數(shù)據(jù)的過程中對接收的數(shù)據(jù)進行CRC處理,將結果與接收到的CRC數(shù)據(jù)進行對比,判斷數(shù)據(jù)是否接收正確,正確則結束,錯誤則進入ERROR狀態(tài)。
信號名稱 | 方向 | 寬度(bit) | 說明 |
clk | in | 1 | 系統(tǒng)時鐘 |
rst_n | in | 1 | 異步復位,低電平復位 |
crc_result | in | 32 | CRC32結果 |
crcen | out | 1 | CRC使能信號 |
crcre | out | 1 | CRC復位信號 |
crc_din | out | 8 | CRC模塊輸入信號 |
rx_dv | in | 1 | 從PHY層過來的rx_dv信號 |
mac_rx_datain | in | 8 | 從PHY層接收的數(shù)據(jù) |
checksum_err | in | 1 | IP層校驗和錯誤 |
ip_rx_end | in | 1 | IP層接收結束 |
arp_rx_end | in | 1 | ARP層接收結束 |
ip_rx_req | out | 1 | 請求IP層接收 |
arp_rx_req | out | 1 | 請求ARP接收 |
mac_rx_dataout | out | 8 | MAC層接收數(shù)據(jù)輸出給IP或ARP |
mac_rec_error | out | 1 | MAC層接收錯誤 |
mac_rx_destination_mac_addr | out | 48 | MAC接收的目的IP地址 |
mac_rx_source_mac_addr | out | 48 | MAC接收的源IP地址 |
2) ARP接收
工程中的arp_rx.v為ARP接收模塊,實現(xiàn)ARP數(shù)據(jù)接收,在IDLE狀態(tài)下,接收到從MAC層發(fā)來的arp_rx_req信號,進入ARP接收狀態(tài),在此狀態(tài)下,提取出目的MAC地址,源MAC地址,目的IP地址,源IP地址,并判斷操作碼OP是請求還是應答。如果是請求,則判斷接收到的目的IP地址是否為本機地址,如果是,發(fā)送應答請求信號arp_reply_req,如果不是,則忽略。如果OP是應答,則判斷接收到的目的IP地址及目的MAC地址是否與本機一致,如果是,則拉高arp_found信號,表明接收到了對方的地址。并將對方的MAC地址及IP地址存入ARP緩存中。
信號名稱 | 方向 | 寬度(bit) | 說明 |
clk | in | 1 | 系統(tǒng)時鐘 |
rst_n | in | 1 | 異步復位,低電平復位 |
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接收請求 |
arp_rx_end | out | 1 | ARP接收完成 |
arp_reply_ack | in | 1 | ARP回復應答 |
arp_reply_req | out | 1 | ARP回復請求 |
arp_rec_source_ip_addr | in | 32 | ARP接收的源IP地址 |
arp_rec_source_mac_addr | in | 48 | ARP接收的源MAC地址 |
arp_found | out | 1 | ARP接收到請求應答正確 |
3) IP層接收模塊
在工程中,ip_rx為IP層接收模塊,實現(xiàn)IP層的數(shù)據(jù)接收,信息提取,并進行校驗和檢查。首先在IDLE狀態(tài)下,判斷從MAC層發(fā)過來的ip_rx_req信號,進入接收IP首部狀態(tài),先在REC_HEADER0提取出首部長度及IP總長度,進入REC_HEADER1狀態(tài),在此狀態(tài)提取出目的IP地址,源IP地址,協(xié)議類型,根據(jù)協(xié)議類型發(fā)送udp_rx_req或icmp_rx_req。在接收首部的同時進行校驗和的檢查,將首部接收的所有數(shù)據(jù)相加,存入32位寄存器,再將高16位與低16位相加,直到高16位為0 ,再將低16位取反,判斷其是否為0,如果是0,則檢驗正確,否則錯誤,進入IDLE狀態(tài),丟棄此幀數(shù)據(jù),等待下次接收。
信號名稱 | 方向 | 寬度(bit) | 說明 |
clk | in | 1 | 系統(tǒng)時鐘 |
rst_n | in | 1 | 異步復位,低電平復位 |
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接收請求信號 |
mac_rx_destination_mac_addr | in | 48 | MAC層接收的目的MAC地址 |
udp_rx_req | out | 1 | UDP接收請求信號 |
icmp_rx_req | out | 1 | ICMP接收請求信號 |
ip_addr_check_error | out | 1 | 地址檢查錯誤信號 |
upper_layer_data_length | out | 16 | 上層協(xié)議的數(shù)據(jù)長度 |
ip_total_data_length | out | 16 | 數(shù)據(jù)總長度 |
net_protocol | out | 8 | 網絡協(xié)議號 |
ip_rec_source_addr | out | 32 | IP層接收的源IP地址 |
ip_rec_destination_addr | out | 32 | IP層接收的目的IP地址 |
ip_rx_end | out | 1 | IP層接收結束 |
ip_checksum_error | out | 1 | IP層校驗和檢查錯誤信號 |
4) UDP接收
在工程中,udp_rx.v為UDP接收模塊,在此模塊首先接收UDP首部,再接收數(shù)據(jù)部分,并將數(shù)據(jù)部分存入RAM中,在接收的同時進行UDP校驗和檢查,如果UDP數(shù)據(jù)是奇數(shù)個字節(jié),在計算校驗和時,在最后一個字節(jié)后加上8’h00,并進行校驗和計算。校驗方法與IP校驗和一樣,如果校驗正確,將拉高udp_rec_data_valid信號,表明接收的UDP數(shù)據(jù)有效,否則無效,等待下次接收。
信號名稱 | 方向 | 寬度(bit) | 說明 |
clk | in | 1 | 系統(tǒng)時鐘 |
rst_n | in | 1 | 異步復位,低電平復位 |
udp_rx_data | in | 8 | UDP接收數(shù)據(jù) |
udp_rx_req | in | 1 | UDP接收請求 |
mac_rec_error | in | 1 | MAC層接收錯誤 |
net_protocol | in | 8 | 網絡協(xié)議號 |
ip_rec_source_addr | in | 32 | IP層接收的源IP地址 |
ip_rec_destination_addr | in | 32 | IP層接收的目的IP地址 |
ip_checksum_error | in | 1 | IP層校驗和檢查錯誤信號 |
ip_addr_check_error | in | 1 | 地址檢查錯誤信號 |
upper_layer_data_length | in | 16 | 上層協(xié)議的數(shù)據(jù)長度 |
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ù)長度 |
udp_rec_data_valid | out | 1 | UDP接收數(shù)據(jù)有效 |
5.3 SMI接口
1)SMI讀寫控制模塊
smi_read_write.v文件用于SMI接口的讀寫控制,在IDLE狀態(tài)下根據(jù)寫請求或讀請求到相應的狀態(tài),再根據(jù)SMI時序實現(xiàn)MDC和MDIO的控制。
信號名稱 | 方向 | 寬度(bit) | 說明 |
clk | in | 1 | 系統(tǒng)時鐘 |
rst_n | in | 1 | 異步復位,低電平復位 |
mdc | out | 1 | MDC時鐘 |
mdio | inout | 1 | MDIO數(shù)據(jù) |
phy_addr | in | 5 | PHY地址 |
reg_addr | in | 5 | 寄存器地址 |
write_req | in | 1 | 寫請求 |
write_data | in | 16 | 寫數(shù)據(jù) |
read_req | in | 1 | 讀請求 |
read_data | out | 16 | 讀數(shù)據(jù) |
data_valid | out | 1 | 數(shù)據(jù)有效 |
done | out | 1 | 讀或寫結束 |
2)SMI配置模塊
smi_config.v文件讀取寄存器0x11的bit10和bit[15:14]來判斷以太網是否已經連接和當前的以太網速度,默認狀態(tài)下,PHY芯片是自動協(xié)商速度,根據(jù)對方的速度做匹配。bit 10為1則link成功,否則失敗,bit[15:14]為00則是10M,01為100M,10或11為1000M,根據(jù)不同的速度點亮LED燈,沒有l(wèi)ink都不亮,10M亮一個燈,100M亮兩個燈,1000M亮三個燈。
信號名稱 | 方向 | 寬度(bit) | 說明 |
clk | in | 1 | 系統(tǒng)時鐘 |
rst_n | in | 1 | 異步復位,低電平復位 |
mdc | out | 1 | MDC時鐘 |
mdio | inout | 1 | MDIO數(shù)據(jù) |
speed | out | 2 | 速度 00:10M; 01:100M; 10:1000M |
link | out | 1 | 寄存器地址 |
led | out | 4 | 寫請求 |
5.4 10/100/1000M仲裁
由于10/100M傳輸數(shù)據(jù)時是單邊沿采集數(shù)據(jù),因此一個周期傳輸4bit數(shù)據(jù),而RGMII為雙邊沿采集數(shù)據(jù),所以要進行數(shù)據(jù)的轉換,如發(fā)送時,要將一周其8bit數(shù)據(jù)轉成一周期4bit數(shù)據(jù),因此要設置數(shù)據(jù)緩存,讀數(shù)據(jù)速率為寫數(shù)據(jù)的一半。
1)TX buffer
gmii_tx_buffer.v將要發(fā)送的8bit緩存到eth_data_fifo中,同時將數(shù)據(jù)長度緩存到len_fifo中,在狀態(tài)機中判斷長度FIFO中的數(shù)據(jù)是否大于0,是則表明已經緩存了數(shù)據(jù),之后進入讀FIFO數(shù)據(jù)狀態(tài),每兩個周期讀一次數(shù)據(jù),此功能不好理解,最好用signaltap抓取信號幫助理解。
信號名稱 | 方向 | 寬度(bit) | 說明 |
clk | in | 1 | 系統(tǒng)時鐘 |
rst_n | in | 1 | 異步復位,低電平復位 |
eth_10_100m_en | in | 1 | 10/100M使能信號 |
link | in | 1 | Link信號 |
gmii_tx_en | in | 1 | 內部的gmii發(fā)送使能 |
gmii_txd | in | 8 | 內部的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ù)據(jù)長度緩存到len_fifo中,在狀態(tài)機中判斷長度FIFO中的數(shù)據(jù)是否大于0,是則表明已經緩存了數(shù)據(jù),之后進入讀FIFO數(shù)據(jù)狀態(tài),每兩個周期讀一次數(shù)據(jù),最好用signaltap抓取信號幫助理解。
信號名稱 | 方向 | 寬度(bit) | 說明 |
clk | in | 1 | 系統(tǒng)時鐘 |
rst_n | in | 1 | 異步復位,低電平復位 |
eth_10_100m_en | in | 1 | 100M使能信號 |
eth_10m_en | in | 1 | 10M使能信號 |
link | in | 1 | Link信號 |
gmii_rx_dv | in | 1 | 外部的gmii接收有效 |
gmii_rxd | in | 8 | 外部的gmii接收數(shù)據(jù) |
e10_100_rx_dv | out | 1 | 10/100M接收有效信號 |
e10_100_rxd | out | 8 | 10/100M接收數(shù)據(jù) |
3)仲裁
gmii_arbi.v用于三種速度的仲裁,同時設定了發(fā)送的間隔都為1S。
信號名稱 | 方向 | 寬度(bit) | 說明 |
clk | in | 1 | 系統(tǒng)時鐘 |
rst_n | in | 1 | 異步復位,低電平復位 |
speed | in | 2 | 以太網速度 |
link | in | 1 | Link信號 |
gmii_rx_dv | in | 1 | 外部的gmii接收有效 |
gmii_rxd | in | 8 | 外部的gmii接收數(shù)據(jù) |
gmii_tx_en | in | 1 | 內部的gmii發(fā)送使能 |
gmii_txd | out | 8 | 內部的gmii發(fā)送數(shù)據(jù) |
pack_total_len | out | 32 | 延遲數(shù)值,每種速度都設置為1S |
e_rst_n | out | 1 | 復位MAC信號 |
e_rx_dv | out | 1 | 仲裁后接收有效信號 |
e_rxd | out | 8 | 仲裁后接收有效數(shù)據(jù) |
e_tx_en | out | 1 | 仲裁后發(fā)送使能信號 |
e_txd | out | 8 | 仲裁后發(fā)送數(shù)據(jù)信號 |
5.5 其他部分
1)ICMP應答
在工程中,icmp_reply.v實現(xiàn)ping功能,首先接收其他設備發(fā)過來的icmp數(shù)據(jù),判斷類型是否是回送請求(ECHO REQUEST),如果是,將數(shù)據(jù)存入RAM,并計算校驗和,判斷校驗和是否正確,如果正確則進入發(fā)送狀態(tài),將數(shù)據(jù)發(fā)送出去。
信號名稱 | 方向 | 寬度(bit) | 說明 |
clk | in | 1 | 系統(tǒng)時鐘 |
rst_n | in | 1 | 異步復位,低電平復位 |
mac_send_end | in | 1 | Mac發(fā)送結束信號 |
ip_tx_ack | in | 1 | IP發(fā)送應答 |
icmp_rx_data | in | 8 | ICMP接收數(shù)據(jù) |
icmp_rx_req | in | 1 | ICMP接收請求 |
icmp_rev_error | in | 1 | 接收錯誤信號 |
upper_layer_data_length | in | 16 | 上層協(xié)議長度 |
icmp_data_req | in | 1 | 發(fā)送請求ICMP數(shù)據(jù) |
icmp_tx_ready | out | 1 | ICMP發(fā)送準備好 |
icmp_tx_data | out | 8 | ICMP發(fā)送數(shù)據(jù) |
icmp_tx_end | out | 1 | ICMP發(fā)送結束 |
icmp_tx_req | out | 1 | ICMP發(fā)送請求 |
2)ARP緩存
在工程中,arp_cache.v為arp緩存模塊,將接收到的其他設備IP地址和MAC地址緩存,在發(fā)送數(shù)據(jù)之前,查詢目的地址是否存在,如果不存在,則向目的地址發(fā)送ARP請求,等待應答。在設計文件中,只做了一個緩存空間,如果有需要,可擴展。
信號名稱 | 方向 | 寬度(bit) | 說明 |
clk | in | 1 | 系統(tǒng)時鐘 |
rst_n | in | 1 | 異步復位,低電平復位 |
arp_found | in | 1 | ARP接收到回復正確 |
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 | 目的地址對應的MAC地址不存在 |
3)CRC校驗模塊(crc.v)
一個IP數(shù)據(jù)包的CRC32校驗是在目標MAC 地址開始計算的,一直計算到一個包的最后一個數(shù)據(jù)為止。以太網的CRC32的verilog的算法和多項式可以在以下網站中直接生成:
http://www.easics.com/webtools/crctool
4)以太網測試模塊(mac_test.v)
測試模塊實現(xiàn)數(shù)據(jù)流的控制,首先在按下按鍵后發(fā)送ARP請求信號,直到對方回應,進入發(fā)送UDP數(shù)據(jù)狀態(tài),如果在WAIT狀態(tài)時發(fā)現(xiàn)UDP接收數(shù)據(jù)有效,則將接收的數(shù)據(jù)發(fā)送出去。循環(huán)1秒發(fā)送,在每次發(fā)送前需要檢查目的IP地址是否能在ARP緩存里找到,如果沒有,則發(fā)送ARP請求。
信號名稱 | 方向 | 寬度(bit) | 說明 |
clk_50m | in | 1 | 系統(tǒng)時鐘 |
rst_n | in | 1 | 異步復位,低電平復位 |
pack_total_len | in | 32 | 包長度 |
push_button | in | 1 | 按鍵信號 |
gmii_tx_clk | in | 1 | GMII發(fā)送時鐘 |
gmii_rx_clk | in | 1 | GMII接收時鐘 |
gmii_rx_dv | in | 1 | 接收數(shù)據(jù)有效信號 |
gmii_rxd | in | 8 | 接收數(shù)據(jù) |
gmii_tx_en | out | 1 | 發(fā)送數(shù)據(jù)有效信號 |
gmii_txd | out | 8 | 發(fā)送數(shù)據(jù) |
5)RGMII轉GMII模塊
util_gmii_to_rgmii.v文件是將RGMII與GMII轉換,提取出控制信號與數(shù)據(jù)信號。與PHY連接是RGMII接口。
GMII接口
RGMII接口
RGMII接口是GMII接口的簡化版,在時鐘的上升沿及下降沿都采樣數(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. 下載和試驗
6.1 準備工作
第一步:首先確認一下自己PC的網卡是否是千兆網卡,用戶可以點擊本地連接查看,再用五類+或者六類網線連接開發(fā)板的網口和PC的網口。
第二步:修改PC的IP地址為192.168.0.3。PC的IP Address需要和mac_test.v中設置一致,不然網絡調試助手會接收不到開發(fā)板發(fā)送的UDP數(shù)據(jù)包。
第三步:安裝Wireshark是為了方便用戶網絡通信的調試,安裝”\07_軟件工具及驅動\網絡調試工具\wireshark_cn”目錄下的網絡抓包工具Wireshark, 我們在實驗的時候可以用這工具來查看PC網口發(fā)送的數(shù)據(jù)和接收到的數(shù)據(jù)的詳細信息。
6.2 以太網通信測試
第一步:燒寫ethernet_test.bit文件到FPGA,(如果需固化到FLASH中燒寫ethernet_test.bin文件),等待兩三秒,看到三個LED燈亮,為千兆網卡,兩個燈亮為百兆網卡,如果都沒亮,需要檢查網口連接情況。
第二步:以管理員權限打開CMD窗口,輸入arp –a查看ARP綁定結果,可以看到開發(fā)板的IP地址和MAC地址已經緩存。
第三步:在CMD窗口中,輸入ping 192.168.0.2查看PC與開發(fā)板是否ping通。
第四步:打開“\07_軟件工具及驅動\網絡調試工具\NetAssist “目錄下的網絡調試助手并設置參數(shù)如下,再按連接按鈕(這里的本地的IP地址為PC的IP Address, 本地端口需要跟FPGA程序中的一致,為8080)。
這時網絡數(shù)據(jù)接收窗口會顯示FPGA發(fā)給PC的以太網數(shù)據(jù)包"HELLO ALINX HEIJIN"目標主機的IP地址需要和FPGA程序中的IP地址一致,目標端口號也需要和FPGA程序的一致(8080)。如下圖網絡顯示:
第五步:再在網絡調試助手的發(fā)送窗口發(fā)送一大串字符,在網絡的數(shù)據(jù)接收窗口我們可以看到從FPGA返回的數(shù)據(jù)也變成剛發(fā)送的字符串。
也可以發(fā)送較少字符,低于46字節(jié),F(xiàn)PGA程序會自動補充至46字節(jié),如下圖:
第六步:這一步對用戶來講是可選的,用戶如果想查看更多數(shù)據(jù)包傳輸?shù)男畔?,可以使用網絡抓包工具Wireshark來查看PC的網卡接收和發(fā)送的網絡數(shù)據(jù),打開安裝好的wireshark抓包工具,點擊菜單抓包->網絡接口。
在彈出的抓包接口窗口選擇PC的千兆網卡,按開始按鈕開始抓包。
在wireshark抓包窗口我們可以看到開發(fā)板(192.168.0.2)向PC網口(192.168.0.2)發(fā)來的數(shù)據(jù)包,這里會顯示數(shù)據(jù)包的目標MAC, 源MAC,IP包頭和UDP包等信息, 如下圖開發(fā)板抓包窗口顯示:
6.3 以太網速度測試
我們可以通過抓包工具wireshark測量以太網部分的數(shù)據(jù)發(fā)送的速度,因為千兆以太網理想模式網絡的速度可以達到1Gbps,但實際因為每個數(shù)據(jù)包中有包頭,CRC等非數(shù)據(jù)字符,而且每包之間有空隙,一般千兆以太網的數(shù)據(jù)傳輸速度最高在950Mbps左右。傳輸是上下對稱傳輸,就是說上行和下行都能達到950Mbps左右。在這里,因為抓包wireshark只能統(tǒng)計接收的數(shù)據(jù)包,而不會發(fā)送數(shù)據(jù),所以這里只是測試FPGA發(fā)給電腦的輸送數(shù)據(jù)的速度。
第一步:修改程序,修改工程中mac_test.v中的代碼,如下圖所示
把上圖中的紅色標的”//”去掉,如下:
第二步:編譯綜合完成后下載測試程序,下載完成后這時FPGA網絡會進行動態(tài)綁定,PC機的IP設置請參照5.2章節(jié)(如已設置忽略)。
打開wireshark,點擊菜單“抓包”->"抓包參數(shù)選擇”。在抓包選項中設置緩沖大小為1000megabyte,在10000個數(shù)據(jù)包之后停止抓包。(這里需要注意:如果不設置的話wireshark因為抓的包太多,處理不了導致軟件崩潰)
按開始后抓包,等待接收到10000個包后停止抓包,用時0.087932秒。
我們可以看到每個數(shù)據(jù)包的內容都是00->FF的數(shù)據(jù),總共是3個00->FF,1個00->e7的數(shù)據(jù)??偣彩?000個有效數(shù)據(jù)。
這里我們看到軟件用了0.087932秒收到了10000個數(shù)據(jù)包,每個數(shù)據(jù)包里含有的有效數(shù)據(jù)是1000個字節(jié)(8bit)。所以我們可以算出以太網的傳輸速度為:
傳輸速度 = 1000* 10000 * 8 / 0.087932 = 910Mbps。
這里提示一下,網絡傳輸?shù)乃俣雀L也有關系,數(shù)據(jù)包長越長,效率就越高,傳輸數(shù)據(jù)的速度會變高;數(shù)據(jù)包越短,效率就越低,傳輸數(shù)據(jù)的速度就慢。這個道理我想大家應該明白的吧!
下面是1000000包的時間是8.799832秒,自己可以按照上面的方面算下速度,速度是非常穩(wěn)定的。
6.4 以太網100M/1000M測試
改變電腦的網卡速度,首先打開網絡連接,找到本地網卡,右鍵點擊屬性彈出如下窗口,再點擊配置。
在彈出的窗口中找到鏈接速度,選擇100Mbps全雙工,點擊確定,等待幾秒鐘,會發(fā)現(xiàn)LED燈會發(fā)生改變,之后再按前面的操作步驟進行測試。
到這里為止,我們的以太網數(shù)據(jù)通信就全部結束了,要實現(xiàn)以太網的數(shù)據(jù)通信首先需要理解以太網數(shù)據(jù)包的格式和通信協(xié)議,還需要了解MAC和PHY之間的GMII,RGMII,MII,RMII接口的時序。千兆以太網的數(shù)據(jù)傳輸速度非常快,而且是全雙工傳輸,而且UDP通信的數(shù)據(jù)速度可以達到900Mbps以上,非常適合高速數(shù)據(jù)傳輸?shù)膱龊希热?a href="http://www.delux-kingway.cn/v/" target="_blank">視頻圖像傳輸,高速數(shù)據(jù)采集等等。
-
FPGA
+關注
關注
1630文章
21803瀏覽量
606440 -
以太網
+關注
關注
40文章
5465瀏覽量
172844 -
PHY
+關注
關注
2文章
305瀏覽量
51886 -
RGMII
+關注
關注
0文章
28瀏覽量
12224 -
紫光同創(chuàng)
+關注
關注
5文章
89瀏覽量
27579
發(fā)布評論請先 登錄
相關推薦
【紫光同創(chuàng)國產FPGA教程】【第二十七章】千兆以太網視頻傳輸實驗
![【<b class='flag-5'>紫光</b><b class='flag-5'>同創(chuàng)</b><b class='flag-5'>國產</b><b class='flag-5'>FPGA</b>教程】【<b class='flag-5'>第二十</b>七章】<b class='flag-5'>千兆</b><b class='flag-5'>以太網視頻傳輸</b><b class='flag-5'>實驗</b>](https://file.elecfans.com/web1/M00/EA/17/o4YBAGBz92WAL5M_AAAZW5sCUJk498.png)
【紫光同創(chuàng)國產FPGA教程】【第二十四章】AD9238以太網傳輸
![【<b class='flag-5'>紫光</b><b class='flag-5'>同創(chuàng)</b><b class='flag-5'>國產</b><b class='flag-5'>FPGA</b>教程】【<b class='flag-5'>第二十</b>四章】AD9238<b class='flag-5'>以太網</b><b class='flag-5'>傳輸</b>](https://file.elecfans.com//web1/M00/E9/D0/pIYBAGBuWM-ADyAOAABSb9ku1jY348.jpg)
【紫光同創(chuàng)國產FPGA教程】【第二十五章】AD7606以太網傳輸
![【<b class='flag-5'>紫光</b><b class='flag-5'>同創(chuàng)</b><b class='flag-5'>國產</b><b class='flag-5'>FPGA</b>教程】【<b class='flag-5'>第二十</b>五章】AD7606<b class='flag-5'>以太網</b><b class='flag-5'>傳輸</b>](https://file.elecfans.com/web1/M00/E9/B7/o4YBAGBvxOWALSbqAAAR3t-kUIc983.png)
【紫光同創(chuàng)國產FPGA教程】【第二十六章】AD9280以太網傳輸
![【<b class='flag-5'>紫光</b><b class='flag-5'>同創(chuàng)</b><b class='flag-5'>國產</b><b class='flag-5'>FPGA</b>教程】【<b class='flag-5'>第二十</b>六章】AD9280<b class='flag-5'>以太網</b><b class='flag-5'>傳輸</b>](https://file.elecfans.com/web1/M00/EA/49/o4YBAGB1RPiAJoiLAAAQ9U6ykc8220.png)
科技賦能推動綠色低碳發(fā)展 第二十三屆高交會“環(huán)保”亮點看這里!
![科技賦能推動綠色低碳發(fā)展 <b class='flag-5'>第二十三</b>屆高交會“環(huán)?!绷咙c看這里!](https://file.elecfans.com/web2/M00/2A/CB/pYYBAGHMOCSASyGCAAminPs_k94143.png)
【正點原子FPGA連載】第二十五章設備樹下的LED驅動實驗-領航者ZYNQ之linux開發(fā)指南
RGB-LCD字符和圖片顯示實驗
火力發(fā)電廠水汽分析方法 第二十三部分:化學耗氧量的測定(重鉻
第二十三講 異步計數(shù)器
![<b class='flag-5'>第二十三</b>講 異步計數(shù)器](https://file1.elecfans.com//web2/M00/A4/AE/wKgZomUMNUKAQczOAAAM_AEmfRU869.gif)
模擬電路網絡課件 第二十三節(jié):乙類雙電源互補對稱功率放大電路
【正點原子FPGA連載】第二十三章RGB-LCD字符和圖片顯示實驗 -摘自【正點原子】新起點之FPGA開發(fā)指南_V2.1
![【正點原子<b class='flag-5'>FPGA</b>連載】<b class='flag-5'>第二十三章</b>RGB-LCD字符和圖片顯示<b class='flag-5'>實驗</b> -摘自【正點原子】新起點之<b class='flag-5'>FPGA</b>開發(fā)指南_V2.1](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
烽火通信光纖技術獲“第二十三屆中國專利獎”銀獎
峰岹科技獲第二十三屆中國專利優(yōu)秀獎
![峰岹科技獲<b class='flag-5'>第二十三</b>屆中國專利優(yōu)秀獎](https://file.elecfans.com/web2/M00/3F/CE/pYYBAGJqCcyAIY9YAAAQijnCaKk256.jpg)
中國電子科技集團公司第二十三研究所選購我司炭黑含量測試儀
![中國電子科技集團公司<b class='flag-5'>第二十三</b>研究所選購我司炭黑含量測試儀](https://file1.elecfans.com/web2/M00/82/DB/wKgaomRkgTCAUtRHAABKQpKieSE844.png)
評論