?
在?AXI 基礎第 2 講?一文中,曾提到賽靈思 Verification IP (AXI VIP) 可用作為 AXI 協議檢查工具。在本次第4講中,我們將來了解下如何使用它在 AXI4 (Full) 主接口中執行驗證(和查找錯誤)。
1. 下載設計文件(請輸入以下網址進行下載?
https://forums.xilinx.com/xlnx/attachments/xlnx/support_blog/130/1/AXI_Basics_4.zip?
2. 打開 Vivado 2019.2。
3.?在 Tcl 控制臺中,使用 cd 命令導航到解壓縮的目錄 (cd AXI_Basics_4)
4. 在 Tcl 控制臺中,用 source 命令來創建一個 Vivado 工程,其中附帶包含自定義 IP 的塊設計 (BD),此自定義 IP 具有我們要驗證的 AXI4 主接口。
(source./create_proj.tcl)
現在,我們可將 AXI VIP 連接到自定義 IP 的主接口并對其進行驗證。
?
5. 右鍵單擊 BD、單擊“添加 IP (Add IP)”,并將 AXI Verification IP (AXI VIP) 添加到 BD 中
6.?雙擊 AXI VIP 以打開其配置界面
7.?將接口模式更改為“ (Slave)”,然后單擊“確定 (OK)”
8. 將 AXI VIP 的 S_AXI 輸入接口連接到自定義 IP 的 m00_axi 輸出接口,并將 AXI VIP 的 aclk 和 aresetn 輸入端口連接到 BD 的對應輸入端口
9.打開“地址編輯器 (Address Editor)”選項卡,單擊“自動分配地址 (Auto Assign Address)”按鈕。確保為 AXI VIP 自動分配的地址為 0x44A0_0000,如果顯示其它地址,請手動分配該地址。
10. 驗證 BD。確保其中不存在任何嚴重警告或問題。
11. 保存 BD。
12. 在 Tcl 控制臺中輸入以下命令,以查找 AXI VIP 實例的全名:
?get_ips *vip*
默認情況下,返回的組件名稱應為 design_1_axi_vip_0_0
13. 雙擊“ (Sources)”窗口中的測試平臺文件 AXI_tb 以在文本編輯器中將其打開
AXI_tb 測試平臺文件已包含運行自定義 IP 所需的代碼。我們只需添加 AXI VIP 所需的代碼即可。根據?AXI 基礎第 3 講,我們只需遵循來自PG267(v1.1,2019年 10 月 30 日)第 46 頁的“實用編碼指南與示例”進行操作即可。
?
?
首先,導入 2 個必需的包:axi_vip_pkg 和 _pkg。組件名稱即步驟 12 中 get_ips 所返回的名稱
?
14. 在第 58 行附近添加以下行
?//Import two required packages: axi_vip_pkg and _pkg.
import axi_vip_pkg::*;
import design_1_axi_vip_0_0_pkg::*;
下一步是聲明類型為從 VIP 的代理。
?
15. 在第 91 行附近添加以下行
?// Declare the agent
?design_1_axi_vip_0_0_slv_mem_t slv_agent;
下一步,我們需要創建從代理。
?
16. 在第 96 行附近添加以下行
?//Create an agent
?slv_agent = new("master vip agent",UUT.design_1_i.axi_vip_0.inst.IF);
17. 在本教程中,我們需要使 AXI VIP 在控制臺中輸出錯誤,因此我們需要使用以下行(99行附近)啟用詳細模式
?// set print out verbosity level
?slv_agent.set_verbosity(400);
18. 最后,使用以下代碼行啟動從代理:
?//Start the agent
?slv_agent.start_slave();
19. 保存測試平臺文件,啟動仿真,運行 200 us
20. 查看 Tcl 控制臺,搜索關鍵字“Fatal”。您應看到以下行:
Fatal: AXI4_ERRM_AWADDR_BOUNDARY: A burst must not cross a 4kbyte boundary. Spec: section A3.4.1.
為理解此錯誤,我們可以按錯誤消息中所述查看ARM 網站上提供的 AMBA AXI 和 ACE 協議規范中的第 A3.4.1 小節??
?
在此規范中可以看到如下語句:
“A burst must not cross a 4KB address boundary.”
?
21. 關閉仿真,雙擊定制 IP axi_master_0 以打開其配置界面。
可以看到,自定義 IP 配置為發送突發 (burst),其中含 16 個 32 位的數據,從地址 0x44A00FC8 開始。這意味著寫突發將從地址 0x44A00FC8 開始并于地址 0x44A01004 結束。這是一個錯誤,因為這些突發會跨越 4k 邊界,其地址為 0x44A01000 (4K = 4*1024 = 4096 = 0x1000)。
?
22. 將 M00 Axi Target Slave Base Address 更改為 0x44A00000,單擊“OK”關閉 IP 配置界面,然后保存塊設計。
23. 重新運行仿真并持續 200 us。
24. 重新搜索關鍵字“Fatal”。可以看到,錯誤消息已改變(這表明第一個問題已解決)。您應看到如下錯誤:
?Fatal: AXI4_ERRM_WDATA_STABLE: WDATA must remain stable when WVALID is asserted and WREADY low. Spec: section A3.2.1.
25. 在波形窗口中,展開 m00_axi 接口的寫數據通道。您將看到 wvalid 確實正在發生改變,而 tready 為低,這有違 AXI 規范。
26. 關閉仿真,在“Sources”窗口中打開位于BD下的 AXI_Master_v1_0_M00_AXI.v 文件
27. 修改 506/518行附近的如下段落。這樣當 tready 為低時就會阻止 wdata 發生更改。
?/* Write Data Generator???????????????????????????????????????????????????????????
Data pattern is only a simple incrementing count from 0 for each burst? */???????
always @(posedge M_AXI_ACLK)????????????????????????????????????????????????????
begin???????????????????????????????????????????????????????????????????????????
if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1)???????????????????????????????????????????????????????
axi_wdata <= 'b1;???????????????????????????????????????????????????????????
//else if (wnext && axi_wlast)????????????????????????????????????????????????
//? axi_wdata <= 'b0;?????????????????????????????????????????????????????????
else if (wnext)???????????????????????????????????????????????????????????????
axi_wdata <= axi_wdata + 1;??? ??????????????????????????????????????????????
else??????????????????????????????????????????????????????????????????????????
axi_wdata <= axi_wdata;? ?
end?
?
28. 保存此文件。這樣應可顯示“刷新已更改的模塊 (Refresh Changed Modules)”選項。單擊該選項。
?
29. 重新運行仿真并持續 200 us。
?
在新仿真運行中應該不會再出現任何新錯誤,如果您查看波形窗口,應看到正常發生的 16 次寫入和 16 次讀取的突發傳輸事務。也就是說第二個問題已經得到修復。
?
?
? ?? ? ? ? 往期精選? ? ??
? ?第二講??使用 AXI Verification IP (AXI VIP) 對 AXI 接口進行仿真
第三講?使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真
?
?
?
審核編輯:湯梓紅
評論
查看更多