?
在這篇新博文中,我們來聊一聊如何將 AXI VIP 添加到 Vivado 工程中,并對 AXI4-Lite 接口進行仿真。隨后,我們將在仿真波形窗口中講解用于AXI4-Lite 傳輸事務的信號。
?
使用 AXI VIP 作為 AXI4-Lite 主接口(教程)
-
下載設計文件(本文后附)??? ??
-
打開 Vivado 2019.2。
-
在 Tcl 控制臺中,使用 cd 命令進入解壓縮的目錄 (cd AXI_Basics_3)
-
在 Tcl 中,使用 source 命令執(zhí)行tcl腳本(source./create_proj.tcl)
?
這將創(chuàng)建 1 個 Vivado 工程,其中附帶包含 AXI GPIO IP 的塊設計 (Block Design)。此 AXI GPIO IP 的通道 1作為外部輸出接口,用于仿真到板載 LED 的連接,我們將嘗試通過 AXI4-Lite 傳輸事務來開關此 LED;同時,此 IP 的通道 2作為外部輸入接口,用于仿真到板載開關的連接,我們將嘗試讀取此開關的狀態(tài)。
5. ?將 AXI Verification IP (AXI VIP) 添加到設計中。?
6. 雙擊 AXI VIP 打開其配置 GUI,并修改以下參數:
-
?Interface mode:MASTER
-
?Protocol (MANUAL):AXI4LITE
?
?
7. 將 AXI VIP 的 AXI4-Lite 主接口 (M_AXI) 連接到 AXI GPIO IP 的 AXI4-Lite 從接口 (S_AXI),將 AXI VIP 的 aclk 和 aresetn 端口連接到塊設計的輸入
?
?
8. 打開“地址編輯器 (Address Editor)”選項卡(“窗口 (Window) > 地址編輯器 (Address Editor)”),然后單擊“自動分配地址 (Auto Assign Address)”圖標
?
?
9.確認此地址設置為 0x4000_0000
?
?
注:此處地址的上半部分無關緊要,因為 AXI GPIO 的 S_AXI 接口,其中僅有 9 個地址位連接到 AXI VIP
?
點擊“驗證塊設計”圖標。確保其中不存在任何嚴重警告或錯誤。然后保存塊設計。現在,我們需要更新測試激勵文件,以聲明例化并控制 AXI VIP。為此,我們將按照(PG267(2019年 10 月 30 日v1.1))中“實用編碼指南與示例”章節(jié)的內容來進行操作。
??
?
11. 從“源 (Sources)”窗口打開測試激勵文件 AXI_GPIO_tb.sv
?
?
測試激勵文件中已包含部分信號(例如,時鐘和復位)的控制邏輯,并包含將 LED 狀態(tài)輸出至控制臺的流程。
?always @(posedge led_1)
begin
???? $display("led 1 ON");
end
always @(negedge led_1)
begin
???? $display("led 1 OFF");
end
在“實用編碼指南與示例”中提到的第 1 步是在 SystemVerilog 測試激勵中創(chuàng)建 1 個模塊。此操作在此測試激勵文件中已完成。
第 2 步是導入 2 個必需的包:axi_vip_pkg 和
注:請使用以下 Tcl 命令來查找 VIP 實例的
隨附的測試激勵中假定 AXI 組件名稱為 design_1_axi_vip_0_0(添加到 BD 的首個 AXI VIP 的默認名稱)
?
?get_ips *vip*
12. 在第 58 行附近添加以下行
?
//Step 2 - Import two required packages: axi_vip_pkg and
import axi_vip_pkg::*;
import AXI_GPIO_Sim_axi_vip_0_0_pkg::*;
第3 步是聲明VIP 主接口的代理(agent)
?
13. 在第 102 行附近添加以下行
?// Step 3 - Declare the agent for the master VIP
AXI_GPIO_Sim_axi_vip_0_0_mst_t????? master_agent;
第 4 步和第 5 步為創(chuàng)建新代理并將其啟動。
?
14. 在第 107 行附近添加以下行
?// Step 4 - Create a new agent
master_agent = new("master vip agent",UUT.AXI_GPIO_Sim_i.axi_vip_0.inst.IF);
?
// Step 5 - Start the agent
master_agent.start_master();
準備就緒,可以發(fā)送傳輸事務了。
發(fā)送 AXI4-Lite 傳輸事務其實很簡單。
只需使用AXI4LITE_WRITE_BURST(addr,prot,data,resp) API 執(zhí)行寫傳輸事務,
使用AXI4LITE_READ_BURST(addr,prot,data,resp) API 執(zhí)行讀傳輸事務即可。
注:AXI VIP 的所有 API 都記錄在 zip 文件中,您可從 china.xilinx.com 下載該文件。
(下載方法如下:
??
?
?
在本教程中,我們將嘗試開關連接到 AXI GPIO 通道 1 的 LED_1,并讀取連接到 AXI GPIO 通道 2 的 SWITCH_1 的狀態(tài)。
通過查看 AXI GPIO IP 的寄存器映射((PG144)的表 2-4)可知,我們必須在地址 0x0 執(zhí)行寫操作,在地址 0x8 執(zhí)行讀操作:
??
?
我們將從寫操作開始,嘗試切換 LED_1 的狀態(tài)。
?
15. 添加以下代碼以將 0x1 寫入 AXI GPIO 寄存器 0x0,這樣應可開啟此 LED
?//Send 0x1 to the AXI GPIO Data register 1
#500ns
addr = 0;
data = 1;
master_agent.AXI4LITE_WRITE_BURST(base_addr + addr,0,data,resp);
?
16. 添加以下代碼以將 0x0 寫入 AXI GPIO 寄存器 0x0,這樣應可關閉此 LED
?//Send 0x0 to the AXI GPIO Data register 1
#200ns
addr = 0;
data = 0;
master_agent.AXI4LITE_WRITE_BURST(base_addr + addr,0,data,resp);
下一步,我們將讀取開關位置的每次變更,并向控制臺顯示開關狀態(tài)。
?
17. 添加對應于讀傳輸事務的以下代碼:
?// Switch in OFF position
switch_1 = 0;
// Read the AXI GPIO Data register 2
#200ns
addr = 8;
master_agent.AXI4LITE_READ_BURST(base_addr + addr,0,data,resp);
switch_state = data&1'h1;
if(switch_state == 0)
??? $display("switch 1 OFF");
else
??? $display("switch 1 ON");
????
// Switch in ON position
switch_1 = 1;
// Read the AXI GPIO Data register 2
#200ns
addr = 8;
master_agent.AXI4LITE_READ_BURST(base_addr + addr,0,data,resp);
switch_state = data&1'h1;
if(switch_state == 0)
??? $display("switch 1 OFF");
else
??? $display("switch 1 ON");
?
?
18. 啟動仿真,并使其運行 3us。在 Tcl 控制臺中,您應可看到該 LED 的開啟和關閉,并可看到開關狀態(tài)
現在,我們即可對 ? ? AXI4-Lite 接口上的傳輸事務進行分析
? ? ? ??
19. 在“范圍 (Scope)”窗口中,選中位于“AXI_GPIO_tb > UUT >AXI_GPIO_Sim_i”下的 axi_vip_0
?
20. 在“對象 (Objects)”窗口中,右鍵單擊 M_AXI 協(xié)議實例,然后單擊“添加到波形窗口 (Add to Wave Window)”
?
21. 重新啟動仿真,并運行 3us
這樣在 AXI4-Lite 接口上將可看到 4 個傳輸事務:2 個寫傳輸事務后接 2 個讀傳輸事務
?
22. ?展開 M_AXI 協(xié)議實例,查看各個通道
這樣可以看到寫傳輸事務中的各個步驟。首先,當 READY 和 VALID 信號在寫地址通道上均處于高位(AWREADY 和 AWVALID)時,地址從主接口傳輸到從接口
?
隨后,當 READY 和 VALID 信號在寫通道上均處于高位(WREADY 和 WVALID)時,數據從主接口傳輸到從接口。
注:每個地址僅傳輸一個數據,因為在 AXI4-Lite 接口上不支持突發(fā) (burst) 讀寫。
?
?
最后,當從接口在寫響應通道上發(fā)送寫響應(以表明寫操作是否成功)時,寫傳輸事務即告完成。當 READY 和 VALID 信號在寫響應通道上均處于高位(BREADY 和 BVALID)時,響應從從接口傳輸到主接口
?
?
對于讀傳輸事務,同樣可執(zhí)行此分析。首先,當 READY 和 VALID 信號在讀地址通道上均處于高位(ARREADY 和 ARVALID)時,地址從主接口傳輸到從接口
?
?
隨后,當 READY 和 VALID 信號在讀通道上均處于高位(RREADY 和 RVALID)時,數據從從接口傳輸至主接口。
?
?
注:執(zhí)行讀傳輸事務期間,從接口也會發(fā)送讀響應以指示讀操作是否成功。
此響應將與讀通道上的數據同時發(fā)送。
?
?
?
?
?
?
?
? ?? ? ? ? 往期精選? ? ??
? ?
評論
查看更多