vcd波形转仿真激励
我们使用vivado的ila抓取波形后,常常希望用该波形作为激励参与仿真。稍微复杂的项目中手动输入的工作量巨大,几乎是不可能采取的方式。我的方法是保存ila波形为vcd格式文件,用python解析vcd文件,转换成仿真激励的代码。
python代码如下所示:
# -*- coding: utf-8 -*-
"""
Created on Wed Jan 29 10:04:59 2025@author: weiyi
"""import os
import syssignal = {}file = r'iladata2.vcd'with open(file,"r") as f:lines = f.readlines()for line in lines:if "$var" in line:var = line.split(" ")signal[var[3]] = [var[2],var[4]] #width + name last_time = 0with open(file+".txt","w+") as f:for line in lines:line = line.strip()if line.startswith("#"):time = int(line.strip("#"))incr_time = time - last_timelast_time = timef.write("repeat("+str(incr_time)+")@(posedge vcd_clk)" + ';\n')if line[-2:] in signal:if 'b' in line:f.write("force " + signal[line[-2:]][1] + " = " + signal[line[-2:]][0] + '\'' + line[:-2] + ";\n")else:f.write("force " + signal[line[-2:]][1] + " = " + signal[line[-2:]][0] + '\'b' + line[:-2] + ";\n")elif line[-1:] in signal:if 'b' in line:f.write("force " + signal[line[-1:]][1] + " = " + signal[line[-1:]][0] + '\'' + line[:-1] + ";\n")else:f.write("force " + signal[line[-1:]][1] + " = " + signal[line[-1:]][0] + '\'b' + line[:-1] + ";\n")f.write("repeat(1)@(posedge vcd_clk)" + ';\n')for s in signal:f.write("release " + signal[s][1] + ";\n")
vcd文件是文本文件,用$var reg 8 #" inst%/top%/rx_data [7:0] $end 定义信号。
因此我们在代码里先找到$var开头的内容,找到信号名字和位宽。信号名字就是位宽后面的#"
从$dumpvars后就开始出现具体波形。例如
#510
b10001 #"
1%.
#511
b100010 #"
#512
b110011 #"
#513
b1000100 #"
表示510时刻, #"这个信号的值是b10001,%. 这个信号的值是1。
那么我们从每遇到1个#就计算它相对于前一个#的偏移周期。用repeat(x)@(posedge vcd_clk)的方式表达出来。
简单说,这个代码就是提取了信号名称,计算时间偏移。最终得到的效果如下
repeat(0)@(posedge vcd_clk);
force _GAP = 1'b#;
force inst_eth_top/inst_tri_mac/rx_axis_mac_tdata = 8'b0 ;
force locked = 1'b1;
force inst_eth_top/inst_tri_mac/rx_axis_mac_tlast = 1'b0;
force inst_eth_top/inst_tri_mac/rx_axis_mac_tuser = 1'b0;
force inst_eth_top/inst_tri_mac/rx_axis_mac_tvalid = 1'b0;
force _TRIGGER = 1'b0;
force _WINDOW = 1'b1;
force _GAP = 1'b0;
repeat(508)@(posedge vcd_clk);
force inst_eth_top/inst_tri_mac/rx_axis_mac_tvalid = 1'b1;
repeat(1)@(posedge vcd_clk);
force inst_eth_top/inst_tri_mac/rx_axis_mac_tdata = 8'b10001 ;
repeat(1)@(posedge vcd_clk);
force _GAP = 1'b#51;
force inst_eth_top/inst_tri_mac/rx_axis_mac_tdata = 8'b100010 ;
repeat(1)@(posedge vcd_clk);
force inst_eth_top/inst_tri_mac/rx_axis_mac_tdata = 8'b110011 ;
只需要手动替换inst_eth_top/inst_tri_mac/为仿真目录需要的层级,把vcd_clk替换成真实clk,把不需要的force语句删除(选择某个单词,全选,全选当前行,删除)。就能得到一个激励task。值得注意的是,信号名称有时候是1个字符,有时候是2个字符。
本方法我已应用许久,还是比较好用的,推荐给大家。
以下给出1个vcd文件内容
$date2025-Mar-22 20:55:33
$end
$versionVivado v2022.2 (64-bit)
$end
$timescale1ps
$end
$scope module dut $end
$var reg 8 " inst_eth_top/inst_tri_mac/rx_axis_mac_tdata [7:0] $end
$var reg 1 * locked $end
$var reg 1 + inst_eth_top/inst_tri_mac/rx_axis_mac_tlast $end
$var reg 1 , inst_eth_top/inst_tri_mac/rx_axis_mac_tuser $end
$var reg 1 - inst_eth_top/inst_tri_mac/rx_axis_mac_tvalid $end
$var reg 1 . _TRIGGER $end
$var reg 1 / _WINDOW $end
$var reg 1 0 _GAP $end
$upscope $end
$enddefinitions $end
#0
$dumpvars
b0 "
1*
0+
0,
0-
0.
1/
00
$end
#508
1-
#509
b10001 "
#510
b100010 "
#511
b110011 "
#512
b1000100 "
1.
#513
b1010101 "
#514
b1011000 "
#515
b10001 "
#516
b100010 "
#517
b10110000 "
#552
b0 "
#567
0-
#571
1+
1-
#572
0+
0-
相关文章:
vcd波形转仿真激励
我们使用vivado的ila抓取波形后,常常希望用该波形作为激励参与仿真。稍微复杂的项目中手动输入的工作量巨大,几乎是不可能采取的方式。我的方法是保存ila波形为vcd格式文件,用python解析vcd文件,转换成仿真激励的代码。 python代码…...
【STM32】知识点介绍二:GPIO引脚介绍
文章目录 一、概述二、GPIO的工作模式三、寄存器编程 一、概述 GPIO(英语:General-purpose input/output),即通用I/O(输入/输出)端口,是STM32可控制的引脚。STM32芯片的GPIO引脚与外部设备连接起来,可实现与外部通讯、…...
【AI】NLP
不定期更新,建议关注收藏点赞。 目录 transformer大语言模型Google Gemma疫情网民情绪识别 整体框架 baseline构建 模型调参、模型优化、其他模型 数据trick、指标优化、magic feature 数据增强、伪标签、迁移学习 模型融合sklearn中TFIDF参数详解 频率阈值可以去掉…...
Go 代理爬虫
现在注册,还送15美金注册奖励金 --- 亮数据-网络IP代理及全网数据一站式服务商 使用代理服务器,通过 Colly、Goquery、Selenium 进行网络爬虫的基础示例程序 本仓库包含两个分支: basic 分支包含供 Go Proxy Servers 这篇文章改动的基础代码…...
【NLP 43、大模型技术发展】
目录 一、ELMo 2018 训练目标 二、GPT-1 2018 训练目标 三、BERT 2018 训练目标 四、Ernie —— baidu 2019 五、Ernie —— Tsinghua 2019 六、GPT-2 2019 七、UNILM 2019 八、Transformer - XL & XLNet 2019 1.模型结构 Ⅰ、循环机制 Recurrence Mechanism Ⅱ、相对位置…...
在普通用户下修改root用户密码
1 从普通用户切换到root用户 sudo -s 再输入密码。 2 输入passwd ,会提醒你输入当前用户密码,验证后会提醒你输入root用户密码。 3 切换到root用户,使用修改过的密码登陆。 4 成功进入root用户。...
【每日算法】Day 6-1:哈希表从入门到实战——高频算法题(C++实现)
摘要 :掌握高频数据结构!今日深入解析哈希表的核心原理与设计实现,结合冲突解决策略与大厂高频真题,彻底掌握O(1)时间复杂度的数据访问技术。 一、哈希表核心思想 哈希表(Hash Table) 是一种基于键值对的…...
go命令使用
查看配置信息 go env配置go国内源 export GO111MODULEon export GOPROXYhttps://goproxy.cn测试 go install github.com/jesseduffield/lazydockerlatesthttps://github.com/jesseduffield/lazydocker...
深入 SVG:矢量图形、滤镜与动态交互开发指南
1.SVG 详细介绍 SVG(Scalable Vector Graphics) 是一种基于 XML 的矢量图形格式,用于描述二维图形。 1. 命名空间 (Namespace) 命名空间 URI:http://www.w3.org/2000/svg 用途:在 XML 或 XHTML 中区分不同标记语言的…...
SPPAS安装及问题汇总
SPPAS下载地址 文件找不到,可能是MAC的自动化操作问题,解决方案有二: 方案一: 直接查看SPPAS中的readme,运行sppas.command 方案二: 在自动化脚本中添加 export PATH/usr/local/bin:$PATH...
LINUX基础 [三] - 进程创建
目录 前言 进程创建的初次了解(创建进程的原理) 什么是fork函数? 初识fork函数 写时拷贝 fork函数存在的意义 fork调用失败的原因 进程终止 运行完毕结果不正确 main函数返回 库函数函数exit 系统调用接口_exit 进程异常终止 进…...
【day1】数据结构刷题 链表
一 反转链表 206. 反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输出:[2,1]…...
鼠标在客户区内按下左键和双击右键
书籍:《Visual C 2017从入门到精通》的2.6鼠标 环境:visual studio 2022 内容:【例2.44】鼠标在客户区内按下左键和双击右键 1.创建一个单文档程序 一个简单的单文档程序-CSDN博客https://blog.csdn.net/qq_20725221/article/details/1463…...
c++ map和vector模板类
在这一章中C语法之模板函数和模板类-CSDN博客 我们学习了怎样写模板函数和模板类,接下来我们来学习系统给我们写好的两个模板类:map和vector。 我相信有了上文的基础,能帮助我们更好的理解这些模板类。 map和vector 是C STL(标准模板库) 中的一部分&a…...
hn航空app hnairSign unidbg 整合Springboot
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析 学习unidbg补环境。先弄一个…...
Arm Linux ceres库编译
由于工作需要,需在国产化系统上编译ceres库,手上有一块树莓派,就在树莓派上面进行测试编译ceres库,总体来说比较顺利。只出现了一点小问题 参考链接: Ceres中文教程-安装 Ceres官方网站(英文) …...
c++中的四种cast转换
文章目录 前言一、dynamic_cast二、static_cast三、const_cast四、reinterpret_cast总结 前言 C继承并扩展C语言的传统类型转换方式,提供了功能更加强大的转型机制(检查与风险) 转换类型典型用途安全性static_cast相关类型转换(…...
矩阵补充,最近邻查找
矩阵补充,最近邻查找 矩阵补充是向量召回最简单的一种方法,现在不常用,学习矩阵补充是为了更好的理解后面学到的双塔模型 下图,输入用户ID和物品ID后从Eebedding层拿到对应的向量做内积,内积的结果就是矩阵补充 模型…...
gradio调用多个CSS的HTML页
很多博客介绍的gradio读取html和css比较简单,如果要做很细致的前端页面优化,比如丰富的响应式的cssjs,至少要有html多个css,是暂不能实现的。bootstrap、font-awesome、jquery等 方案一当然是直接更换htmlcss为主的部署方式&#…...
NVIDIA NeMo 全面教程:从入门到精通
NVIDIA NeMo 全面教程:从入门到精通 文章目录 NVIDIA NeMo 全面教程:从入门到精通目录框架介绍NeMo的核心特点NeMo的架构NeMo与其他框架的比较NeMo的模型集合NeMo的工作流程NeMo 2.0的新特性 安装指南系统要求使用Docker容器安装步骤1:安装Do…...
Go 语言封装邮件发送功能
Go 语言封装邮件发送功能 🏆 目标📦 依赖包🌟 项目结构🚀 代码实现🛠️ 主要方法说明🧪 单元测试🌈 使用示例🏆 代码亮点🌟 改进方向🚀 总结 在现代 Web 开发…...
加新题了,MySQL 8.0 OCP 认证考试 题库更新
MySQL 8.0 OCP 认证考试 题库更新 MySQL 8.0 Database Administrator 考试科目:1Z0-908 近期发现,MySQL OCP认证考试题库发生变化,出现了很多新题,对此,CUUG专门收集整理了最新版本的MySQL考试原题,并会给…...
Thales靶机攻略
1.下载导入VBox,并启动靶机 靶机地址:https://download.vulnhub.com/thales/Thales.zip 解压后,在VBox中导入虚拟电脑。包含所有网卡的MAC地址。 导入完成,设置网卡模式为仅主机网络。开启靶机。 kali网卡更改为桥接模式。点击工…...
尝试使用Tauri2+Django+React项目(2)
前言 尝试使用tauri2DjangoReact的项目-CSDN博客https://blog.csdn.net/qq_63401240/article/details/146403103在前面笔者不知道怎么做,搞了半天 笔者看到官网,原来可以使用二进制文件,好好好 嵌入外部二进制文件 | Taurihttps://v2.taur…...
6.1 模拟专题:LeetCode 1576. 替换所有的问号
1. 题目链接 LeetCode 1576. 替换所有的问号 2. 题目描述 给定一个仅包含小写字母和问号 ? 的字符串 s,要求将所有 ? 替换为任意小写字母,使得替换后的字符串中 没有相邻的两个字符相同。 示例: 输入:s "?zs" →…...
Linux安装go环境
安装一个lazydocker,根据文档需要先安装go环境 https://github.com/jesseduffield/lazydocker 官方文档解析 https://go.dev/doc/install 文档内容如下,一共三步 1.删除先前安装的go,解压下载的go压缩包到/usr/local目录 2.添加环境变量&…...
卡特兰数在数据结构上面的运用
原理 Catalan数是一个数列,其第n项表示n个不同结点可以构成的二叉排序树的数量。Catalan数的第n项公式为:  其中,是组合数,表示从2n个元素中选择n个元素的组合数。 Catalan数的原理可以通过以下方式理解&…...
Unity知识点快速回顾系列
Unity知识点快速回顾系列导航 主要想用于快速回顾unity相关知识点,基本只讲解知识点,只有简单的示例,目前还在整理中。 一、C#知识点入门、基础、核心、进阶 二、Unity 知识点入门、基础、核心、进阶 三、Unity 数据持久化 四、Unity 知识点快…...
悟空crm v12安装好后出现 网络错误问题(已解决)
请求网址: http://wwww.aaaa.com/gateway/adminUser/queryUserNumInfo 请求方法: POST 状态代码: 502 Bad Gateway 远程地址: 101.37.79.226:9807 引荐来源网址政策: strict-origin-when-cross-origin...
便携版:随时随地,高效处理 PDF 文件
PDF-XChange Editor Plus 便携版是一款功能强大且极其实用的 PDF 阅读与编辑工具。它不仅支持快速浏览 PDF 文件,还提供了丰富的编辑功能,让用户可以轻松处理 PDF 文档。经过大神优化处理,这款软件已经变得十分轻便,非常适合需要随…...
