天天看點

AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真

該技術文章來源于Xilinx中文論壇 “Xilinx 産品設計與功能調試技巧 “ 闆塊,更多内容請通路 https://forums.xilinx.com/cn

此次轉載已獲授權,如需轉載,請寫明出處作者及賽靈思論壇連結并發郵件至[email protected],未經Xilinx及著作權人許可,禁止用作商業用途

在這篇新博文中,我們來聊一聊如何将 AXI VIP 添加到 Vivado 工程中,并對 AXI4-Lite 接口進行仿真。随後,我們将在仿真波形視窗中講解用于AXI4-Lite 傳輸事務的信号。

使用 AXI VIP 作為 AXI4-Lite 主接口(教程)

1、下載下傳設計檔案(本文後附)      

2、打開 Vivado 2019.2。

3、在 Tcl 控制台中,使用 cd 指令進入解壓縮的目錄 (cd AXI_Basics_3)

4、在 Tcl 中,使用 source 指令執行tcl腳本(source./create_proj.tcl)
           

這将建立 1 個 Vivado 工程,其中附帶包含 AXI GPIO IP 的塊設計 (Block Design)。此 AXI GPIO IP 的通道 1作為外部輸出接口,用于仿真到闆載 LED 的連接配接,我們将嘗試通過 AXI4-Lite 傳輸事務來開關此 LED;同時,此 IP 的通道 2作為外部輸入接口,用于仿真到闆載開關的連接配接,我們将嘗試讀取此開關的狀态。

AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真

5、 将 AXI Verification IP (AXI VIP) 添加到設計中。

6、 輕按兩下 AXI VIP 打開其配置 GUI,并修改以下參數:

1、Interface mode:MASTER

2、 Protocol (MANUAL):AXI4LITE
           
AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真

7. 将 AXI VIP 的 AXI4-Lite 主接口 (M_AXI) 連接配接到 AXI GPIO IP 的 AXI4-Lite 從接口 (S_AXI),将 AXI VIP 的 aclk 和 aresetn 端口連接配接到塊設計的輸入

AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真

8、打開“位址編輯器 (Address Editor)”頁籤(“視窗 (Window) > 位址編輯器 (Address Editor)”),然後單擊“自動配置設定位址 (Auto Assign Address)”圖示

AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真
  1. 确認此位址設定為 0x4000_0000
    AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真

注:此處位址的上半部分無關緊要,因為 AXI GPIO 的 S_AXI 接口,其中僅有 9 個位址位連接配接到 AXI VIP

點選“驗證塊設計”圖示。確定其中不存在任何嚴重警告或錯誤。然後儲存塊設計。現在,我們需要更新測試激勵檔案,以聲明例化并控制 AXI VIP。為此,我們将按照(PG267(2019年 10 月 30 日v1.1))中“實用編碼指南與示例”章節的内容來進行操作。

AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真
  1. 從“源 (Sources)”視窗打開測試激勵檔案 AXI_GPIO_tb.sv
AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真

測試激勵檔案中已包含部分信号(例如,時鐘和複位)的控制邏輯,并包含将 LED 狀态輸出至控制台的流程。

always @(posedge led_1)

begin

     $display("led 1 ON");

end

always @(negedge led_1)

begin

     $display("led 1 OFF");

end
           

在“實用編碼指南與示例”中提到的第 1 步是在 SystemVerilog 測試激勵中建立 1 個子產品。此操作在此測試激勵檔案中已完成。

第 2 步是導入 2 個必需的包:axi_vip_pkg 和<component_name>_pkg。

注:請使用以下 Tcl 指令來查找 VIP 執行個體的 <component_name>,以及對應于 AXI 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 <component_name>_pkg.

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 步為建立新代理并将其啟動。

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();
           

準備就緒,可以發送傳輸事務了。

發送 AXI4-Lite 傳輸事務其實很簡單。

隻需使用AXI4LITE_WRITE_BURST(addr,prot,data,resp) API 執行寫傳輸事務,

使用AXI4LITE_READ_BURST(addr,prot,data,resp) API 執行讀傳輸事務即可。

注:AXI VIP 的所有 API 都記錄在 zip 檔案中,您可從 china.xilinx.com 下載下傳該檔案。

(下載下傳方法如下:掃碼進入Xilinx官網/技術支援,

搜尋“AXI VIP”即可找到ZIP檔案包或輸入網址 搜尋框内輸入“AXI VIP”

https://china.xilinx.com/support.html#documentation

AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真
AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真

在本教程中,我們将嘗試開關連接配接到 AXI GPIO 通道 1 的 LED_1,并讀取連接配接到 AXI GPIO 通道 2 的 SWITCH_1 的狀态。

通過檢視 AXI GPIO IP 的寄存器映射((PG144)的表 2-4)可知,我們必須在位址 0x0 執行寫操作,在位址 0x8 執行讀操作:

AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真
AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真

我們将從寫操作開始,嘗試切換 LED_1 的狀态。

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);
           

下一步,我們将讀取開關位置的每次變更,并向控制台顯示開關狀态。

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 的開啟和關閉,并可看到開關狀态

AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真

現在,我們即可對 AXI4-Lite 接口上的傳輸事務進行分析

19、在“範圍 (Scope)”視窗中,選中位于“AXI_GPIO_tb > UUT >AXI_GPIO_Sim_i”下的 axi_vip_0

AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真

20、在“對象 (Objects)”視窗中,右鍵單擊 M_AXI 協定執行個體,然後單擊“添加到波形視窗 (Add to Wave Window)”

AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真

21、 重新啟動仿真,并運作 3us

這樣在 AXI4-Lite 接口上将可看到 4 個傳輸事務:2 個寫傳輸事務後接 2 個讀傳輸事務

AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真

22、展開 M_AXI 協定執行個體,檢視各個通道

這樣可以看到寫傳輸事務中的各個步驟。首先,當 READY 和 VALID 信号在寫位址通道上均處于高位(AWREADY 和 AWVALID)時,位址從主接口傳輸到從接口

AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真

随後,當 READY 和 VALID 信号在寫通道上均處于高位(WREADY 和 WVALID)時,資料從主接口傳輸到從接口。

注:每個位址僅傳輸一個資料,因為在 AXI4-Lite 接口上不支援突發 (burst) 讀寫。

AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真

最後,當從接口在寫響應通道上發送寫響應(以表明寫操作是否成功)時,寫傳輸事務即告完成。當 READY 和 VALID 信号在寫響應通道上均處于高位(BREADY 和 BVALID)時,響應從從接口傳輸到主接口

AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真

對于讀傳輸事務,同樣可執行此分析。首先,當 READY 和 VALID 信号在讀位址通道上均處于高位(ARREADY 和 ARVALID)時,位址從主接口傳輸到從接口

AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真

随後,當 READY 和 VALID 信号在讀通道上均處于高位(RREADY 和 RVALID)時,資料從從接口傳輸至主接口。

AXI 基礎第 3講——使用AXI VIP 對 AXI4-Lite 主 (Master) 接口進行仿真

注:執行讀傳輸事務期間,從接口也會發送讀響應以訓示讀操作是否成功。

此響應将與讀通道上的資料同時發送。

AXI

繼續閱讀