一种vivado联合vcs仿真以及verdi查看波形的方法

news2024/9/26 5:18:32

上一篇中提到vivado仿真xilinx官方的axi vip耗时过长、且每次缩放波形时加载慢的问题。后来用了正点原子的AXI DDR例程,将AXI DDR换成了AXI RAM进行读写测试,用以学习了解AXI的工作方式。详见此文读写AXI4接口RAM的简单示例_给米PHY的博客-CSDN博客。

在掌握了基本的AXI读写功能的情况下,感觉上文的AXI读写测试较为简单,若想要深入则必须吃透xilinx官方给的AXI VIP的例子。鉴于vivado仿真慢的问题,结合公司自带vcs和verdi软件,利用vcs进行编译、仿真,利用verdi进行波形查看,以下是本人在试错过程中得到的经验。

Xilinx官方AXI VIP的操作可参见此处:Xilinx Customer Community

前提:

在自己的home下,.cshrc中添加module add synopsys,module load synopsys,并source .cshrc,之后再在此终端中打开vivado。不进行这一步的话vivado不知道VCS的环境变量以及路径。

步骤1:生成示例工程

在vivado中打开AXI VIP,右键AXI VIP,点击“Open IP Example Design”,生成示例工程。

步骤2:加入波形dump语句

在“Simulation Source”中的顶层文件中加入波形dump语句。例如下图中该仿真文件激活(active),在该仿真文件中加入dump语句。

 步骤3:设置仿真工具

在vivado中的菜单栏点击Tool > Simulation,Target simulator点击VCS,编译库位置选择如下。

在3rd Party Simulator中设置VCS的路径,以及上一步的编译库路径。

 步骤4:编译

在Tool中点击Compile Simulation Libraries。

 之后出来的图片如下所示,步骤3设置的路径会在此处体现。之后点击compile。

 步骤5:导出simulation

在File中,点击Export,再点击Export Simulation。

选择仿真器为VCS,编译的路径与步骤3一样, 导出的路径可以为任何地方,但是最好是在各自的仿真文件夹之下,此处我设置的如下。注意,默认的导出目录并不是我设置的目录,故需要勾选“Use absolute paths(使用绝对路径)”,以方便文件加载。

同时,由于verdi所需,故将源文件也导出。当然,Overwrite file选项可以勾选,也可以不勾选。

  步骤6:运行导出的shell文件

进入步骤5中的导出文件夹,该文件夹下有一个vcs目录,进入该目录。

修改导出的shell文件,如下,在vcs_elab_opts中加入“-R -fsdb”选项:

保存后,在终端里键入命令 ./xxx.sh,例如我导出的是axi_vip_0__exdes_basic_mst_active_pt_mem__slv_passive.sh,直接键入命令:

./axi_vip_0__exdes_basic_mst_active_pt_mem__slv_passive.sh

即可运行。运行后生成了很多文件,其中有fsdb文件以及vf文件,vf文件中是包含fsdb文件的。

步骤7:生成filelist文件

由于在步骤5中导出了源文件到vcs目录,利用python脚本将源文件的路径读出并生成filelist文件,我生成的是verdi.f文件。python脚本出自此处:用Python遍历指定文件夹下所有文件 - 知乎

之后运行该脚本,键入如下命令。

python3 xxx.py > verdi.f

步骤8:用verdi查看波形

一路走下来,应该是很顺利的,那就直接键入verdi命令即可打开波形。

verdi -f verdi.f -ssf *.vf & 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣题库刷题笔记20-有效的括号

1、题目如下: 2、个人Python代码实现如下: 第一次读题就理解错了题意,以为是只判断小括号闭合,大括号、中括号只是干扰元素。再次读题后,代码实现如下: 以上代码仍旧是没有理解清楚题意,以为是只…

Linux Shell 实现一键部署二进制docker+docker_compose

docker 前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 d…

协议篇之以太网UDP协议

协议篇之以太网UDP协议一、写在前面二、TCP/IP协议分层三、UDP协议数据报格式2.1 MAC层/物理层:2.2 IP层/网络层:2.3 UDP层/传输层:2.4 应用层:四、总结四、写在后面一、写在前面 TCP/IP协议是指一个协议簇,可以理解为…

测试包的更新

有的项目有配了ci自动打包更新,开发有权限,就不用测试更新;有的是在阿里云上,测试没有权限,也是开发更新;测试自己的测试服务器,部分开发没有上传下载的权限,所以需要测试来进行更新…

CentOS 8自动化安装MongoDB并安装和实验master-slave集群、副本集群(Replica Set)、分片集群(Sharding)

文章目录CentOS 8自动化安装MongoDB安装Master-Slave集群安装并测试副本集(Replica Set)集群安装副本集(Replica Set)集群实验测试安装并测试分片集群(Sharding)注意实验使用的是ARM架构的CentOS 8 虚拟机 CentOS 8自动化安装MongoDB 首先,更…

分布式事务-概念-实现方式

分布式事务 文章目录分布式事务一、分布式事务相关概念1.分布式事务架构图2.理解本地事务相关概念3.理解分布式事务相关概念1.CAP理论2.刚性事务(CP)与柔性事务(AP)3.基于AP模型衍生下的BASE理论4 .如何从大方向选择分布式事务&am…

MySQL正则表达式 | 事务详解

目录 一、正则表达式 实例操作 二、事务 事务控制语句 MYSQL 事务处理主要有两种方法 SQL测试代码 PHP中使用事务实例 使用保留点 SAVEPOINT 一、正则表达式 MySQL可以通过 LIKE ...% 来进行模糊匹配。 MySQL 同样也支持其他正则表达式的匹配, MySQL中使用…

【嵌入式Linux内核驱动】GPIO子系统

GPIO子系统 总体框架 通用功能 可以设为输出:让它输出高低电平;可以设为输入,读取引脚当前电平;可以用来触发中断 通用属性 Active-High and Active-LowOpen Drain and Open Source 开漏和开源 GPIOLIB向上提供的gpiod相关接…

数据结构与算法之手撕排序算法

前言 为什么要学习排序算法? 根据统计,早起大型机CPU资源的四分之一都花在了数据排序上面。排序算法作为最基础的算法,各种操作系统、编程语言都提供了内置的实现。既然排序实现随处可见,我们为什么还要自己动手实现呢&#xff1…

文章伪原创-文章伪原创工具

伪原创原理 文章伪原创的原理是将一篇原始文章进行修改、改写、调整或者替换一些词句等方式,生成与原始文章类似但又不完全相同的新文章。 文章伪原创的实现需要用到自然语言处理技术和相关的算法。具体的过程包括以下几个步骤: 分析原始文章&#xff…

YML是一种数据存储格式

读取yml配置信息 Value("${province}") private String province; Value("${user.sname}") private String name1; Value("${user1[1].name}") private String name; Value("${server.port}") private int port; server:port: 8099 #…

大数据现在找工作难么

大数据行业工作好找还是难找不是光靠嘴说出来的结合实际,看看市场上的招聘需求和岗位要求就大致知道了 要想符合企业用人规范,学历,工作经验,掌握技能都是非常重要的~ 先来看几个招聘网站的报告数据: Boss直聘发布的…

Linux应用编程(系统信息与系统资源)

在应用程序当中,有时往往需要去获取到一些系统相关的信息,譬如时间、日期、以及其它一些系统相关信息,本章将向大家介绍如何通过 Linux 系统调用或 C 库函数获取系统信息,譬如获取系统时间、日期以及设置系统时间、日期等&#xf…

java拦截器怎么实现

Java拦截器是一种对象拦截器,它可以拦截任何的类、方法和字段。拦截器还可以用于检查类是否已经加载以及对字段的访问权限是否符合规范。下面就让我们来了解一下 java拦截器怎么实现吧。 在 Java中,可以通过重写方法和代码块来实现拦截功能,但…

通俗讲解什么是Socket通讯

Socket通讯原理 1、什么是Socket? Socket,即套接字。就是两台主机之间逻辑连接的端点。(通俗来说:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket)。 Socket是一套…

【python】类和对象 | 一些混淆的知识点再复盘 | 魔术方法(特殊方法)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、魔术方法二、构造方法三、__ getitem __方法四、__ len __方法前言 参考视频:视频 一、魔术方法 首先看一看chatgpt对魔术方法(特…

一图看懂 xlsxwriter 模块:用于创建 Excel .xlsx 文件, 资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 xlsxwriter 模块:用于创建 Excel .xlsx 文件, 资料整理笔记(大全)摘要模块图类关系图模块全展开【xlsxwriter】统计常量模块1 xlsxwrite…

数据爬虫爬数据时常遇到的问题

第一,可能不能直接通过pyppeteer简单的直接page.querySelectorAll()获取所有元素然后直接 str(await (await element_songer_name.getProperty("title")).jsonValue()) 得到数据值,主要原因可能是#document问题, 所以遇到这个问题…

vue项目配置不同环境打包指令(vue-cli2、vue-cli3项目)

目录 一、vue-cli3项目:1、项目根目录创建环境文件2、 配置打包指令3、打包生成不同的dist文件夹 二、vue-cli2项目1、配置指令2.创建环境文件3、config/index.js中添加 三、遇到的问题1.vue-cli3项目配置打包指令,没有生成css文件--mode test2、vue-cli…

UE DTMqtt 虚幻引擎 Mqtt 客户端插件说明

目录 CreateMqttClient Connect Subscribe UnSubscribe Publish Disconnect BindConnectedDelegate BindConnectionLostDelegate BindMessageDelegate CreateMqttClient 创建一个Mqtt客户端对象 Connect 链接Mqtt服务器Subscribe 订阅消息频道UnSubscribe 取消订阅频道…