前言
本文主要介紹了關于Aurora8B10B IP官方提供的模板工程的使用,并進行了簡要的仿真查看測試結果,確保仿真傳輸的正確性。
示例設計架構
示例設計 每個 Aurora 8B/10B 內核都包含一個示例設計(< 組件名稱 >_exdes),該設計在簡單的數據傳輸系統中使用該內核。示例設計包含以下組件:
- 連接到 TX 接口的幀生成器 (FRAME_GEN)
- 連接到 RX 用戶界面的幀檢查器 (FRAME_CHECK)
- 用于調試和測試的 VIO/ILA 實例
下圖顯示了全雙工內核的示例設計框圖。
示例設計使用所有核心接口。沒有 TX 或 RX 接口的單工內核分別沒有 FRAME_GEN 或 FRAME_CHECK 塊。
示例代碼結構
示例工程的代碼架構如下:
- 包含一個Aurora IP模塊,這個模塊包含了和Aurora內核配置操作的相關驅動和設置。
- 兩個接口互轉模塊:LL轉AXI和AXI轉LL接口的模塊。
FRAME_GEN 模塊
FRAME_GEN 模塊按照 AXI4-Stream 協議為每個 PDU、UFC 和 NFC 接口生成用戶流量。該模塊包含一個偽隨機數生成器,它使用具有特定初始值的線性反饋移位寄存器 (LFSR) 來生成可預測的數據序列。FRAME_CHECK 模塊使用此數據序列來驗證 Aurora 數據通道的完整性。模塊輸入是 user_clk、reset 和 channel_up。LFSR用于產生偽隨機數據,LFSR的低位連接到REM總線。
接口描述
接口這里類似AXI總線,官方估計是復用了之前寫好的模塊,所以對這部分總線名稱沒有進行修改和重寫。下表對接口進行了簡單的說明。
代碼講解部分可參考下文:
Aurora IP核例子簡析
在FRAME_GEN 模塊中控制發送由一個狀態機控制,閱讀代碼后,提取代碼狀態機部分,畫出該模塊的狀態轉移圖。
FRAME_CHECK 模塊
FRAME_CHECK 模塊驗證 RX 數據的完整性。該模塊使用與 FRAME_GEN 模塊相同的 LFSR 和初始值來生成預期的 RX 幀數據。將接收到的用戶數據與本地生成的流進行比較,并根據 AXI4-Stream 協議報告任何錯誤。FRAME_CHECK 模塊適用于 PDU、UFC 和 NFC 接口。
例程中根據生成的線型LFSR,通過REM總線的標識進行解碼恢復出發送的偽隨機數據。
建立幀模式工程
新建一個空工程,選擇一個有高速串口的芯片即可,然后在IP目錄下選擇Aurora IP,如果只是查看仿真就保持默認配置即可。選中該IP右擊,打開模板工程,確認后會自動新建一個模板工程。
完成建立后可看到例程中的代碼結構和前文介紹相同。
查看仿真
選中仿真按鈕點擊運行行為級仿真。
在仿真設計中,例程調用了兩個Aurora IP進行收發回環測試。收發數據為相同的數據。添加任一個調用例化的IP的信號到波形窗口,然后點擊運行等待。需要等待一段時間后,在rx和tx_data信號可以看到收發信號,如下圖,收發信號由十幾個clk的延時,同時在空閑狀態時插入了隨機數確保傳輸,所以在接收有效信號斷言外的隨機數據不用過多關注。
建立流模式工程
在配置Aurora IP時,接口模式選擇stream流模式。
然后重復剛剛生成例程的步驟。
流模式代碼結構
流模式的代碼結構和幀模式相似,因為是流模式,發送和接收端的信號相比幀模式少了幾個,例如數據生成模塊少了以下端口:TX_SOF_N,TX_EOF_N,TX_REM,而且這里的信號,在經過轉換后LL接口轉成AXI接口后,信號也會相應減少一些。
流模式的發送端模塊代碼的主體相比幀模式少了復雜的狀態機設計,只剩下偽隨機數生成部分。接收也少了對幀數據的解碼操作。
查看仿真
仿真結果類似幀模式下傳輸,傳輸結果正確。
reference
- PG046
- Aurora IP例程
- FPGA設計心得(6)Aurora IP核例子簡析與仿真(framing版)