Vivado仿真实战:使用AXI VIP验证AXI_Reg配置寄存器IP核

在之前的文章中,我们介绍了如何封装AXI_Reg配置寄存器IP核Vivado实战:封装AXI4-Lite配置寄存器IP核(AXI_Reg)。本文将重点介绍如何使用AXI Verification IP(AXI VIP)FPGA验证利器:全方位解析AXI Verification IP (AXI VIP)对这个IP核进行全面的仿真验证,确保其功能的正确性和可靠性。

一、仿真环境搭建

1.1 仿真工程结构

我们搭建的仿真环境包含以下组件:

  • AXI VIP:作为AXI主设备,模拟处理器对IP核的访问

  • AXI_Reg IP核:待测试的配置寄存器模块

  • 时钟和复位发生器:提供系统时钟和复位信号

仿真环境结构图:

1.2 地址空间分配

在仿真中,我们为AXI_Reg IP核分配了以下地址空间:

  • 基地址0x8000_0000

  • 写地址范围0x8000_0000 - 0x8000_001C(对应8个配置寄存器)

  • 读地址范围0x8000_0020 - 0x8000_003C(对应8个状态寄存器)

1.3 IP核配置

我们将AXI_Reg IP核配置为:

  • 输出寄存器数量:6个(data_reg0_o - data_reg5_o

  • 输入寄存器数量:2个(data_reg0_i - data_reg1_i

  • 数据位宽:32位

  • 地址位宽:32位

配置界面截图:

二、测试平台设计

2.1 测试平台代码

以下是测试平台代码,展示了如何使用AXI VIP对AXI_Reg IP核进行读写测试,完整代码请自行下载

//Main process
  initial begin
    mst_agent = new("master vip agent",DUT.design_1_i.axi_vip_0.inst.IF);
    mst_agent.set_agent_tag("Master VIP");
    mst_agent.start_master();

    mst_agent.AXI4LITE_WRITE_BURST(32'h8000_0000,0,32'h5A5A_5A5A,mtestBresp);
    mst_agent.AXI4LITE_WRITE_BURST(32'h8000_0004,0,32'hA5A5_A5A5,mtestBresp);
    mst_agent.AXI4LITE_WRITE_BURST(32'h8000_0008,0,32'h1B1B_1B1B,mtestBresp);
    mst_agent.AXI4LITE_WRITE_BURST(32'h8000_000C,0,32'h2C2C_2C2C,mtestBresp);
    mst_agent.AXI4LITE_WRITE_BURST(32'h8000_0010,0,32'h3D3D_3D3D,mtestBresp);
    mst_agent.AXI4LITE_WRITE_BURST(32'h8000_0014,0,32'h4E4E_4E4E,mtestBresp);
    #3000;
    mst_agent.AXI4LITE_READ_BURST(32'h8000_0000,0,mtestRData,mtestRresp);
    mst_agent.AXI4LITE_READ_BURST(32'h8000_0004,0,mtestRData,mtestRresp);
    mst_agent.AXI4LITE_READ_BURST(32'h8000_0008,0,mtestRData,mtestRresp);
    mst_agent.AXI4LITE_READ_BURST(32'h8000_000C,0,mtestRData,mtestRresp);
    mst_agent.AXI4LITE_READ_BURST(32'h8000_0010,0,mtestRData,mtestRresp);
    mst_agent.AXI4LITE_READ_BURST(32'h8000_0014,0,mtestRData,mtestRresp);
    #300;
    mst_agent.AXI4LITE_READ_BURST(32'h8000_0020,0,mtestRData,mtestRresp);
    mst_agent.AXI4LITE_READ_BURST(32'h8000_0024,0,mtestRData,mtestRresp);

  end

  design_1_wrapper DUT(
    .data_reg0_i_0  (32'haaaa_1111),
    .data_reg1_i_0  (32'hbbbb_2222),
    .sys_clk        (clock),
    .sys_rstn       (resetn)
    );

三、仿真结果分析

3.1 写操作验证

仿真波形显示,通过AXI VIP向AXI_Reg IP核执行写操作:

写入地址写入数据输出寄存器观测值结果
0x800000000x5a5a5a5adata_reg0_o0x5a5a5a5a✅通过
0x800000040xa5a5a5a5data_reg1_o0xa5a5a5a5✅通过
0x800000080x1b1b1b1bdata_reg2_o0x1b1b1b1b✅通过
0x8000000C0x2c2c2c2cdata_reg3_o0x2c2c2c2c✅通过
0x800000100x3d3d3d3ddata_reg4_o0x3d3d3d3d✅通过
0x800000140x4e4e4e4edata_reg5_o0x4e4e4e4e✅通过

波形截图


在仿真波形中,可以清晰地看到:

  • 当时钟上升沿到来且AXI写使能有效时

  • 对应地址的寄存器被正确更新

  • 输出端口立即反映写入的数据值

3.2 读操作验证

通过设置输入寄存器值并执行读操作:

输入寄存器设置值读取地址读取数据结果
data_reg0_i0xaaaa11110x800000200xaaaa1111✅通过
data_reg1_i0xbbbb22220x800000240xbbbb2222✅通过

波形截图


读操作波形显示:

  • 输入寄存器值正确传递到AXI读数据总线

  • 读地址正确解码

  • 读响应信号正常

四、结论与项目应用

4.1 仿真结论

通过全面的仿真验证,我们确认:

  • ✅ 写功能正常:配置寄存器能够正确接收并锁存写入的数据

  • ✅ 读功能正常:状态寄存器值能够正确通过AXI接口读出

  • ✅ 地址解码正确:读写地址空间映射符合设计预期

  • ✅ 时序符合要求:所有操作都在AXI协议规定的时序内完成

4.2 在反射内存项目中的应用

这个经过验证的AXI_Reg IP核将在我们的反射内存项目中发挥重要作用:

配置功能

  • 设置数据传输模式(FAST模式/同步模式)

  • 配置看门狗时间参数

  • 使能/禁用中断功能

状态监控

  • 读取链路状态信息

  • 获取传输错误统计

  • 监控中断状态寄存器

4.3 后续工作

基于本次仿真验证的成功,我们可以:

  1. 集成到主系统:将AXI_Reg IP核集成到完整的反射内存从板设计中

  2. 软件驱动开发:基于验证过的寄存器映射开发对应的设备驱动程序

  3. 系统级验证:在更大的系统环境中进行集成测试

五、总结

本文详细介绍了使用AXI VIP对自定义AXI_Reg配置寄存器IP核进行仿真的完整流程。通过这种方法,我们能够在实际硬件实现之前充分验证IP核的功能正确性,大大提高了开发效率和代码质量。

仿真验证的价值

  • 早期发现设计缺陷,降低后期调试成本

  • 确保IP核符合AXI协议规范

  • 为系统集成提供可靠的基础模块

这个经过充分验证的AXI_Reg IP核为我们的反射内存项目奠定了坚实的基础,后续我们将在此基础上构建更复杂的功能模块。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FPGA_小田老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值