這篇文章将對以太網的學習過程進行簡單記錄和總結。
因為工程進度的原因,先采用xilinx自帶的IP的形式進行開發,參考PG047。
The LogiCORE™ IP 1G/2.5G Ethernet PCS/PMA or Serial Gigabit Media Independent Interface (SGMII) core provides a flexible solution for connection to an Ethernet Media Access Controller (MAC) or other custom logic.
It supports two standards: the 1000BASE-X and 2500BASE-X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) operation, as defined in the IEEE 802.3-2008 standard and the Gigabit Media Independent Interface (GMII) to Serial-GMII (SGMII) bridge or SGMII to GMII bridge, as defined in the Serial-GMII Specification V1.7 (CISCO SYSTEMS,
ENG-46158) [Ref 1].
Dynamic switching between 1000BASE-X and SGMII standards is also supported
1 首先掃盲
以太網晶片MAC和PHY的關系
https://www.cnblogs.com/pengdonglin137/p/3575691.html
1.1 以太網MAC是什麼?
MAC即Media Access Control,即媒體通路控制子層協定。
該協定位于OSI七層協定中資料鍊路層的下半部分,主要負責控制與連接配接實體層的實體媒體。
在發送資料的時候,MAC協定可以事先判斷是否可以發送資料,如果可以發送将給資料加上一些控制資訊,最終将資料以及控制資訊以規定的格式發送到實體層。
在接收資料的時候,MAC協定首先判斷輸入的資訊并是否發生傳輸錯誤,如果沒有錯誤,則去掉控制資訊發送至LLC層。
以太網資料鍊路層其實包含MAC(媒體通路控制)子層和LLC(邏輯鍊路控制)子層。一塊以太網卡MAC晶片的作用不但要實作MAC子層和LLC子層的功能,還要提供符合規範的PCI界面以實作和主機的資料交換。
MAC從PCI總線收到IP資料包(或者其他網絡層協定的資料包)後,将之拆分并重新打包成最大1518Byte,最小64Byte的幀。這個幀裡面包括了目标MAC位址、自己的源MAC位址和資料包裡面的協定類型(比如IP資料包的類型用80表示)。最後還有一個DWORD(4Byte)的CRC 碼。
可是目标的MAC位址是哪裡來的呢?
這牽扯到一個ARP協定(介乎于網絡層和資料鍊路層的一個協定)。第一次傳送某個目的IP位址的資料的時候,先會發出一個ARP包,其MAC的目标位址是廣播位址,裡面說到:”誰是xxx.xxx.xxx.xxx這個IP位址的主人?”因為是廣播包,這個區域網路的所有主機接收這個ARP請求。收到請求的主機将這個IP位址和自己的相比較,如果不相同就不予理會,如果相同就發出ARP響應包。這個IP位址的主機收到這個ARP請求包後回複的ARP響應裡說到:”我是這個IP位址的主人”。這個包裡面就包括了他的MAC位址。以後的給這個IP位址的幀的目标MAC 位址就被确定了。(其它的協定如IPX/SPX也有相應的協定完成這些操作)。
IP位址和MAC位址之間的關聯關系儲存在主機系統裡面,叫做ARP表,由驅動程式和作業系統完成。
在Microsoft的系統裡面可以用arp- a的指令檢視ARP表。收到資料幀的時候也是一樣,做完CRC以後,如果沒有CRC校驗錯誤,就把幀頭去掉,把資料包拿出來,通過标準的接口傳遞給驅動和上層的協定棧,最終正确的達到我們的應用程式。
還有一些控制幀,例如流控幀也需要MAC直接識别并執行相應的行為。
以太網MAC晶片的一端接計算機PCI總線,另外一端就接到PHY晶片上。它們之間是通過MII接口連結的。
1.2 以太網PHY是什麼?
PHY是實體接口收發器,它實作實體層。IEEE-802.3标準定義了以太網PHY。
包括MII/GMII(媒體獨立接口)子層,PCS(實體編碼)子層,PMA(實體媒體附加)子層,PMD(實體媒體相關)子層,MDI子層。它符合IEEE-802.3k中用于10BaseT(第14條)和 100BaseTX(第24條和第25條)的規範。
PHY在發送資料的時候,收到MAC過來的資料(對PHY來說,沒有幀的概念,對它來說,都是資料而不管什麼位址、資料還是CRC。對于 100BaseTX因為使用4B/5B編碼,每4bit就增加1bit的檢錯碼),然後把并行資料轉化為串行流資料,再按照實體層的編碼規則把資料編碼。 再變為模拟信号把資料送出去。收資料時的流程反之。
PHY還有個重要的功能就是實作CSMA/CD的部分功能。
它可以檢測到網絡上是否有資料在傳送,如果有資料在傳送中就等待,一旦檢測到網絡空閑,再等待一個随機時間後将送資料出去。如果兩個碰巧同時送出了資料,那樣必将造成沖突,這時候,沖突檢測機構可以檢測到沖突,然後各等待一個随機的時間重新發送資料。這個随機時間很有講究的,并不是一個常數,在不同的時刻計算出來的随機時間都是不同的,而且有多重算法來應付出現機率很低的同兩台主機之間的第二次沖突。
許多網友在接入Internt寬帶時,喜歡使用”搶線”強的網卡,就是因為不同的PHY碰撞後計算随機時間的方法設計上不同,使得有些網卡比較”占便宜”。不過,搶線隻是對廣播域的網絡而言的,對于交換網絡和ADSL這樣點到點連接配接到局端裝置的接入方式,沒什麼意義。而且”搶線”也隻是相對而言的,不會有質的變化。
現在交換機的普及使得交換網絡的普及,使得沖突域網絡少了很多,極大地提高了網絡的帶寬。但是如果用HUB,或者共享帶寬接入Internet的時候還是屬于沖突域網絡,有沖突碰撞的。交換機和HUB最大的差別就是:一個是建構點到點網絡的區域網路交換裝置,一個是建構沖突域網絡的區域網路互連裝置。
除此之外PHY還提供了和對端裝置連接配接的重要功能,并通過LED燈顯示出自己目前的連接配接的狀态和工作狀态讓我們知道。
當我們給網卡接入網線的時候,PHY不斷發出的脈沖信号檢測到對端有裝置,它們通過标準的”語言”交流,互相協商并确定連接配接速度、雙工模式、是否采用流控等。通常情況下,協商的結果是兩個裝置中能同時支援的最大速度和最好的雙工模式。這個技術被稱為Auto Negotiation或者NWAY,它們是一個意思–自動協商。
具體傳輸過程為:
發送資料時,網卡首先偵聽媒體上是否有載波(載波由電壓訓示),如果有,則認為其他站點正在傳送資訊,繼續偵聽媒體。一旦通信媒體在一定時間段内(稱為幀間縫隙IFG=9.6微秒)是安靜的,即沒有被其他站點占用,則開始進行幀資料發送,同時繼續偵聽通信媒體,以檢測沖突。在發送資料期間,如果檢測到沖突,則立即停止該次發送,并向媒體發送一個“阻塞”信号,告知其他站點已經發生沖突,進而丢棄那些可能一直在接收的受到損壞的幀資料,并等待一段随機時間(CSMA/CD确定等待時間的算法是二進制指數退避算法)。在等待一段随機時間後,再進行新的發送。如果重傳多次後(大于16 次)仍發生沖突,就放棄發送。接收時,網卡浏覽媒體上傳輸的每個幀,如果其長度小于64位元組,則認為是沖突碎片。如果接收到的幀不是沖突碎片且目的位址是本地位址,則對幀進行完整性校驗,如果幀長度大于1518位元組(稱為超長幀,可能由錯誤的LAN驅動程式或幹擾造成)或未能通過CRC校驗,則認為該幀發生了畸變。通過校驗的幀被認為是有效的,網卡将它接收下來進行本地處理。
1.3 SerDes 是什麼?
SerDes,是SERializer(串行器)和DESerializer(解串器)的簡稱,是一種點對點的高速串行通信技術。
我覺的SerDes就是一個超級序列槽收發器!
最大的特點就是點對點收發、沒有随路時鐘,它的速率是隐含在協定裡的,雙方必須按照約定好的波特率進行資料的發送和接受才能正确的完成通信。
這裡想說明的是:
1、序列槽的單雙工和資料位寬都是可以配置的,按照自己的需求去設定;
2、序列槽協定也是有時鐘的,隻不過這個時鐘是隐含在協定裡,除了常見的9600、38400、115200,自己也可以去配置特殊模式的序列槽,關鍵是雙方都要遵守相同的協定。
那麼SerDes呢?
相同的,SerDes也是收發兩條線,準确地說,是兩組,因為它是差分形式,即tx_p、tx_n,rx_p、rx_n;在資料端也是可以配置成不同的資料位寬和單雙工模式。
不同的,就是在于SerDes的時鐘是隐含在資料中!這就需要額外的電路去完成資料和時鐘的“融合”與“解析”,而這正是PCS和PMA的作用,其内部采用的編碼技術和信号補償技術正是為了完美的将時鐘“融合”進串行資料(發送端),再将時鐘從串行資料中“解析出來”(接收端)!至于内部如8b/10b、去加重、預加重等技術細節可以自行搜尋哈。
Xilinx将這個SerDes硬核進行了封裝,成為Gigabit Transceiver,即GT,而它在BANK裡的位置和數量都是固定的,從這個角度來看這也算是它不靈活的不足所在吧。
2 進階
2.1、MAC層功能
MAC層功能用一個詞概括就是“成幀解幀”,具體來講:
TX方向對使用者側發送來的MAC幀添加前導碼和幀尾校驗和,對長度過短幀會在幀尾填充0直至最小幀長,此外流控子產品可以根據需要發送pause幀。
RX方向過濾掉不符合規範的資料幀并移除填充域,隻有目的MAC位址與自身相符且幀尾校驗和正确的資料幀才為有效資料幀,去除前導碼和校驗域後即發送給使用者側。接收端也會根據可能收到的pause幀做出暫停發送處理。
2.2、以太網幀結構
目前常見的是 Ethernet II 和 IEEE802.3 兩種格式,總體可以歸納為:
類型 | 目的MAC位址 | 源MAC位址 | 長度/類型 | 有效負荷(可能有填充) | 幀校驗 |
長度 | 6byte | 6byte | 2byte | 46~1500byte | 4byte |
差別在于 Ethernet II 幀長度/類型域解釋為上層協定類型,而 IEEE802.3 同樣位置是長度字段。
區分兩者的标準是:
- 當該字段值小于等于1500(十六進制的0x05DC)時,為IEEE802.3格式;
- 當該字段值大于等于1536(十六進制的0x0600 )時,幀使用的是Ethernet II格式。
其中Ethernet II最為常見。
2.3 MII 接口
MII --Medium Independent Interface
接口連線很多,使能、時鐘、标志信号的error、valid等等,共16根線。
2.3.1、RMII 簡介
MII連線太多,怎麼辦,Reduce!
R MII,注意這裡不僅僅是連接配接線數量的減少,更重要的是資料時鐘的變化,這裡用的是外部參考源提供的CLK_REF參考時鐘,在PHY側資料接收是由外部晶振提供,和接收到的資料處于不同的時鐘域,是以需要FIFO進行緩存。
2.3.2、SMII 簡介
RMII連線依然太多怎麼辦?繼續減少?串行!
Serial MII,也衍生了SSMII Serial Sync(串行同步)SSSMII Source Sync Serial(源同步串行)。
2.3.3、GMII簡介
MII的進化版,Gigabit MII 位寬增加一倍,時鐘均為125MHz。
值得注意的是,發送參考鐘GTX_CLK的方向是由MAC發送給PHY。
GMII --Gigabit Media Independent Interface
GMII采用8位接口資料,工作時鐘125MHz,是以傳輸速率可達1000Mbps。同時相容MII所規定的10/100 Mbps工作方式。
GMII接口資料結構符合IEEE以太網标準。該接口定義見IEEE 802.3-2000。
發送器
◇ GTXCLK——吉比特TX..信号的時鐘信号(125MHz)
◇ TXCLK——10/100M信号時鐘
◇ TXD[7..0]——被發送資料
◇ TXEN——發送器使能信号
◇ TXER——發送器錯誤(用于破壞一個資料包)
注:在千兆速率下,向PHY提供GTXCLK信号,TXD、TXEN、TXER信号與此時鐘信号同步。否則,在10/100M速率下,向PHY提供 TXCLK時鐘信号,其它信号與此信号同步。其工作頻率為25MHz(100M網絡)或2.5MHz(10M網絡)。
接收器
◇ RXCLK——接收時鐘信号(從收到的資料中提取,是以與GTXCLK無關聯)
◇ RXD[7..0]——接收資料
◇ RXDV——接收資料有效訓示
◇ RXER——接收資料出錯訓示
◇ COL——沖突檢測(僅用于半雙工狀态)
管理配置
◇ MDC——配置接口時鐘
◇ MDIO——配置接口I/O
管理配置接口控制PHY的特性。該接口有32個寄存器位址,每個位址16位。其中前16個已經在“IEEE 802.3,2000-22.2.4 Management Functions”中規定了用途,其餘的則由各器件自己指定。
2.3.4、XGMII
XGMII--10 Gigabit Media Independent Interface
“10Gb獨立于媒體的接口”,X對應羅馬數字10
2.3.5、SGMII
終于到了SGMII,這個RX_CLK是可選的,去掉之後是不是很像序列槽,MII總線中的标志信号TX_EN、TX_ER、RX_DV、RX_ER都成為串行資料的一部分,這樣,人們為了提高資料吞吐,從增加資料線到增加時鐘頻率,再到減少總線,最終回到了串行的形式,也是非常有趣。
SGMII--Serial Gigabit Media Independent Interface
SGMII為串行吉比特媒體獨立接口,用在PHY與MAC之間,SGMII 提供了速率為 10/100/1000 Mbps 的全雙工 BASE-T 功能在光傳輸裡,應用在以太網闆上。 類似于GMII和RGMII,隻不過GMII和RGMII都是并行的,而且需要随路時鐘,PCB布線相對麻煩,而且不适應背闆應用。
而SGMII是串行的,不需要提供另外的時鐘,MAC和PHY都需要CDR去恢複時鐘。
另外SGMII是有8B/10b編碼的,速率是1.25G。
///
2.4、架構圖
SGMII 架構框圖:
器件的支援度: