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