10G_Ethernet_03 Example Design
由于該系列文章閱讀有順序性,所以請跳轉至該系列文章第一篇從頭開始閱讀,并按照文章末尾指示按順序閱讀,否則會云里霧里,傳送門在此:??https://blog.csdn.net/qq_33486907/article/details/110180317???《10G_Ethernet_01 萬兆以太網設計引言》
目錄
1 Example Design 簡介
2 Example Design 詳解
2.1 AXI-Lite Control State Machine
2.2 Basic Pattern generator and checker
2.2.1 address_swap
2.2.2 Pattern generator
2.2.3 Pattern checker
2.3? Ethernet FIFO
2.3.1 RX FIFO
2.3.2 TX FIFO
3 Test Bench
3.1? Test Bench 簡介
3.2? DEMO 模式
3.3 BIST 模式
4 Example Design 的仿真
4.1 DEMO 模式下的仿真
4.2 BIST 模式下的仿真
1 Example Design 簡介
? ? Xilinx 官方為了使用戶能快速將 IP 應用到設計中,會提供示例設計( Example Design), 通過學習示例設計能快速掌握 IP 的設計方法, 同時示例設計可以在完全不進行任何修改的情況, 配合官方開發板可達到快速驗證的目的,或許后續的應用開發也只
需要在示例設計上進行修改, 加快應用開發的速度。本章內容也會同時給出非官方板卡在使用示例設計時的驗證方法, 示例設計還有一個功能就是可以快速的驗證硬件電路的正確性, 示例設計結構如下圖所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 示例設計
示例有以下組成部分:
AXI_Lite 控制狀態機(AXI-Lite Control State Machine)、模式生成器和檢查器(Pattern generator and checker) 、時鐘生成模塊( AXI-Lite Clock generation) 、 以太網FIFO(Ethernet FIFO)、 10G 以太網子系統(10G Etehernet Subsystem) ;
?
- AXI_Lite 控制狀態機(AXI-Lite Control State Machine) : 通過 AXI_Lite 接口配置PCS/PAM 和 MAC,以允許基本幀的傳輸;
- 模式生成器和檢查器(Pattern generator and checker) :該模塊除了為示例設計提供多樣的測試模式, 還包含了一個幀生成器和幀檢查器; 幀生成器在適合的板卡上可生成數據包,幀檢查器可檢查任何接收的數據
? ? ? ? ? ? ? 該模塊可以給示例提供三種操作模式:
? ? ? ? ? (1) 由幀生成器生成的幀直接插入 TX_FIFO, 數據在串行鏈路上傳輸;
? ? ? ? ? (2) FIFO 側環回,將來自 RX FIFO 的幀插入 TX_FIFO,數據在串行鏈路上傳輸;
? ? ? ? ? (3) PCS 環回, 幀生成器生成幀插入 TX_FIFO,然后通過 PCS 直接環回, 串行鏈路上沒有數據。
? ? ? ? ? ? ?這三種模式的控制信號,可通過外部簡單的控制信號來改變示例設計所使用的模式, 可通過相關信號的直接賦值,或映射到電路外圍的DIP 開關或上下拉電阻上。
- 時鐘生成模塊(AXI-Lite Clock generation): AXI_Lite 總線所需要的時鐘;
- 以太網 FIFO(Ethernet FIFO):用戶發送和接受帶有 AXI4-Stream 接口的 FIFO;
2 Example Design 詳解
2.1 AXI-Lite Control State Machine
? ? ? ? AXI-Lite 狀態機提供初始化 PHY 和 MAC 的基本訪問, 訪問流程如下:
? ? ? ? ? ? ? ? ? ? ? ?AXI4-Lite狀態機
? ? ? ? 復位后, 內部復位的建立時間完成,狀態機首先寫入 MAC 啟用 MDIO 并配置MDIO 時鐘(假設 s_axi_aclk 運行在 125 MHz,默認情況下從示例設計和 demo_tb 提供)。
? ? ? ? 然后配置 MAC 的 RX 和 TX 側。
? ? ? ? 接著,可以使用示例設計的輸入信號 pcs_loopback 可以將 PHY 設置為兩種模式:PCS 環回(數據在 10GBASE-R 或 10GBASE-KR 內回送)或默認發送/接收模式,將相應的寄存器值寫入 PHY MDIO 寄存器。然后在狀態寄存器上執行 MDIO 讀取以驗
證編程模式。(1) 如果是 PCS 環回模式 PHY 配置已完成,并且允許通過啟用碼型發生器來啟動幀傳輸。(2) 如果選擇了默認發送/接收模式,則從中讀取第二個狀態寄存器,指示 PHY 是否已復位并且已建立塊鎖定。如果未建立塊鎖定,將輪詢此 MDIO 狀
態寄存器,直到檢測到塊鎖定。一旦成功,就配置 PHY,并且可以通過啟用碼型發生器來啟動幀傳輸。該狀態的退出條件被重置或啟用 PCS 環回。
2.2 Basic Pattern generator and checker
模式生成器在一下文件中描述:
- <component_name> _gen_check_wrapper.v
- <component_name> _axi_pat_gen.v
- <component_name> _axi_pat_check.v
- <component_name> _axi_mux.v
- <component_name> _address_swap.v
gen_check_wrapper 有兩個主要的功能模式:發生器模式和環回模式,由示例設計的輸入信號 enable_pat_gen 配置。
在環回中,來自 RX FIFO 的數據被傳遞到地址交換模塊(address_swap) 并從那里傳遞到 TX FIFO。
在發生器模式中, TX FIFO 數據由碼型發生器提供, RX FIFO 數據可選擇由模式檢查器檢查, 由示例設計的輸入信號 enable_pat_check 配置。
2.2.1 address_swap
在環回路徑上可啟用地址交換模塊, 默認地址交換功能被繞過。
在環回模式下,當啟用地址交換時,地址交換模塊將等待,直到接收到目標地址(DA)和源地址(SA)字段,然后才開始將數據發送到 TX FIFO, 然后模塊將交換每幀的 DA和 SA。這確保了輸出幀 DA 與鏈路另一端的設備的 SA 匹配。禁用時, DA 和 SA 字段保持不變。
2.2.2 Pattern generator
? ? ? ? 可以使用示例設計的 enable_pat_gen 信號輸入來啟用/禁用模式生成器。啟用后,刷新來自 RX FIFO 的數據,并且 pat_gen 模塊驅動 address_swap 模塊輸入。模式生成器使用向量來允許用戶修改目標地址和源地址,插入自定義前導碼和 VLAN 字段以及控制最小幀大小和最大幀大小。啟用后,它將以配置的最小幀大小開始,并在每幀之后發送,增加幀大小,直到達到最大值; 然后它以最小幀尺寸再次開始。
? ? ? ?示例設計輸入提供對自定義前導碼和 VLAN 字段插入的直接控制。如果針對合適的電路板,這些配置輸入可以連接到 DIP 開關。在所有情況下,模式生成器框架的構造如下:
- 客戶前導數據(如果已啟用), DA, SA 和 VLAN 字段(如果已啟用)值由示例設計中模塊實例化時指定的向量值提供;
- 類型/長度字段根據數據包大小設置;
- 幀數據是從類型/長度字段中的值開始的遞減計數。這應該意味著所有幀中的最終數據字節是 0x01 或 0x00;
? ? ? ? 在環回場景中(使用第二個目標板作為環回),兩個板上的振蕩器之間的 ppm 差異可能導致較慢板中數據溢出,從而導致錯誤。這通常是在較慢的電路板工作時觀察到的。為了避免這個問題,模式生成器提供的數據速率被限制到恰好低于所選的線速率。pat_gen 模塊具有直接由控制誤差插入功能, 示例設計的輸入信號 insert_error(可以連接到開發板合適的按鈕上)。
? ? ? ? 模式生成器還提供簡單的活動監視器。 翻轉 gen_active_flash 信號輸出,該輸出可以連接到電路板合適的 LED 上, 閃爍以指示正在傳輸數據;
2.2.3 Pattern checker
? ? ? ? pat_check 模塊對正被接收的數據提供了一個簡單的完整性檢查。 它使用與 pat_gen模塊相同的輸入數據和控制向量,因此需要相同的幀內容和幀大小增量。由于幀數據可能交換或不交換 DA 和 SA,因此模式檢查器允許這兩個值交換位置。
? ? ? ? 使能示例設計的 enable_pat_check 信號輸入時,將監視 RX_FIFO 的輸出。 第一步是確定數據序列在框架的位置,通過捕獲的第一個完整幀的類型/長度字段中的值來完成的, 完成此操作后,就可以預計下一幀的長度將逐漸增大(除非位于最大長度的切換點)。
? ? ? ? 如果檢測到錯誤,則在不匹配的字節或字節上引發錯誤標志,并且錯誤條件被采樣并輸出到示例設計的 輸出信號 frame_error上(可以使用開發板上合適的 LED 顯示)。模式檢查器狀態機然后重新同步到輸入數據, 示例設計的 reset_error 信號輸入如果被
使能,將清除 frame_error 信號,從而能夠感覺到錯誤的頻率(如果有的話)。
? ? ? ? 模式檢查器還提供簡單的活動監視器。 示例設計的 check_active_flash 輸出信號將被翻轉輸出,可連接到開發板上合適的 LED。 可以指示正在正確接收 RX 數據。 這確保了錯誤檢測不僅僅是因為幀被丟棄而導致的。
2.3? Ethernet FIFO
? ? ? ? 以太網 FIFO 在以下文件中描述:
- <component_name> _xgmac_fifo.v
- ?<component_name> _axi_fifo.v(為每個 RX 和 TX FIFO 實例化兩次)
? ? ? ? 以太網 FIFO 包含的實例 tx_client_fifo 連接到 TX AXI4-Stream,和實例 rx_client_fifo連接到 RX AXI4- Stream。發送和接收 FIFO 組件都實現了 AXI4-Stream 用戶接口,通過該用戶接口可以發送和接收數據幀。
2.3.1 RX FIFO
? ? ? ? rx_client_fifo 是由一個雙口 RAM 構建而成,可存儲 16384bytes 個字節。 存儲深度由本地參數 FIFO_SIZE 設置,默認設置值為 1024。接收 FIFO 從子系統接收幀數據,如果幀沒有錯誤,則該幀在 AXI4-Stream FIFO 接口上顯示以供讀取(本例中由幀檢查
器模塊讀取)。如果幀出錯,則接收 FIFO 將丟棄該幀。
? ? ? ? 如果接收 FIFO 存儲器溢出,則當前正在接收的幀將被丟棄, 此時無論它是好幀還是壞幀,信號 rx_overflow 被斷言。內存可能溢出的情況如下:
- FIFO_SIZE 參數設置的 FIFO 大小限制了它可以無誤地存儲的幀大小。如果幀大于參數大小(以字節為單位), FIFO 可能會溢出,然后數據丟失。因此,對于大于FIFO_SIZE 參數指定的字節數的幀,建議不要將示例設計與巨型幀模式的 MAC 解決方案一起使用。
- 如果數據寫入數據的速度比讀取數據的速度快, FIFO 最終會溢出。例如,如果環回路徑從 RX FIFO 設置為 TX FIFO,則如果接收器時鐘以比發送器時鐘更快的速率運行,或者如果接收幀之間的數據包間間隔小于發送幀之間的數據包間隙。如果是這種情況, TX FIFO 無法像接收到的那樣快速地從 RX FIFO 讀取數據。
2.3.2 TX FIFO
? ? ? ? tx_client_fifo 是由一個雙口 RAM 構建而成,可存儲 16384bytes 個字節。 存儲深度由本地參數 FIFO_SIZE 設置,默認設置值為 1024。 當全幀已寫入發送 FIFO 時,FIFO 將數據提供給 MAC 發送器。 MAC 使用 tx_axis_mac_tready 來限制數據,直到它控制介質為止。如果 FIFO 存儲器填滿,則 tx_axis_fifo_tready 信號用于停止AXI4-Stream 接口寫入數據,直到 FIFO 中的空間可用。如果 FIFO 存儲器已滿,但沒有可用于傳輸的完整幀。例如,如果一個幀大于參數的字節數,那么 FIFO 聲明tx_overflow 信號并繼續接收來自連接邏輯的幀的其余部分; 但是,這個大的溢出幀將被 RX FIFO 丟棄。這樣可確保 AXI4-Stream FIFO 接口不會被鎖定。
3 Test Bench
3.1? Test Bench 簡介
? ? ? ? PG157 中將 Test Bench 作為及單獨一章進行描述, 但實際內容屬于 Example Design的一部分,把它放到這一章進行講解, Test Bench 的實現框圖如下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Test Bench
Test Bench 是一個簡單的程序,用于演示示例設計和子系統本身。它有兩種操作模式, DEMO 和內置自測(BIST), DEMO 是默認模式。 Test Bench 包括以下內容:
- 時鐘發生器(Clock Management)
- DEMO - 幀激勵模塊,經過適當編碼和加擾,可連接到示例設計的串行接收器接口。
- DEMO - 幀監視器塊,用于檢查通過串行發送器接口返回的數據(在適當的解擾和解碼之后)。
- 激勵和監視器塊使用 CRC 引擎(未示出)。
- BIST - 可以從串行發送器接口連接到串行接收器接口,構建簡單環回路徑(未示出)。
3.2? DEMO 模式
? ? ? ? DEMO 模式下 Test Bench 執行以下任務:
- 生成輸入時鐘信號;
- 啟用地址交換; 碼型發生器和檢查器被禁用;
- 接收數據 通過 AXI_Stream 接口環回到發送路徑上;
- 對子系統進行復位重置;
- 等待 PCS / PMA 塊鎖定建立;
- 4 個幀被推入串行接收器接口
? ? ? ? ?(1)第一幀是最小長度幀。
? ? ? ? ?(2)第二幀是類型框架。
? ? ? ? ?(3)第三是錯誤幀。
? ? ? ? ?(4)第四幀是填充幀。幀
- 當每個幀被推入接收器接口時, CRC 將在適用的幀字段上計算并附加到幀的末尾;
- 然后對幀進行 64b / 66b 編碼,然后進行加擾;
- 在串行發送器接口接收的幀被解擾和解碼;
- 然后幀被傳遞到監視進程,該進程在觀察幀并計算 CRC。然后,它通過將自己計算的CRC 值與幀的最后四個字節進行比較來檢查 CRC 的有效性;
- 計算傳輸的幀數。
3.3 BIST 模式
? ? ? ? BIST 模式下 Test Bench 執行以下任務:
- 生成輸入時鐘信號;
- 對子系統進行復位重置;
- 等待 PCS / PMA 塊鎖定建立;
- 啟用碼型發生器和檢查器;
- 對串行發送器接口處接收的幀進行解擾和解碼;
- 然后幀被傳遞到監視器進程,該進程在觀察幀并計算 CRC。然后,它通過將自己計算的 CRC 值與幀的最后四個字節進行比較來檢查 CRC 的有效性;
- 計算發送的幀數;
- 串行接收器鏈路連接到發送器鏈路,以便將發送的幀環回到子系統的接收器路徑;
- 從 RX FIFO 讀出的幀由示例設計中的檢查器模塊檢查。測試臺監視檢查器模塊檢測到的任何錯誤。
4 Example Design 的仿真
? ? ? ? 對 Example Design 進行仿真, 并觀察仿真結果可以幫助用戶更好的了解 ExampleDesign 的功能特性。
4.1 DEMO 模式下的仿真
? ? ? ? DEMO 模式下的仿真流程見 3.2 DEMO 模式所描述的流程;
? ? ? ? ?該測試模式可將 Example Design 理解為一個輸入輸出的黑盒, Test Bench 產生激勵測試數據,經過 Example Design 環回, 并在 Test Bench 中對環回的數據進行檢查,以驗證子系統的正常工作;
4.2 BIST 模式下的仿真
? ? ? ? BIST 模式下的仿真流程見 3.3 BIST 模式所描述的流程;
? ? ? ? 該測試模式可將 Example Design 理解為一個自身產生數據激勵, 并自身進行檢測的方式(自環回),以驗證子系統的正常工作;
5 設計資源傳送門
? ? ? ? ?到這里,產生了該系列博客的第一個設計資源,傳送門在此:?https://download.csdn.net/download/qq_33486907/13196358? ?《基于FPGA的萬兆以太網示例設計 》,通過該示例可完成仿真驗證。同樣該系列博客的下一篇文章將講解示例工程的上板驗證。
下一篇傳送門在此:https://blog.csdn.net/qq_33486907/article/details/110429232?《10G Ethernet Subsystem IP 的快速驗證》
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的10G_Ethernet_03 Example Design的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 七彩虹Z790主板全线降价100元!B7
- 下一篇: 苹果手机怎么看youtube