Zynq学习笔记--AXI 总线仿真(AXI VIP)

目录

1. 概述

2. Simulation with AXI VIP

2.1 axi_vip_pkg

 2.2 design_1_axi_vip_0_0_pkg

 2.3 参数指定

3. 实例化注意事项

3.1 名称对应关系

3.2 寄存器地址

 3.3 block design


1. 概述

AXI Verification IP(AXI VIP)是一种用于验证AXI总线协议的仿真工具,可帮助开发人员在设计阶段发现和解决潜在的硬件设计问题。通过使用AXI VIP,用户可以在仿真环境中模拟AXI总线的行为,验证设计的正确性和性能。

它只是一个仿真IP,不会被综合到最终的硬件中。

2. Simulation with AXI VIP

首先需要导入两个SystemVerilog包。类似于python中的导入。两者都用于导入代码中定义的函数、参数、类等,以便在当前文件中使用。

在SystemVerilog中,包是一种封装数据类型、任务和函数的机制,通常用于在不同的模块间共享。而Python的模块和包是文件和文件夹的集合,用于组织和重用代码。

import axi_vip_pkg::*; // 系统自带:<loc>/Vivado/2022.1/data/xilinx_vip/hdl/axi_vip_pkg.sv
import design_1_axi_vip_0_0_pkg::*; //在工程目录中

 我在注释中标注了包的具体位置,可以查看该包的具体行为。

2.1 axi_vip_pkg

定义了一个名为 axi_mst_agent 的SystemVerilog类,继承自 xil_agent。

宏定义:AXI_PARAM_DECL 是一个宏定义。
类扩展:axi_mst_agent 类通过 AXI_PARAM_DECL 宏应用这些参数,并扩展了 xil_agent 类。
组件实例化:
        monitor:用于监控AXI总线上的事务。
        wr_driver:用于驱动AXI总线上的写操作。
        rd_driver:用于驱动AXI总线上的读操作。
构造函数:new 函数是类的构造函数,用于创建 axi_mst_agent 实例。它初始化了监控器、写驱动器、读驱动器,并将虚拟接口与代理关联起来。
虚拟接口:axi_vip_if 是一个虚拟接口,它允许 axi_mst_agent 与AXI总线的物理信号进行交互。
代理设置:vif_proxy 是一个代理,用于将虚拟接口的操作映射到物理接口。这允许在仿真环境中模拟实际的硬件行为。

<axi_vip_pkg.sv> 中定义的 axi_mst_agent 类,继承自xil_agent`define AXI_PARAM_DECL #( //宏定义int C_AXI_PROTOCOL=0,C_AXI_ADDR_WIDTH=32, C_AXI_WDATA_WIDTH=32,C_AXI_RDATA_WIDTH=32,C_AXI_WID_WIDTH=0,…)class axi_mst_agent `AXI_PARAM_DECL extends xil_agent;axi_monitor       `AXI_PARAM_ORDER monitor;axi_mst_wr_driver `AXI_PARAM_ORDER wr_driver;…function new (string name = "unnamed_axi_mst_agent",virtual interface axi_vip_if `AXI_PARAM_ORDER vif);super.new(name); //调用其基类的构造函数this.monitor   = new($sformatf("%s_monitor",name));this.wr_driver = new($sformatf("%s_wr_driver",name));this.rd_driver = new($sformatf("%s_rd_driver",name));this.vif_proxy = new($sformatf("%s_vif",name));this.vif_proxy.assign_vi(vif);this.set_vif(this.vif_proxy);endfunction : new  // axi_mst_agent类构造函数
…
endclass : axi_mst_agent

 2.2 design_1_axi_vip_0_0_pkg

定义了一个封装包,其中包含了一些参数和类型定义,用于配置和实例化AXI VIP组件。

首先,在package中定义了一些参数,如VIP_PROTOCOL和VIP_READ_WRITE_MODE,用于指定AXI VIP的协议和读写模式。

然后,通过typedef关键字定义了一个名为design_1_axi_vip_0_0_mst_t的类型,该类型是axi_mst_agent类的特化版本,根据之前定义的参数进行特化。

启动验证组件的示例代码:

首先声明了一个名为master_agent的design_1_axi_vip_0_0_mst_t类型的对象,然后在initial块中创建并启动了这个agent。通过实例化和启动这个agent,可以开始对AXI VIP进行仿真测试。最后,使用endpackage关键字结束了这个封装包的定义。

 2.3 参数指定

SystemVerilog中,类并不直接支持像C++Java中的模板化(泛型)编程,但它允许你创建参数化的类,这些参数通过顺序指定。如下:

// <component_name>_pkgparameter design_1_axi_vip_0_0_VIP_PROTOCOL         = 2;
parameter design_1_axi_vip_0_0_VIP_READ_WRITE_MODE  = "READ_WRITE";
parameter design_1_axi_vip_0_0_VIP_INTERFACE_MODE   = 0;
parameter design_1_axi_vip_0_0_VIP_ADDR_WIDTH       = 32;
parameter design_1_axi_vip_0_0_VIP_DATA_WIDTH       = 32;
…typedef axi_mst_agent #(design_1_axi_vip_0_0_VIP_PROTOCOL, design_1_axi_vip_0_0_VIP_ADDR_WIDTH,design_1_axi_vip_0_0_VIP_DATA_WIDTH,design_1_axi_vip_0_0_VIP_DATA_WIDTH,design_1_axi_vip_0_0_VIP_ID_WIDTH,…
) design_1_axi_vip_0_0_mst_t;

3. 实例化注意事项

3.1 名称对应关系

3.2 寄存器地址

 3.3 block design

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/313473.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL行格式(row format)

MySQL行格式&#xff08;row format&#xff09; 表的行格式决定了其行的物理存储方式&#xff0c;这反过来又会影响查询和 DML 操作的性能。随着单个磁盘页面容纳更多行&#xff0c;查询和索引查找可以更快地工作&#xff0c;缓冲池中需要的高速缓存内存更少&#xff0c;写出…

Linux的学习之路:6、Linux编译器-gcc/g++使用

摘要 本文主要是说一些gcc的使用&#xff0c;g和gcc使用一样就没有特殊讲述。 目录 摘要 一、背景知识 二、gcc如何完成 1、预处理(进行宏替换) 2、编译&#xff08;生成汇编&#xff09; 3、汇编&#xff08;生成机器可识别代码 4、链接&#xff08;生成可执行文件或…

安宝特方案 | AR工业解决方案系列-工厂督查

在工业4.0时代&#xff0c;增强现实&#xff08;AR&#xff09;技术正全面重塑传统工业生产&#xff0c;在工厂监督领域&#xff0c;其应用不仅大幅提升了生产效率、监测准确性和规范执行程度&#xff0c;而且为整体生产力带来了质的飞跃。 01 传统挑战与痛点 在制造业生产流程…

uni.uploadFile上传图片后台接收不到数据

今天遇到一个很奇怪的问题&#xff0c;通过使用uni.uploadFile上传文件时后端接收不到文件&#xff0c;查过很多资料&#xff0c;原来是自定义了header的Content-Type问题。取消即可&#xff0c;另把自定义文件上传的代码贴出来。 分析&#xff1a;当我们加上请求头的时候 不…

DY视频评论ID爬取采集工具|短视频评论怕两提取获客

DY评论批量抓取工具&#xff1a;轻松拓展客户群&#xff0c;实时监控用户反馈 在当今竞争激烈的市场环境下&#xff0c;了解用户的反馈和需求对于企业的发展至关重要。作为一款风靡全球的社交媒体平台&#xff0c;&#xff08;DY&#xff09;汇聚了大量用户&#xff0c;而这些…

SQL表连接详解:JOIN与逗号(,)的使用及其性能影响

省流版 在这个详细的解释中&#xff0c;我们将深入探讨SQL中表连接的概念&#xff0c;特别是JOIN和逗号&#xff08;,&#xff09;在连接表时的不同用法及其对查询性能的影响。通过实际示例和背后的逻辑分析&#xff0c;我们将揭示在不同场景下选择哪种连接方式更为合适。 1.…

ChatGPT及GIS、生物、地球、农业、气象、生态、环境科学领域案例

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

使用Docker部署Node.js

第一步&#xff1a;在Node.js项目的根目录中新建Dockerfile文件 # 使用官方 Node.js 镜像作为基础镜像 FROM node:latest# 设置工作目录 WORKDIR /usr/src/app# 将项目文件复制到容器中 COPY . .# 将npm源设置为淘宝镜像 RUN npm config set registry https://registry.npmmir…

算法部署 | 使用TensorRT部署AlphaPose姿态估计算法

项目应用场景 面向 AlphaPose 姿态估计算法的推理加速场景&#xff0c;项目采用 TensorRT 进行 GPU 算法加速推理。 项目效果 项目细节 > 具体参见项目 README.md (1) 模型转换 python pytorch2onnx.py --cfg ./configs/coco/resnet/256x192_res50_lr1e-3_1x.yaml --chec…

【机器学习300问】67、均方误差与交叉熵误差,两种损失函数的区别?

一、均方误差&#xff08;Mean Squared Error, MSE&#xff09; 假设你是一个教练&#xff0c;在指导学生射箭。每次射箭后&#xff0c;你可以测量子弹的落点距离靶心的差距&#xff08;误差&#xff09;。MSE就像是计算所以射击误差的平方后的平均值。它强调了每一次偏离靶心的…

python/pygame 挑战魂斗罗 笔记(三)

感觉最难的部分已经解决了&#xff0c;下面开始发射子弹。 一、建立ContraBullet.py文件&#xff0c;Bullit类&#xff1a; 1、设定子弹速度 Config.py中设定子弹移动速度为常量Constant.BULLET_SPEED 8。 2、载入子弹图片&#xff1a; 图片也是6张&#xff0c;子弹发出后…

盲人导航功能特点:革新出行体验的实时避障应用深度解析

作为一名资深记者&#xff0c;我有幸亲历并详尽报道一款专为盲人群体设计的导航应用叫做蝙蝠避障&#xff0c;它不仅提供了精准的路线指引&#xff0c;更创新性地融入了实时避障功能。这款应用凭借其盲人导航功能特点&#xff0c;正以前所未有的方式提升盲人的出行自由度与安全…

CSS导读 (CSS的三大特性 上)

&#xff08;大家好&#xff0c;今天我们将继续来学习CSS的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 五、CSS的三大特性 5.1 层叠性 5.2 继承性 5.2.1 行高的继承 5.3 优先级 小练习 五、CSS的三大特性 …

工作流JBPM系统数据库表介绍

文章目录 ☃️4.1 建表☃️4.2 数据库逻辑关系4.2.1 资源库与运行时的表4.2.2 历史数据表 ☃️4.3 表结构☃️4.4 流程操作与数表交互说明 ☃️4.1 建表 该系统自带18张表&#xff0c;用于支撑该系统的逻辑与流程业务&#xff1b; 建表语句如下&#xff1a; create database…

突破“三个九”!离子阱量子计算再创新高

如果把量子计算比作一场球赛&#xff0c;Quantinuum无疑又打了一记漂亮的好球。实际上&#xff0c;结合今年春季在量子体积、逻辑量子比特和布线问题等方面的进展&#xff0c;这个团队已经接近于完成一场完美的比赛。 3月&#xff0c;Quantinuum的研究人员证明了QCCD架构的可扩…

跟bug较劲的第n天,undefined === undefined

前情提要 场景复现 看到这张图片&#xff0c;有的同学也许不知道这个冷知识&#xff0c;分享一下&#xff0c;是因为我在开发过程中踩到的坑&#xff0c;花了三小时排查出问题的原因在这&#xff0c;你们说值不值。。。 我分享下我是怎么碰到的这个问题&#xff0c;下面看代码…

硬件学习件Cadence day16 做个笔记 元器件的原理图模型绘画时,怎么填充模型 。换一种说法:元器件原理图中怎么画出实心的模型

1. 首先使用的 cadence 的版本 candence 16.6 2. candence 怎么绘画一个封闭图形 1. 需要找到这个画线的东西。 2. 这个画线的东西&#xff0c; 需要倾斜角度连线时需要按下 键盘上的Shift 按键。 3. 这个东西画形状最好是一个封闭的图形。 3. 填充的方法 1.双击图形&#xf…

Sonar下启动发生错误,elasticsearch启动错误

Download | SonarQube | Sonar (sonarsource.com) 1.首先我的sonar版本为 10.4.1 &#xff0c;java版本为17 2.sonar启动需要数据库,我先安装了mysql, 但是目前sonar从7.9开始不支持mysql&#xff0c;且java版本要最少11,推荐使用java17 3.安装postsql,创建sonar数据库 4.启…

SpringMVC 常用注解介绍

Spring MVC 常用注解介绍 文章目录 Spring MVC 常用注解介绍准备1. RequestMapping1.1 介绍2.2 注解使用 2. 请求参数2.1 传递单个参数2.2 传递多个参数2.3 传递对象2.4 传递数组 3. RequestParam3.1 注解使用3.2 传入集合 4. RequestBody5. PathVariable6. RequestPart7. Rest…

每日一题---OJ题: 链表的回文结构

片头 嗨! 小伙伴们,大家好! 今天我们来一起学习这道OJ题--- 链表的回文结构 嗯...这道题好像不是很难,我们来分析分析 举个例子: 我们可以看到,上图中的两个链表都是回文结构: 即链表的回文结构是指一个链表中的结点值从前往后读和从后往前读都是一样的结构。也就是说&#xf…