目前 AMD 的以太網 IP 核,如軟核 10G/25G,40G/50G 或者硬核 CMAC,MRMAC,DCMAC 等等,都采用的是同一種 Pause 幀處理方式。
這篇文章主要介紹了用戶應當如何設置以太網 IP 的相關參數,使其能夠有效處理以太網的 Pause 幀。
按照 IEEE802.3 協議,一個 Pause 幀是一個最小長度,即 64bytes 長的以太網幀,目標地址(DA)為一個廣播地址 01-80-C2-00-01,Type 為 8808,Opcode 為 0001(Global)或者 0101(Priority)。具體細節請參考 IEEE802.3 協議。
PFC 結構如下所示:
AMD 以太網 IP,可以靈活的設置這些以太網 Pause 幀參數。例如通過設置如下 TX 側的參數,包括 GPP(Global Pause Packet)的目標地址(DA),Ether Type,Opcode 等,這樣 IP 會產生你所期望的任意數據包,作為你要的 Pause 幀發送出去。
同樣,IP 也需要在 RX 側做相應的設置,這樣才能識別出 Pause 幀并進行處理。接下來重點介紹,如何在 RX 側設置 Pause 幀的處理。
首先,IP 遵循如下 3 個 Steps,對收到的以太網幀進行處理:
Step1,如果通過了,則該以太網幀被認為是控制包,進入 Step2,并且不再出現在用戶數據側顯示;只有將 ctl_rx_forward_control 設為 1 的時候,即使是控制包,IP 仍然會將其跟其它數據包一起輸出到 RX 用戶側;如果 Step1 沒通過,則該以太網幀為普通 RX 數據包。
Step2,如果通過了,則該以太網幀被確認為全局 Pause 幀;如果沒通過,則進入 Step3。
Step3,如果通過了,則該以太網幀被確認為 Priority Pause 幀;如果沒通過,則不是 Pause 幀,為其它類型控制幀。
也就是說,這里有四種特殊的以太網幀,分別是兩種控制包 Global Control Packet(gcp),Priority Control Packet(pcp),和兩種 Pause 幀 Global Pause Packet(gpp),Priority Pause Packet(ppp)。
IP 需要首先判斷收到的是否是控制包(即 gcp 或 pcp),如果是,則先判斷是否是 Global Pause 幀,再判斷是否是 Priority Pause 幀。這幾步判斷,IP 都給了相應的參數,供用戶設置,每一個條件,用戶都可以選擇是否要作檢查。
文檔里給出了 IP 是如何做判斷的相關代碼,如下:(由于某些新的 IP 文檔尚未完善,如 DCMAC,如果缺失這部分內容,也是可以參考其它 IP 文檔里的這一段內容)。
接下來,選取 Step2 中的兩句,具體解釋下,如何理解這個代碼。其它部分可以類推。
先來看圖中第二句,判斷該以太網數據包為 Global Pause 幀(gpp),首先要滿足 Step1,然后是由上圖中第二句代碼(assign global_pause_packet)后面的所有項“與”(&&)起來的,就是說要滿足后面所有的項,分別是 DA 符合,SA 符合,Etype 符合,Opcode 符合,并且使能了該功能(即設置ctl_rx_enable_gpp=1)。
再來看第一句,Opcode 符合(assign opcode_match_gpp),是由后面兩個條件“或”起來。這里要注意,為什么是或,第一個條件是該功能使能取反,也就是說,如果你設置使能不打開的話,這個條件是直接滿足的;這就意味著,不打開這個使能表示代碼不檢測這個條件,任意數據都會被當作滿足條件,所有數據包都會被認作 Pause 幀;使能打開后,才會要求后面的第二個條件符合才行,第二個條件即 RX 收到的數據包的該段數據,滿足你設置的 ctl_rx_opcode_gpp,按照協議你應當將其設置為 0001。
總之,在設置完這些 Pause 幀相關參數后,就可以使用以太網 IP 的流控功能了。通過 stat_tx_pause 確認 IP 是否成功發出 Pause 幀,并通過 stat_rx_pause 確認 IP 是否能收到 Pause 幀。如果仍然無法成功接收到 Pause 幀,不要忘了將 ctl_rx_forward_control 設為 1,并在用戶側接收數據的地方,檢查 IP 實際收到的數據包,并逐條對照之前的。
審核編輯:劉清
-
以太網
+關注
關注
40文章
5385瀏覽量
171160
原文標題:開發者分享|設置 AMD 以太網 IP 核的 Pause 幀處理
文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論