<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【紫光同創國產FPGA教程】【第二十三章】千兆以太網傳輸實驗

FPGA技術專欄 ? 來源:芯驛電子科技 ? 作者:芯驛電子科技 ? 2021-04-07 10:38 ? 次閱讀

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

適用于板卡型號:

PGL22G

1. 簡介

本實驗將實現FPGA芯片和PC之間進行千兆以太網數據通信, 通信協議采用Ethernet UDP通信協議。 FPGA通過RGMII總線和開發板上的Gigabit PHY芯片通信, Gigabit PHY芯片把數據通過網線發給PC,程序中實現了ARP,UDP,PING功能,此外還實現了100/1000M自適應。

2. 硬件介紹

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

硬件電路設計如下:

o4YBAGBlMhSAdkeeAAEx3kHVg_M159.jpg開發板網絡部分電路

關于詳細的管腳說明和RGMII的通信時序,請大家參考相關芯片手冊。

3. 以太網幀

3.1 以太網幀格式

下圖為以太網的幀格式:

pIYBAGBlMhWAWUKQAABgT8nqI9k327.jpg

前導碼(Preamble):8字節,連續7個8’h55加1個8’hd5,表示一個幀的開始,用于雙方設備數據的同步。

目的MAC地址:6字節,存放目的設備的物理地址,即MAC地址

源MAC地址:6字節,存放發送端設備的物理地址

類型:2字節,用于指定協議類型,常用的有0800表示IP協議,0806表示ARP協議,8035

表示RARP協議

數據:46到1500字節,最少46字節,不足需要補全46字節,例如IP協議層就包含在數據

部分,包括其IP頭及數據。

FCS:幀尾,4字節,稱為幀校驗序列,采用32位CRC校驗,對目的MAC地址字段到數據字

段進行校驗。

進一步擴展,以UDP協議為例,可以看到其結構如下,除了以太網首部的14字節,數據部分包含IP首部,UDP首部,應用數據共46~1500字節。

o4YBAGBlMhWACH7dAACIUIJVI9I373.jpg

3.2 ARP數據報格式

ARP地址解析協議,即ARP(Address Resolution Protocol),根據IP地址獲取物理地址。主機發送包含目的IP地址的ARP請求廣播(MAC地址為48’hff_ff_ff_ff_ff_ff)到網絡上的主機,并接收返回消息,以此確定目標的物理地址,收到返回消息后將IP地址和物理地址保存到緩存中,并保留一段時間,下次請求時直接查詢ARP緩存以節約資源。下圖為ARP數據報格式 。

pIYBAGBlMhaAY0EuAACl1hzsDP8060.jpg

幀類型:ARP幀類型為兩字節0806

硬件類型:指鏈路層網絡類型,1為以太網

協議類型:指要轉換的地址類型,采用0x0800 IP類型,之后的硬件地址長度和協議地址長度分別對應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地址發送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地址發送ARP應答。

3.3 IP 數據報格式

因為UDP協議包只是IP包中的一種, 所以我們來介紹一下IP包的數據格式。下圖為IP分組的報文頭格式,報文頭的前20個字節是固定的,后面的可變

o4YBAGBlMhaADwWXAAAjg-tHO1s419.jpg

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

首部長度:占4位,可表示的最大數值是15個單位(一個單位為 4 字節)因此IP 的首部長度的最大值是 60 字節

區分服務:占8位,用來獲得更好的服務,在舊標準中叫做服務類型,但實際上一直未被使用過.1998 年這個字段改名為區分服務.只有在使用區分服務(DiffServ)時,這個字段才起作用.一般的情況下都不使用這個字段

總長度:占16位,指首部和數據之和的長度,單位為字節,因此數據報的最大長度為 65535 字節.總長度必須不超過最大傳送單元 MTU

標識:占16位,它是一個計數器,用來產生數據報的標識

標志(flag):

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

MF

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

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

DF

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

只有當 DF=0 時才允許分片

片偏移:占12位,指較長的分組在分片后某片在原分組中的相對位置.片偏移以 8 個字節為偏移單位

生存時間:占8位,記為TTL (Time To Live) 數據報在網絡中可通過的路由器數的最大值,TTL 字段是由發送端初始設置一個 8 bit字段.推薦的初始值由分配數字 RFC 指定,當前值為 64.發送 ICMP 回顯應答時經常把 TTL 設為最大值 255

協議:占8位,指出此數據報攜帶的數據使用何種協議以便目的主機的IP層將數據部分上交給哪個處理過程, 1表示為 ICMP 協議, 2表示為 IGMP 協議, 6表示為 TCP 協議, 17表示為 UDP 協議

首部檢驗和:占16位,只檢驗數據報的首部不檢驗數據部分,采用二進制反碼求和,即將16位數據相加后,再將進位與低16位相加,直到進位為0,最后將16位取反。

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

3.4 UDP協議

UDP是User Datagram Protocol(用戶數據報協議)的英文縮寫。UDP只提供一種基本的、低延遲的被稱為數據報的通訊。所謂數據報,就是一種自帶尋址信息,從發送端走到接收端的數據包。UDP協議經常用于圖像傳輸、網絡監控數據交換等數據傳輸速度要求比較高的場合。

UDP協議的報頭格式:

UDP報頭由4個域組成,其中每個域各占用2個字節,具體如下:

pIYBAGBlMheAOiSCAABRARXgZ_4197.jpg

① UDP源端口

② 目標端口號

③ 數據報長度

④ 校驗和

UDP協議使用端口號為不同的應用保留其各自的數據傳輸通道。數據發送一方將UDP數據報通過源端口發送出去,而數據接收一方則通過目標端口接收數據。

數據報的長度是指包括報頭和數據部分在內的總字節數。因為報頭的長度是固定的,所以該域主要被用來計算可變長度的數據部分(又稱為數據負載)。數據報的最大長度根據操作環境的不同而各異。從理論上說,包含報頭在內的數據報的最大長度為65535字節。不過,一些實際應用往往會限制數據報的大小,有時會降低到8192字節。

UDP協議使用報頭中的校驗值來保證數據的安全。校驗值首先在數據發送方通過特殊的算法計算得出,在傳遞到接收方之后,還需要再重新計算。如果某個數據報在傳輸過程中被第三方篡改或者由于線路噪音等原因受到損壞,發送和接收方的校驗計算值將不會相符,由此UDP協議可以檢測是否出錯。雖然UDP提供有錯誤檢測,但檢測到錯誤時,錯誤校正,只是簡單地把損壞的消息段扔掉,或者給應用程序提供警告信息。

3.5 Ping功能

ICMP是TCP/IP協議族的一個IP層子協議,包含在IP數據報里,用于IP主機、路由器之間傳遞控制消息??刂葡⑹侵妇W絡是否連通,主機是否可達等功能。其中ping功能采用回送請求和回答報文,回送請求報文類型為8’h08,回答報文類型為8’h00。

o4YBAGBlMhiAR8bMAABWnawg_vk318.jpgpIYBAGBlMhiALuXuAAAbpCwBr-I864.jpg

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

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

o4YBAGBlMhmANvTJAADcDABzP-w589.jpg

4.1 SMI幀格式

如下圖,為SMI的讀寫幀格式:

pIYBAGBlMhmAIu5MAACCioL4-wc299.jpg

名稱 說明
Preamble 由MAC發送32個連續的邏輯“1”,同步于MDC信號,用于MAC與PHY之間的同步
ST 幀開始位,固定為01
OP 操作碼,10表示讀,01表示寫
PHYAD PHY的地址,5 bits
REGAD 寄存器地址,5 bits
TA Turn Around,MDIO方向轉換,在寫狀態下,不需要轉換方向,值為10,在讀狀態下,MAC輸出端為高阻態,在第二個周期,PHY將MDIO拉低
DATA 共16bits數據
IDLE 空閑狀態,此狀態下MDIO為高阻態,由外部上拉電阻拉高

4.2 讀寫時序

1)讀時序

o4YBAGBlMhqAXOYHAACLdDNc_Wg525.jpg

可以看到在Turn Around狀態下,第一個周期MDIO為高阻態,第二個周期由PHY端拉低。

2)寫時序

pIYBAGBlMhuAZPpyAACYIivE3-Q890.jpg

為了保證能夠正確采集到數據,在MDC上升沿之前就把數據準備好,在本實驗中為下降沿發送數據,上升沿接收數據。

5. 程序設計

本實驗以千兆以太網RGMII通信為例來設計verilog程序,會先發送預設的UDP數據到網絡,每秒鐘發送一次,如果FPGA檢測網口發來的UDP的數據包,會把接收到的數據包存儲在FPGA內部的RAM中,再不斷的把RAM中的數據包通過網口發回到ethernet網絡。程序分為兩部分,分別為發送和接收,實現了ARP,UDP,Ping功能。以下為原理實現框圖:

o4YBAGBlMhuANgQmAAAuPhPPNXs605.jpg

5.1 發送部分

1)MAC層發送

發送部分中, mac_tx.v為MAC層發送模塊,首先在SEND_START狀態,等待mac_tx_ready信號,如果有效,表明IP或ARP的數據已經準備好,可以開始發送。再進入發送前導碼狀態,結束時發送mac_data_req,請求IP或ARP的數據,之后進入發送數據狀態,最后進入發送CRC狀態。在發送數據過程中,需要同時進行CRC校驗。

pIYBAGBlMhyAbXSQAAAxFcxNiDY858.jpg

信號名稱 方向 寬度(bit) 說明
clk in 1 系統時鐘
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來的數據
mac_tx_req in 1 MAC的發送請求
mac_tx_ready in 1 IP或ARP數據已準備好
mac_tx_end in 1 IP或ARP數據已經傳輸完畢
mac_tx_data out 8 向PHY發送數據
mac_send_end out 1 MAC數據發送結束
mac_data_valid out 1 MAC數據有效信號,即gmii_tx_en
mac_data_req out 1 MAC層向IP或ARP請求數據

2)MAC發送模式

工程中的mac_tx_mode.v為發送模式選擇,根據發送模式是IP或ARP選擇相應的信號與數據。

信號名稱 方向 寬度(bit) 說明
clk in 1 系統時鐘
rst_n in 1 異步復位,低電平復位
mac_send_end in 1 MAC發送結束
arp_tx_req in 1 ARP發送請求
arp_tx_ready in 1 ARP數據已準備好
arp_tx_data in 8 ARP數據
arp_tx_end in 1 ARP數據發送到MAC層結束
arp_tx_ack in 1 ARP發送響應信號
ip_tx_req in 1 IP發送請求
ip_tx_ready in 1 IP數據已準備好
ip_tx_data in 8 IP數據
ip_tx_end in 1 IP數據發送到MAC層結束
mac_tx_ready out 1 MAC數據已準備好信號
ip_tx_ack out 1 IP發送響應信號
mac_tx_ack in 1 MAC發送響應信號
mac_tx_req out 1 MAC發送請求
mac_tx_data out 8 MAC發送數據
mac_tx_end out 1 MAC數據發送結束

3)ARP發送

發送部分中,arp_tx.v為ARP發送模塊, 在IDLE狀態下,等待ARP發送請求或ARP應答請求信號,之后進入請求或應答等待狀態,并通知MAC層,數據已經準備好,等待mac_data_req信號,之后進入請求或應答數據發送狀態。由于數據不足46字節,需要補全46字節發送。

o4YBAGBlMhyAHwemAAA7FNu4rnA642.jpg

信號名稱 方向 寬度(bit) 說明
clk in 1 系統時鐘
rst_n in 1 異步復位,低電平復位
destination_mac_addr in 48 發送的目的MAC地址
source_mac_addr in 48 發送的源MAC地址
source_ip_addr in 32 發送的源IP地址
destination_ip_addr in 32 發送的目的IP地址
mac_data_req in 1 MAC層請求數據信號
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發送結束
mac_tx_ack in 1 MAC發送應答
arp_tx_ready out 1 ARP數據準備好
arp_tx_data out 8 ARP發送數據
arp_tx_end out 1 ARP數據發送結束

4)IP層發送

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

pIYBAGBlMh2AFXPAAAAt_M5KRs4421.jpg

在生成校驗和之后,等待MAC層數據請求,開始發送數據,并在即將結束發送IP首部后請求UDP或ICMP數據。等發送完,進入IDLE狀態。

信號名稱 方向 寬度(bit) 說明
clk in 1 系統時鐘
rst_n in 1 異步復位,低電平復位
destination_mac_addr in 48 發送的目的MAC地址
source_mac_addr in 48 發送的源MAC地址
source_ip_addr in 32 發送的源IP地址
destination_ip_addr in 32 發送的目的IP地址
TTL in 8 生存時間
ip_send_type in 8 上層協議號,如UDP,ICMP
upper_layer_data in 8 從UDP或ICMP過來的數據
upper_data_req out 1 向上層請求數據
mac_tx_ack in 1 MAC發送應答
mac_send_end in 1 MAC發送結束信號
mac_data_req in 1 MAC層請求數據信號
upper_tx_ready in 1 上層UDP或ICMP數據準備好
ip_tx_req in 1 發送請求,從上層過來
ip_send_data_length in 16 發送數據總長度
ip_tx_ack out 產生IP發送應答
ip_tx_busy out P發送忙信號
ip_tx_ready out 1 IP數據已準備好
ip_tx_data out 8 IP數據
ip_tx_end out 1 IP數據發送到MAC層結束

5)IP發送模式

工程中的ip_tx_mode.v為發送模式選擇,根據發送模式是UDP或ICMP選擇相應的信號與數據。

信號名稱 方向 寬度(bit) 說明
clk in 1 系統時鐘
rst_n in 1 異步復位,低電平復位
mac_send_end in 1 MAC數據發送結束
udp_tx_req in UDP發送請求
udp_tx_ready in 1 UDP數據準備好
udp_tx_data in 8 UDP發送數據
udp_send_data_length in 16 UDP發送數據長度
udp_tx_ack out 1 輸出UDP發送應答
icmp_tx_req in 1 ICMP發送請求
icmp_tx_ready in 1 ICMP數據準備好
icmp_tx_data in 8 ICMP發送數據
icmp_send_data_length in 16 ICMP發送數據長度
icmp_tx_ack out 1 ICMP發送應答
ip_tx_ack in 1 IP發送應答
ip_tx_req in 1 IP發送請求
ip_tx_ready out 1 IP數據已準備好
ip_tx_data out 8 IP數據
ip_send_type out 8 上層協議號,如UDP,ICMP
ip_send_data_length out 16 發送數據總長度

6)UDP發送

發送部分中,udp_tx.v為UDP發送模塊,第一步將數據寫入UDP發送RAM,同時計算校驗和,第二步將RAM中數據發送出去。UDP校驗和與IP校驗和計算方法一致。在計算時需要將偽首部加上,偽首部包括目的IP地址,源IP地址,網絡類型,UDP數據長度。

信號名稱 方向 寬度(bit) 說明
clk in 1 系統時鐘
rst_n in 1 異步復位,低電平復位
source_ip_addr in 32 發送的源IP地址
destination_ip_addr in 32 發送的目的IP地址
udp_send_source_port in 16 源端口號
udp_send_destination_port in 16 目的端口號
udp_send_data_length in 16 UDP發送數據長度,用戶需給出其值
ram_wr_data in 8 寫UDP的RAM數據
ram_wr_en in 1 寫RAM使能
udp_ram_data_req out 1 請求寫RAM數據
mac_send_end in 1 MAC發送結束信號
udp_tx_req in 1 UDP發送請求
ip_tx_req out 1 IP發送請求
ip_tx_ack in 1 Ip應答
udp_data_req in 1 IP層請求數據
udp_tx_ready out 1 UDP數據準備好
udp_tx_data out 8 UDP數據
udp_tx_end out 1 UDP發送結束(未使用)
almost_full out 1 Fifo接近滿標志

5.2 接收部分

1) MAC層接收

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

pIYBAGBlMh2AH4iYAAAk6FACm-M211.jpg

信號名稱 方向 寬度(bit) 說明
clk in 1 系統時鐘
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層接收的數據
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層接收數據輸出給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接收模塊,實現ARP數據接收,在IDLE狀態下,接收到從MAC層發來的arp_rx_req信號,進入ARP接收狀態,在此狀態下,提取出目的MAC地址,源MAC地址,目的IP地址,源IP地址,并判斷操作碼OP是請求還是應答。如果是請求,則判斷接收到的目的IP地址是否為本機地址,如果是,發送應答請求信號arp_reply_req,如果不是,則忽略。如果OP是應答,則判斷接收到的目的IP地址及目的MAC地址是否與本機一致,如果是,則拉高arp_found信號,表明接收到了對方的地址。并將對方的MAC地址及IP地址存入ARP緩存中。

o4YBAGBlMh6AA5HQAAAYk5VqSAA109.jpg

信號名稱 方向 寬度(bit) 說明
clk in 1 系統時鐘
rst_n in 1 異步復位,低電平復位
local_ip_addr in 32 本地IP地址
local_mac_addr in 48 本地MAC地址
arp_rx_data in 8 ARP接收數據
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層接收模塊,實現IP層的數據接收,信息提取,并進行校驗和檢查。首先在IDLE狀態下,判斷從MAC層發過來的ip_rx_req信號,進入接收IP首部狀態,先在REC_HEADER0提取出首部長度及IP總長度,進入REC_HEADER1狀態,在此狀態提取出目的IP地址,源IP地址,協議類型,根據協議類型發送udp_rx_req或icmp_rx_req。在接收首部的同時進行校驗和的檢查,將首部接收的所有數據相加,存入32位寄存器,再將高16位與低16位相加,直到高16位為0 ,再將低16位取反,判斷其是否為0,如果是0,則檢驗正確,否則錯誤,進入IDLE狀態,丟棄此幀數據,等待下次接收。

信號名稱 方向 寬度(bit) 說明
clk in 1 系統時鐘
rst_n in 1 異步復位,低電平復位
local_ip_addr in 32 本地IP地址
local_mac_addr in 48 本地MAC地址
ip_rx_data in 8 從MAC層接收的數據
ip_rx_req in 1 MAC層發送的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 上層協議的數據長度
ip_total_data_length out 16 數據總長度
net_protocol out 8 網絡協議號
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首部,再接收數據部分,并將數據部分存入RAM中,在接收的同時進行UDP校驗和檢查,如果UDP數據是奇數個字節,在計算校驗和時,在最后一個字節后加上8’h00,并進行校驗和計算。校驗方法與IP校驗和一樣,如果校驗正確,將拉高udp_rec_data_valid信號,表明接收的UDP數據有效,否則無效,等待下次接收。

信號名稱 方向 寬度(bit) 說明
clk in 1 系統時鐘
rst_n in 1 異步復位,低電平復位
udp_rx_data in 8 UDP接收數據
udp_rx_req in 1 UDP接收請求
mac_rec_error in 1 MAC層接收錯誤
net_protocol in 8 網絡協議號
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 上層協議的數據長度
udp_rec_ram_rdata out 8 UDP接收RAM讀數據
udp_rec_ram_read_addr in 11 UDP接收RAM讀地址
udp_rec_data_length out 16 UDP接收數據長度
udp_rec_data_valid out 1 UDP接收數據有效

5.3 SMI接口

1)SMI讀寫控制模塊

smi_read_write.v文件用于SMI接口的讀寫控制,在IDLE狀態下根據寫請求或讀請求到相應的狀態,再根據SMI時序實現MDC和MDIO的控制。

信號名稱 方向 寬度(bit) 說明
clk in 1 系統時鐘
rst_n in 1 異步復位,低電平復位
mdc out 1 MDC時鐘
mdio inout 1 MDIO數據
phy_addr in 5 PHY地址
reg_addr in 5 寄存器地址
write_req in 1 寫請求
write_data in 16 寫數據
read_req in 1 讀請求
read_data out 16 讀數據
data_valid out 1 數據有效
done out 1 讀或寫結束

2)SMI配置模塊

smi_config.v文件讀取寄存器0x11的bit10和bit[15:14]來判斷以太網是否已經連接和當前的以太網速度,默認狀態下,PHY芯片是自動協商速度,根據對方的速度做匹配。bit 10為1則link成功,否則失敗,bit[15:14]為00則是10M,01為100M,10或11為1000M,根據不同的速度點亮LED燈,沒有link都不亮,10M亮一個燈,100M亮兩個燈,1000M亮三個燈。

信號名稱 方向 寬度(bit) 說明
clk in 1 系統時鐘
rst_n in 1 異步復位,低電平復位
mdc out 1 MDC時鐘
mdio inout 1 MDIO數據
speed out 2 速度 00:10M; 01:100M; 10:1000M
link out 1 寄存器地址
led out 4 寫請求

5.4 10/100/1000M仲裁

由于10/100M傳輸數據時是單邊沿采集數據,因此一個周期傳輸4bit數據,而RGMII為雙邊沿采集數據,所以要進行數據的轉換,如發送時,要將一周其8bit數據轉成一周期4bit數據,因此要設置數據緩存,讀數據速率為寫數據的一半。

1)TX buffer

gmii_tx_buffer.v將要發送的8bit緩存到eth_data_fifo中,同時將數據長度緩存到len_fifo中,在狀態機中判斷長度FIFO中的數據是否大于0,是則表明已經緩存了數據,之后進入讀FIFO數據狀態,每兩個周期讀一次數據,此功能不好理解,最好用signaltap抓取信號幫助理解。

信號名稱 方向 寬度(bit) 說明
clk in 1 系統時鐘
rst_n in 1 異步復位,低電平復位
eth_10_100m_en in 1 10/100M使能信號
link in 1 Link信號
gmii_tx_en in 1 內部的gmii發送使能
gmii_txd in 8 內部的gmii發送數據
e10_100_tx_en out 1 10/100M發送使能
e10_100_txd out 8 10/100M發送數據

2)RX buffer

gmii_rx_buffer.v將接收的10/100M數據緩存到eth_data_fifo中,同時將數據長度緩存到len_fifo中,在狀態機中判斷長度FIFO中的數據是否大于0,是則表明已經緩存了數據,之后進入讀FIFO數據狀態,每兩個周期讀一次數據,最好用signaltap抓取信號幫助理解。

信號名稱 方向 寬度(bit) 說明
clk in 1 系統時鐘
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接收數據
e10_100_rx_dv out 1 10/100M接收有效信號
e10_100_rxd out 8 10/100M接收數據

3)仲裁

gmii_arbi.v用于三種速度的仲裁,同時設定了發送的間隔都為1S。

信號名稱 方向 寬度(bit) 說明
clk in 1 系統時鐘
rst_n in 1 異步復位,低電平復位
speed in 2 以太網速度
link in 1 Link信號
gmii_rx_dv in 1 外部的gmii接收有效
gmii_rxd in 8 外部的gmii接收數據
gmii_tx_en in 1 內部的gmii發送使能
gmii_txd out 8 內部的gmii發送數據
pack_total_len out 32 延遲數值,每種速度都設置為1S
e_rst_n out 1 復位MAC信號
e_rx_dv out 1 仲裁后接收有效信號
e_rxd out 8 仲裁后接收有效數據
e_tx_en out 1 仲裁后發送使能信號
e_txd out 8 仲裁后發送數據信號

5.5 其他部分

1)ICMP應答

在工程中,icmp_reply.v實現ping功能,首先接收其他設備發過來的icmp數據,判斷類型是否是回送請求(ECHO REQUEST),如果是,將數據存入RAM,并計算校驗和,判斷校驗和是否正確,如果正確則進入發送狀態,將數據發送出去。

信號名稱 方向 寬度(bit) 說明
clk in 1 系統時鐘
rst_n in 1 異步復位,低電平復位
mac_send_end in 1 Mac發送結束信號
ip_tx_ack in 1 IP發送應答
icmp_rx_data in 8 ICMP接收數據
icmp_rx_req in 1 ICMP接收請求
icmp_rev_error in 1 接收錯誤信號
upper_layer_data_length in 16 上層協議長度
icmp_data_req in 1 發送請求ICMP數據
icmp_tx_ready out 1 ICMP發送準備好
icmp_tx_data out 8 ICMP發送數據
icmp_tx_end out 1 ICMP發送結束
icmp_tx_req out 1 ICMP發送請求

2)ARP緩存

在工程中,arp_cache.v為arp緩存模塊,將接收到的其他設備IP地址和MAC地址緩存,在發送數據之前,查詢目的地址是否存在,如果不存在,則向目的地址發送ARP請求,等待應答。在設計文件中,只做了一個緩存空間,如果有需要,可擴展。

信號名稱 方向 寬度(bit) 說明
clk in 1 系統時鐘
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數據包的CRC32校驗是在目標MAC 地址開始計算的,一直計算到一個包的最后一個數據為止。以太網的CRC32的verilog的算法和多項式可以在以下網站中直接生成:

asics.com/webtools/crc

pIYBAGBlMh6AQiLaAAFtegJnEeA663.jpg

4)以太網測試模塊(mac_test.v)

測試模塊實現數據流的控制,首先在按下按鍵后發送ARP請求信號,直到對方回應,進入發送UDP數據狀態,如果在WAIT狀態時發現UDP接收數據有效,則將接收的數據發送出去。循環1秒發送,在每次發送前需要檢查目的IP地址是否能在ARP緩存里找到,如果沒有,則發送ARP請求。

信號名稱 方向 寬度(bit) 說明
clk_50m in 1 系統時鐘
rst_n in 1 異步復位,低電平復位
pack_total_len in 32 包長度
push_button in 1 按鍵信號
gmii_tx_clk in 1 GMII發送時鐘
gmii_rx_clk in 1 GMII接收時鐘
gmii_rx_dv in 1 接收數據有效信號
gmii_rxd in 8 接收數據
gmii_tx_en out 1 發送數據有效信號
gmii_txd out 8 發送數據

5)RGMII轉GMII模塊

util_gmii_to_rgmii.v文件是將RGMII與GMII轉換,提取出控制信號與數據信號。與PHY連接是RGMII接口。

o4YBAGBlMh6AAnXCAAAKR9-gvPU304.jpg

GMII接口

pIYBAGBlMh-ALOQ7AAAMcsYg3VM593.jpg

RGMII接口

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

6. 下載和試驗

6.1 準備工作

第一步:首先確認一下自己PC的網卡是否是千兆網卡,用戶可以點擊本地連接查看,再用五類+或者六類網線連接開發板的網口和PC的網口。

第二步:修改PC的IP地址為192.168.0.3。PC的IP Address需要和mac_test.v中設置一致,不然網絡調試助手會接收不到開發板發送的UDP數據包。

o4YBAGBlMh-AfRD0AAAXvgccV84762.jpg

pIYBAGBlMiCALw1kAABu-Nz6EpI729.jpg

第三步:安裝Wireshark是為了方便用戶網絡通信的調試,安裝”\07_軟件工具及驅動\網絡調試工具\wireshark_cn”目錄下的網絡抓包工具Wireshark, 我們在實驗的時候可以用這工具來查看PC網口發送的數據和接收到的數據的詳細信息。

o4YBAGBlMiCAKfHEAAAOJCeSmz4188.jpg

6.2 以太網通信測試

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

第二步:以管理員權限打開CMD窗口,輸入arp –a查看ARP綁定結果,可以看到開發板的IP地址和MAC地址已經緩存。

pIYBAGBlMiGACKNKAABj2DB0VZc390.jpg

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

o4YBAGBlMiGACJ_OAABr-SlpS3c355.jpg

第四步:打開“\07_軟件工具及驅動\網絡調試工具\NetAssist “目錄下的網絡調試助手并設置參數如下,再按連接按鈕(這里的本地的IP地址為PC的IP Address, 本地端口需要跟FPGA程序中的一致,為8080)。

pIYBAGBlMiKAZBhrAACPIBBY4vk908.jpg

這時網絡數據接收窗口會顯示FPGA發給PC的以太網數據包"HELLO ALINX HEIJIN"目標主機的IP地址需要和FPGA程序中的IP地址一致,目標端口號也需要和FPGA程序的一致(8080)。如下圖網絡顯示:

o4YBAGBlMiOAczhcAACGROtUaMQ008.jpg

第五步:再在網絡調試助手的發送窗口發送一大串字符,在網絡的數據接收窗口我們可以看到從FPGA返回的數據也變成剛發送的字符串。

pIYBAGBlMiOAP9-CAACW-BtKYZM180.jpg

也可以發送較少字符,低于46字節,FPGA程序會自動補充至46字節,如下圖:

o4YBAGBlMiSAWZScAACRVyZUiN0487.jpg

第六步:這一步對用戶來講是可選的,用戶如果想查看更多數據包傳輸的信息,可以使用網絡抓包工具Wireshark來查看PC的網卡接收和發送的網絡數據,打開安裝好的wireshark抓包工具,點擊菜單抓包->網絡接口。

pIYBAGBlMiWAf-pKAAFo6P3UaWE929.jpg

在彈出的抓包接口窗口選擇PC的千兆網卡,按開始按鈕開始抓包。

o4YBAGBlMiWAM4ePAAB4gjcENGQ620.jpg

在wireshark抓包窗口我們可以看到開發板(192.168.0.2)向PC網口(192.168.0.2)發來的數據包,這里會顯示數據包的目標MAC, 源MAC,IP包頭和UDP包等信息, 如下圖開發板抓包窗口顯示:

pIYBAGBlMiaAO5dQAACgz8T3Akk537.jpg

6.3 以太網速度測試

我們可以通過抓包工具wireshark測量以太網部分的數據發送的速度,因為千兆以太網理想模式網絡的速度可以達到1Gbps,但實際因為每個數據包中有包頭,CRC等非數據字符,而且每包之間有空隙,一般千兆以太網的數據傳輸速度最高在950Mbps左右。傳輸是上下對稱傳輸,就是說上行和下行都能達到950Mbps左右。在這里,因為抓包wireshark只能統計接收的數據包,而不會發送數據,所以這里只是測試FPGA發給電腦的輸送數據的速度。

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

o4YBAGBlMieAWFkKAABYGexfxS0979.jpg

把上圖中的紅色標的”//”去掉,如下:

pIYBAGBlMieAZhH0AABHfsvKPCs503.jpg

第二步:編譯綜合完成后下載測試程序,下載完成后這時FPGA網絡會進行動態綁定,PC機的IP設置請參照5.2章節(如已設置忽略)。

打開wireshark,點擊菜單“抓包”->"抓包參數選擇”。在抓包選項中設置緩沖大小為1000megabyte,在10000個數據包之后停止抓包。(這里需要注意:如果不設置的話wireshark因為抓的包太多,處理不了導致軟件崩潰)

o4YBAGBlMiiAOgabAABmtBA7WrU693.jpg

按開始后抓包,等待接收到10000個包后停止抓包,用時0.087932秒。

pIYBAGBlMiiAKKNdAAIJd-zNBq0599.jpg

我們可以看到每個數據包的內容都是00->FF的數據,總共是3個00->FF,1個00->e7的數據??偣彩?000個有效數據。

o4YBAGBlMimAcx4cAAGqGdXNFh4559.jpg

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

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

這里提示一下,網絡傳輸的速度跟包長也有關系,數據包長越長,效率就越高,傳輸數據的速度會變高;數據包越短,效率就越低,傳輸數據的速度就慢。這個道理我想大家應該明白的吧!

下面是1000000包的時間是8.799832秒,自己可以按照上面的方面算下速度,速度是非常穩定的。

o4YBAGBlMimANtxnAAFZisWKtgY659.jpg

6.4 以太網100M/1000M測試

改變電腦的網卡速度,首先打開網絡連接,找到本地網卡,右鍵點擊屬性彈出如下窗口,再點擊配置。

pIYBAGBlMiqAJkMeAADzzxnuENE720.jpg

在彈出的窗口中找到鏈接速度,選擇100Mbps全雙工,點擊確定,等待幾秒鐘,會發現LED燈會發生改變,之后再按前面的操作步驟進行測試。

o4YBAGBlMiqABEjOAABpczDKxXQ646.jpg

到這里為止,我們的以太網數據通信就全部結束了,要實現以太網的數據通信首先需要理解以太網數據包的格式和通信協議,還需要了解MAC和PHY之間的GMII,RGMII,MII,RMII接口的時序。千兆以太網的數據傳輸速度非???,而且是全雙工傳輸,而且UDP通信的數據速度可以達到900Mbps以上,非常適合高速數據傳輸的場合,比如視頻圖像傳輸,高速數據采集等等。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1602

    文章

    21320

    瀏覽量

    593194
  • 以太網
    +關注

    關注

    40

    文章

    5076

    瀏覽量

    166234
  • PHY
    PHY
    +關注

    關注

    2

    文章

    264

    瀏覽量

    51005
  • RGMII
    +關注

    關注

    0

    文章

    22

    瀏覽量

    12040
  • 紫光同創
    +關注

    關注

    4

    文章

    68

    瀏覽量

    27252
收藏 人收藏

    評論

    相關推薦

    紫光同創國產FPGA教程】【第二十七章】千兆以太網視頻傳輸實驗

    簡介 本實驗將實現視頻圖像的以太網傳輸,也相當于用 FPGA 來實現網絡攝像頭的功能。這里采用黑金的 500 萬攝像頭 AN5642 模組,通過配置 OV5640 的寄存器實現 JP
    的頭像 發表于 04-12 10:29 ?1.3w次閱讀
    【<b class='flag-5'>紫光</b><b class='flag-5'>同創</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>

    紫光同創國產FPGA教程】【第二十四章】AD9238以太網傳輸

    使用ADC的以太網傳輸,實驗中使用的ADC模塊型號為AN9238,最大采樣率65Mhz,精度為12位?;谇懊嬷v到的以太網實驗,在本
    的頭像 發表于 04-08 09:13 ?9902次閱讀
    【<b class='flag-5'>紫光</b><b class='flag-5'>同創</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>

    紫光同創國產FPGA教程】【第二十五章】AD7606以太網傳輸

    練習使用ADC的以太網傳輸,實驗中使用的ADC模塊型號為AN706,最大采樣率200Khz,精度為16位?;谇懊嬷v到的以太網實驗,在本
    的頭像 發表于 04-09 09:20 ?1.5w次閱讀
    【<b class='flag-5'>紫光</b><b class='flag-5'>同創</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>

    紫光同創國產FPGA教程】【第二十六章】AD9280以太網傳輸

    實驗練習使用ADC的以太網傳輸,實驗中使用的ADDA模塊型號為AN108,ADC最大采樣率32Mhz,精度為8位?;谇懊嬷v到的以太網
    的頭像 發表于 04-13 10:26 ?1.7w次閱讀
    【<b class='flag-5'>紫光</b><b class='flag-5'>同創</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>

    【正點原子FPGA連載】第二十五章設備樹下的LED驅動實驗-領航者ZYNQ之linux開發指南

    原子公眾號,獲取最新資料第二十五章設備樹下的LED驅動實驗上一章我們詳細的講解了設備樹語法以及在驅動開發中常用的OF函數,本章我們就開始第一個基于設備樹的Linux驅動實驗。本章在第二十三章
    發表于 09-16 17:21

    RGB-LCD字符和圖片顯示實驗

    獲取最新資料更新第二十三章RGB-LCD字符和圖片顯示實驗我們在“RGB-LCD彩條顯示實驗”中成功的在正點原子的RGB-LCD
    發表于 12-07 07:33

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

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

    第二十三講 異步計數器

    第二十三講 異步計數器 概述一、計數器:用以統計輸入計數脈沖CP個數的電路。計數器的“?!保ㄓ肕表示): 二、 計數器的分類1.按計數進制分2.按計數
    發表于 03-30 16:27 ?9623次閱讀
    <b class='flag-5'>第二十三</b>講 異步計數器

    模擬電路網絡課件 第二十三節:乙類雙電源互補對稱功率放大電路

    模擬電路網絡課件 第二十三節:乙類雙電源互補對稱功率放大電路 5.2.1 電路的組成
    發表于 09-17 08:56 ?1864次閱讀

    2017中國西部微波射頻技術研討會暨第二十三屆國際電子測試測量研討會

    2017中國西部微波射頻技術研討會暨第二十三屆國際電子測試測量研討會
    發表于 07-05 15:12 ?897次閱讀

    【正點原子FPGA連載】第二十三章RGB-LCD字符和圖片顯示實驗 -摘自【正點原子】新起點之FPGA開發指南_V2.1

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

    烽火通信光纖技術獲“第二十三屆中國專利獎”銀獎

    近日,烽火通信低衰減小彎曲光纖技術,榮獲“第二十三屆中國專利獎”銀獎。在我國信息網絡大容量傳輸“主血管”的基礎上,該項技術深入千家萬戶,構建了具有豐富毛細血管的立體信息高速公路網絡。
    的頭像 發表于 05-05 16:42 ?1057次閱讀

    第二十三屆中國國際工業博覽會宣布延期舉行

    尊敬的各位朋友: 應官方通知,原定于2022年11月30日-12月4日在國家會展中心(上海)舉辦的第二十三屆中國國際工業博覽會將延期至2023年舉辦,我們會密切關注展會的相關動態,如有更新
    的頭像 發表于 11-16 08:15 ?567次閱讀

    中國電子科技集團公司第二十三研究所選購我司炭黑含量測試儀

    子科技集團科技有限公司。經過近60年的發展,現已成為我國電傳輸、光傳輸、光傳感技術的引領者,國內海洋信息裝備領域的引領者。中國電子科技集團公司第二十三研究所選購我司HS-TH-350
    的頭像 發表于 05-17 16:30 ?240次閱讀
    中國電子科技集團公司<b class='flag-5'>第二十三</b>研究所選購我司炭黑含量測試儀

    物通博聯邀您相約第二十三屆中國國際投資貿易洽談會

    第二十三屆中國國際投資貿易洽談會(以下簡稱投洽會)將于9月8日-11日在廈門舉辦,物通博聯非常榮幸地受邀參展。屆時物通博聯將向來自全球近100個國家和地區、近1000個客商團組、約8萬名客商展示我們
    的頭像 發表于 09-01 11:08 ?429次閱讀
    物通博聯邀您相約<b class='flag-5'>第二十三</b>屆中國國際投資貿易洽談會
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>