Verdi基础知识整理

Verdi基础知识整理Verdi 主要在以下方面使用 Verdi 使用情形 IC 验证工程师 Debug IC 设计工程师 Review 学习目标主要以下三方面 能够生成 fsdb 波形 能够查看 fsdb 波形 能够追踪 RTL 代码 生成 FSDB 波形三个变量 VERDI HOME NOVAS HOME 仿真器默认 且为设置 PATH 做准备 PATH 让系统 Linux 找到 verdiLD LIB

Verdi主要在以下方面使用

  • Verdi使用情形:
    • IC验证工程师(Debug)
    • IC设计工程师(Review)
  • 学习目标主要以下三方面:
    • 能够生成fsdb波形;
    • 能够查看fsdb波形;
    • 能够追踪RTL代码。

生成FSDB波形

  • 三个变量
    • VERDI_HOME/NOVAS_HOME:仿真器默认,且为设置PATH做准备
    • PATH:让系统(Linux)找到verdi
    • LD_LIBRARY_PATH:让系统(Linux)能够找到Verdi需要的库文件.


  • 三个命令
    • echo(可配合sed):查询环境变量
      • echo $PATH | sed ‘s/\:/\n/g’
      • echo $LD_LIBRARY_PATH | sed ‘s/\:/\n/g’



/home/.tools/synopsys/Verdi3_L-2016.06-1/share/PLI/libLINUX64 /home/.tools/synopsys/Verdi3_L-2016.06-1/share/PLI/IUS/LINUX64/boot /home/.tools/synopsys/Verdi3_L-2016.06-1/share/PLI/libLINUX64 /home/.tools/synopsys/Verdi3_L-2016.06-1/share/PLI/IUS/LINUX64/boot /home/.tools/synopsys/Verdi3_L-2016.06-1/share/PLI/libLINUX64 /home/.tools/synopsys/Verdi3_L-2016.06-1/share/PLI/IUS/LINUX64/boot 
+ which :查询当前软件是否设置,若设置成功,会显示软件路径 + uname -i:查询当前系统信息,如硬件平台64bit为x86_64/amd64,32bit平台为i386 
  • 两大方法
    • 使用Verilog系统函数


initial begin $fsdbDumpfile("top_tb.fsdb"); $fsdbDumpvars(0,"tob_tb"); end
* 使用UCLI、TCL接口(VCS使用tcl脚本,irun、questa与该脚本类似) 
global env fsdbDumpfile "$env(demo_fifo).fsdb" fsdbDumpvars 0 "top_tb" run
  • Dump波形的两类主要方法优缺点比较
基于系统函数基于ucli/tcl接口
优点1.新员工熟悉Verilog代码,接受较快1.不需要重新编译仿真顶层; 2.使用高级语言接口,容易完成复杂处理,例如传递变量,例如使用正则表达式;3.交互式接口,控制灵活,仿真过程可修改dump信息,如dumpon/dumpoff
缺点1.需要重新编译系统,浪费时间(不使用 value v a l u e plusargs时);2.Verilog是低级语言,对于文本处理比较困难,不支持正则表达式1.新员工大多不熟悉Tcl,接受较慢
VCS脚本:与Verdi有关的为注释内容,使用ucli接口
com: vcs -full64 \ -sverilog \ -debug_pp \ # 使能UCLI命令 -LDFLAGS \ # 传递参数给VCS的linker,与以下三行配合使用 -rdynamic \ # 指示需加载的动态库,如libsscore_vcs.so -P ${VERDI_HOME}/share/PLI/VCS/${PLATFORM}/novas.tab \ # 加载表格文件 ${VERDI_HOME}/share/PLI/VCS/${PLANTFORM}/pli.a \ # 加载静态库 -f ../${demo_name}/tb_top.f \ +vcs+lic+wait \ -l compile.log sim: ./simv \ -ucli -i ../scripts/dump_fsdb_vcs.tcl \ # ucli的输入文件(-i)为tcl脚本 +fsdb+autoflush \ # 命令行参数autoflush,一边仿真一边dump波形,如果没有该参数,那么不会dump波形,需要在ucli命令run 100ns后键入fsdbDumpflush才会dump波形 -l sim.log
  • 其中dump_fsdb_vcs.tcl(ucli脚本为tcl语言)
 global env # tcl脚本引用环境变量,Makefile中通过export定义  fsdbDumpfile "$env(demo_name).fsdb" # 设置波形文件名,受环境变量env(demo_name)控制 # demo_name在makefile中使用export demo_name=demo_fifo  fsdbDumpvars 0 "tb_top" # 设置波形的顶层和层次,表示将tb_top作为顶层,Dump所有层次 run # 设置完dump信息,启动仿真(此时仿真器被ucli控制) 可以run 100ns会在仿真100ns的时候停下来下来
  • 也可以使用交互式仿真:注释内容可以在仿真过程中键入
global env fsdbDumpfile "$env(demo_name).fsdb" fsdbDumpvars 0 "top_tb" run 200ns #fsdbDumpoff #run 100ns #fsdbDumpon #run
irun编译运行脚本:
com: irun \ -elaborate \ -access +r \ # 表示需要有读的权限 -f ../${demo_name}/tb_top.f \ -top tb_top \ -licqueue \ -l compile.log sim: irun \ -R \ -input ../scripts/dump_fsdb_irun.tcl \ +fsdb+autoflush \ -licqueue \ -l sim.log
  • dump_fsdb_irun.tcl
global env call fsdbDumpfile "$env(demo_name).fsdb" # 需要使用call,与vcs区别之一 call fsdbDumpvars 0 "tb_top" run quit # 需要使用quit,irun不自动结束
questa脚本
compile: vlib work vmap work work vlog \ -64 \ -sv \ +acc \ # +acc使加载PLI有效 -f ../${demo_name}/tb_top.f \ -l com.log run: vsim \ -64 \ -batch \ -novopt \ -pli ${VERDI_HOME}/share/PLI/MODELSIM/${PLATFORM}/novas_fli.so \ # 加载共享对象 work.tb_top \ -do ../scripts/dump_fsdb_questa.tcl \ +fsdb_autoflush \ -l sim.log
  • dump_fsdb_questa.tcl
gloal env fsdbDumpfile "$env(demo_name).fsdb" fsdbDumpvars 0 "tb_top" run -all quit -sim
不同场景dump波形的需求

这里写图片描述

verdi 加载设计的脚本

debug: verdi \ -sv \ # 支持sv -f ../${demo_name}/tb_top.f \ # 加载设计文件列表 -top tb_top \ # 指定设计顶层 -nologo # 关掉欢迎界面
  • PS:
    • Verdi加载设计的参数与VCS类似
    • 支持+incdir+xx 设置include文件目录
    • +libext+.v 设置库文件后缀
    • -v 设置可搜索设计的文件
    • -y 设置可搜索设计的目录


这里写图片描述

加载FSDB波形

dbg: verdi -sv \ #支持SV -f ../${demo_name}/tb_top.f \ #加载设计文件列表 -top tb_top \ #设置设计顶层 -ssf ${waveform} \ -nologo #关闭欢迎界面
  • verdiLog文件夹里面的compile.log是verdi编译信息
  • 重复加载设计和波形:(reload)
    • 避免重复开关gui
    • 避免频繁申请license(license资源问题,手中掌握资源,霸占…)
  • verdi界面
    • ntrace:file -> reload design,一般重新加载设计的同时会重新load wave
    • nwave :file -> reload
    • 拓扑结构:topology(在nTrace)
    • 源码(nTrace)


  • 选择信号方式:
    • 在设计中选择信号,按快捷键ctrl+w
    • 在nWave界面使用通配符,可以选择in/out/inout/net(wire)/register等信号
  • 查看波形
    目标快捷键鼠标操作
    100%波形F点击100%符号
    缩小波形z(推荐)
    放大波形shift+z左键拖选放大范围(推荐)
    移动信号中键选择位置+信号+M鼠标中键按住信号拖拽
    拷贝波形ctrl+p右键选择
    粘贴信号中间选择位置+Ins右键选择
    删除信号Del右键选择
    显示结构h(开/关)
  • 时间差

这里写图片描述

+ nWave:waveform -> marker 标记 :输入名字,然后add * nWave:waveform -> Signal Value Radix修改进制; * nWave:waveform -> Signal Value Notation设置信号。无符号unsigned,有符号一般选择Signed 2's Complement 
  • 查看信号变化:

    这里写图片描述

    • 对于状态机:点击nTrace中类似与门的信号,点击打开电路图后波形就变成了rtl中的设置的状态机的不同状态(三段式容易被verdi识别是状态机,标注状态)
    • 信号分组:右键rename组名,结构清晰,便于对照
    • 总线操作:选中信号右键Bus Operations ->Create Bus
      这里写图片描述

    • 这里取反是bit取反,非byte
  • save和restore
    • 存储当前查看波形的工程
    • 将当前所有信号存成一个*.rc文件
    • 重新打开波形界面时,restore信号
    • nwave:file -> Save Signal/Restore Signal

debug 追踪波形

  • 快速熟悉一个设计:双击RTL中的信号,追踪波形
    • 掌握设计拓扑结构:通过nTrace界面获取

    这里写图片描述

    • 熟悉设计的输入、输出
      • Trace(Input)
        • 哪些信号驱动了当前信号


      • Load(Output)
        • 当前信号驱动了哪些信号



    这里写图片描述

    • 找到ntrace中的L、D

    这里写图片描述

    • 同时可以在trace界面右键Collapse All,Expand All,save等操作
    • 在设计之间跳转,回退 上、下、前、后等

    这里写图片描述

  • 快速找到应用实例:nTrace : Source -> Find Signal/Instance/Instport
    • 勾选Search Full Scope ,选择输入要例化的模块(支持通配符)

这里写图片描述

+ 获取波形里面的信号数值:nTrace:source -> Active Annotation,将所有的信号标值 

这里写图片描述

  • 获取复杂参数的值

    这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204501.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午8:09
下一篇 2026年3月19日 下午8:10


相关推荐

  • 扣子空间+自定义MCP,我的学习搭子来了!(附邀请码)

    扣子空间+自定义MCP,我的学习搭子来了!(附邀请码)

    2026年3月12日
    2
  • centos7.6开放端口命令_查看端口有没有开放

    centos7.6开放端口命令_查看端口有没有开放概要最近在docker下搭建MySQL和Redis环境,远程linux主机内部网络都走通了,但是就是外网无法连接远程服务器的MySQL和Redis。经过一番查找和学习,终于找到了问题,不仅远程服务器上docker要做好内部和外部端口的映射,关键还要对对外开放的端口添加到防火墙中。内容介绍的逻辑是:本篇文章先记录Centos7下查看防火墙状态和网络状态命令;下一篇将介绍通过docker…

    2026年4月14日
    9
  • Web Proxy Auto-Discovery Service[通俗易懂]

    Web Proxy Auto-Discovery Service[通俗易懂]WinHTTPWebProxyAuto-DiscoveryService服务处于正在运行状态。但是有一天早上来发现全部电脑都无法上网。PINGISA都不通。重新启动后正常。我检查系统日志里面有3条关于WEB代理的日志:1。TheWinHTTPWebProxyAuto-DiscoveryServicehasbeenidlefor15minutes,i

    2022年6月21日
    106
  • Android游戏引擎选择[通俗易懂]

    Android游戏引擎选择[通俗易懂]Android游戏引擎选择今天在博客园看到一篇关于android游戏引擎的选择文章,特转载以便日后了解1.Ronkon(网站地址:http://www.ronkonandroid.com)如果不是想帮助作者解决一大堆兼容性问题的话还是不要使用这个引擎,我在上面浪费了1天半,就只是为了把实例程序跑起来。开始还以为是我水平菜,结果一堆人没跑起来,和我一样都是黑屏。虽然它文档做得好但我还是放弃了,本来Android平台兼容性就是老大难,在来个半吊子的引擎我可没本事搞定。2.AndEngine(网站地址:ht

    2026年1月21日
    7
  • ArrayList和LinkedList区别及使用场景

    ArrayList和LinkedList区别及使用场景ArrayList 和 LinkedList 区别及使用场景 1 LinkedList 和 ArrayList 的差别主要来自于 Array 和 LinkedList 数据结构的不同 ArrayList 是基于数组实现的 LinkedList 是基于双链表实现的 另外 LinkedList 类不仅是 List 接口的实现类 可以根据索引来随机访问集合中的元素 除此之外 LinkedList 还实现了 Deque 接口 Deque 接

    2026年3月26日
    3
  • 如何配置python的环境变量

    如何配置python的环境变量1 说明 windows 下设置 python 环境变量 就是把 python 的安装目录添加到系统 path 中 2 步骤 1 确定 python 安装目录 根据版本不同安装目录也不同 可以在开始菜单中的快捷方式中查看 在 python 快捷方式上点右键 属性菜单 2 在目录中可以看到安装位置 C ProgramFiles Python35 如下图 3 在桌面计算机点右键属性 也可以在控制面板中选系统 4 点高级系

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号