Xilinx AXI 验证 IP (VIP)作为AXI4-lite master 仿真验证AXI4-lite slave

原文链接:https://blog.csdn.net/qq_28398969/article/details/90022258
样例工程下载:https://download.csdn.net/download/qq_28398969/11168139

AXI 验证 IP 简介

AXI Stream VIP 可用于为支持定制 RTL 设计流程的 AXI 主设备及 AXI 从设备验证连接和基本功能性。此外,它还支持贯通模式,该模式明显有助于用户监控事务处理信息/吞吐量或驱动有源激励。AXI VIP 提供的实例测试台和测试可演示 AXI4-Stream 的能力。这些实例可作为一个起点,为支持 AXI3、 AXI4、和 AXI4-Lite 接口的定制 RTL 设计创建测试。这些实例可通过 IP 集成器访问。

AXI 验证 IP

  • 支持所有协议数据位宽及地址位宽、传输类型与响应
  • 全面的 AXI 协议检查器支持
  • 集成的 ARM 许可证协议断言
  • 事务处理级协议校验(突发类型、长度、大小、锁定类型、高速缓存类型)
  • 行为 SystemVerilog 语法
  • SystemVerilog 基于类别的 API
  • 可配置仿真消息发送
  • 在 Vivado 设计套件中提供
  • 在 IP 集成器中提供的 SystemVerilog 实例设计与测试台
  • 支持的仿真器 :Aldec Riviera-PRO、Cadence Incisive 企业仿真器、Vivado 仿真器、Mentor
    Graphics Questa Prime 和 Synopsys VC

下面通过一个简单的例子来举例使用AXI4 VIP 作为主机去读写AXI4-Lite 从机接口
环境:win7 + vivado2018.3

  1. vivado新建工程
    Xilinx AXI 验证 IP (VIP)作为AXI4-lite master 仿真验证AXI4-lite slave_第1张图片
  2. Create a new Bock Design (BD)
    Xilinx AXI 验证 IP (VIP)作为AXI4-lite master 仿真验证AXI4-lite slave_第2张图片
  3. 添加AXI4 VIP IP核
    Xilinx AXI 验证 IP (VIP)作为AXI4-lite master 仿真验证AXI4-lite slave_第3张图片
  4. 接口模式配置成Master,接口配置成AXI4-Lite,其他默认。
    Xilinx AXI 验证 IP (VIP)作为AXI4-lite master 仿真验证AXI4-lite slave_第4张图片
  5. 添加一个AXI4-Lite slave作为DUT,这里选择AXI BRAM
    同样,双击IP配置接口为AXI4-Lite
    Xilinx AXI 验证 IP (VIP)作为AXI4-lite master 仿真验证AXI4-lite slave_第5张图片
  6. 接下来是连线,这里需要手动连线,先不要使用自动连线。
  7. 把AXI VIP的时钟和复位引出来(Make external.)。
  8. 把AXI BRAM的时钟和复位连到AXI VIP的时钟和复位上。
    此时的BD如图
    Xilinx AXI 验证 IP (VIP)作为AXI4-lite master 仿真验证AXI4-lite slave_第6张图片
  9. 再使用自动连线。
    Xilinx AXI 验证 IP (VIP)作为AXI4-lite master 仿真验证AXI4-lite slave_第7张图片
  10. 最终BD如图。
    Xilinx AXI 验证 IP (VIP)作为AXI4-lite master 仿真验证AXI4-lite slave_第8张图片
  11. 在Address Editor tab,使用自动分配地址来给AXI BRAM IP.分配一个地址。在这个例子里,分配的基地址是0xC000_0000。
    Xilinx AXI 验证 IP (VIP)作为AXI4-lite master 仿真验证AXI4-lite slave_第9张图片
  12. 保存BD,然后生成输出文件。generate the output products
    Xilinx AXI 验证 IP (VIP)作为AXI4-lite master 仿真验证AXI4-lite slave_第10张图片
    Xilinx AXI 验证 IP (VIP)作为AXI4-lite master 仿真验证AXI4-lite slave_第11张图片
  13. 给BD加上一层包装器。wrapper
    Xilinx AXI 验证 IP (VIP)作为AXI4-lite master 仿真验证AXI4-lite slave_第12张图片
    Xilinx AXI 验证 IP (VIP)作为AXI4-lite master 仿真验证AXI4-lite slave_第13张图片
  14. 创建一个新的仿真文件,语言要选择systemVerilog (VIP只工作在systemVerilog下)。
    Xilinx AXI 验证 IP (VIP)作为AXI4-lite master 仿真验证AXI4-lite slave_第14张图片
    Xilinx AXI 验证 IP (VIP)作为AXI4-lite master 仿真验证AXI4-lite slave_第15张图片
  15. 编辑vip_tb.sv文件,加入下列内容。注意:导入的包需要根据你的文件命名来定义,我这里使用的是默认的文件名。无脑复制粘贴仿真可能会失败。
`timescale 1ns / 1ns

// Create a new simulation source file of type systemVerilog 
// ***The VIP only works with systemVerilog.***


// Add the required packages as mentioned in the VIP GUI
// import axi_vip_v1_0_2_pkg::*;
import design_1_axi_vip_0_0_pkg::*;

module tb_AXI_VIP_Master();

    // Declare the test bench signals    
    bit aclk    = 0;
    bit aresetn = 0;

    bit[31:0] 	addr1       = 32'hC0000000;
    bit[31:0]   addr2       = 32'hC0000004;
    bit[31:0] 	data_wr1    = 32'h01234567;
    bit[31:0]   data_wr2    = 32'h89ABCDEF;
    bit[31:0]   prot        = 0;
    bit[31:0] 	data_rd1;
    bit[31:0]   data_rd2;
    bit 	    resp;

    // Clock generateer
    always begin
        #5ns;
        aclk = ~aclk;
    end 

    // Instantiate the BD
    design_1_wrapper DUT
    (
        .aclk_0     (   aclk    ),
        .aresetn_0  (   aresetn )
    );

    // Declare the agent for the VIP (one agent for one AXI VIP has to be declared). 
    // We want the VIP to act as a Master. Thus the type of the agent will be _mst_t
    design_1_axi_vip_0_0_mst_t master_agent;


    // Create a new agent and pass the hierarchy path of IF correctly into the new function
    // Set a tag for agents for easy debug
    // set print out verbosity level for the agent
    // Start the agent
    initial begin
        // Create an agent
        master_agent = new("master vip agent",DUT.design_1_i.axi_vip_0.inst.IF);
     
        // set tag for agents for easy debug
        master_agent.set_agent_tag("Master VIP");
     
        // set print out verbosity level.
        master_agent.set_verbosity(400);
     
        //Start the agent
        master_agent.start_master();
        
        #50ns
        aresetn = 1;

        // Use the tasks AXI4LITE_READ_BURST and AXI4LITE_WRITE_BURST to send read and write commands
        
        #20ns
        master_agent.AXI4LITE_WRITE_BURST(addr1,prot,data_wr1,resp);
        
        #20ns
        master_agent.AXI4LITE_WRITE_BURST(addr2,prot,data_wr2,resp);
        
        #70ns
        master_agent.AXI4LITE_READ_BURST(addr1,prot,data_rd1,resp);
        
        #20ns
        master_agent.AXI4LITE_READ_BURST(addr2,prot,data_rd2,resp);
        
        #200ns
        if( (data_wr1 == data_rd1) && (data_wr2 == data_rd2) )
            $display("****** Data match, test succeeded ******");
        else
            $display("****** Data do not match, test failed ******");
        
        $finish;
        
    end

endmodule

  1. 保存,运行仿真。结果如图,TCL窗口显示,****** Data match, test succeeded ******";仿真成功。
    Xilinx AXI 验证 IP (VIP)作为AXI4-lite master 仿真验证AXI4-lite slave_第16张图片
  2. 以上。
  3. 引用资料:
    https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842507/Using+the+AXI4+VIP+as+a+master+to+read+and+write+to+an+AXI4-Lite+slave+interface

你可能感兴趣的:(zynq)