由于該系列文章閱讀有順序性,是以請跳轉至該系列文章第一篇從頭開始閱讀,并按照文章末尾訓示按順序閱讀,否則會雲裡霧裡,傳送門在此: 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 的快速驗證》