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.需要重新编译系统,浪费时间(不使用valuevaluevalueplusargs时);2.Verilog是低级语言,对于文本处理比较困难,不支持正则表达式 1.新员工大多不熟悉Tcl,接受较慢

+ 三大EDA厂商
* Synopsys:VCS + Verdi
* Cadence :irun + Verdi
* Mentor :Questa + Verdi

VCS脚本:与Verdi有关的为注释内容,使用ucli接口
com:vcs -full64 \-sverilog \-debug_pp \                                             # 使能UCLI命令-LDFLAGS \                                              # 传递参数给VCS的linker,与以下三行配合使用-rdynamic \                                             # 指示需加载的动态库,如libsscore_vcs201209.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.logsim:./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 workvmap work workvlog \-64 \-sv \+acc \                                                            # +acc使加载PLI有效-f ../${demo_name}/tb_top.f \-l com.logrun: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,将所有的信号标值

  • 获取复杂参数的值

Verdi基础知识整理相关推荐

  1. python常用变量名_python基础知识整理

    Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...

  2. 计算机二级c语基础知识,计算机二级C语基础知识整理.doc

    计算机二级C语基础知识整理 1.1 算法 算法:是一组有穷指令集,是解题方案的准确而完整的描述.通俗地说,算法就是计算机解题的过程.算法不等于程序,也不等于计算方法,程序的编制不可能优于算法的设计. ...

  3. 使用Aspose.Cells的基础知识整理

    使用Aspose.Cells的基础知识整理 转自 http://www.cnblogs.com/kenblove/archive/2009/01/07/1371104.html 这两天用Aspose. ...

  4. 前端基础知识整理汇总(中)

    前端基础知识整理汇总(中) Call, bind, apply实现 // call Function.prototype.myCall = function (context) {context = ...

  5. 前端基础知识整理汇总(上)

    前端基础知识整理汇总(上) HTML页面的生命周期 HTML页面的生命周期有以下三个重要事件: 1.DOMContentLoaded -- 浏览器已经完全加载了 HTML,DOM 树已经构建完毕,但是 ...

  6. centos7创建asm磁盘_Oracle ASM 磁盘组基础知识整理(收藏版)

    为什么要写这么一篇基础知识呢?还是有那么一点点原因的,不是胡编乱造还真是有真实存在的事件的,前两周里因一套生产环境数据库磁盘不足无法对其进行表空间扩容,需要向存储岗申请存储资源,当存储岗划好资源加完存 ...

  7. Web前端基础知识整理

    1. 前端基础知识 文件分类 XML(扩展标记语言) 装载有格式的数据信息,用于各个框架和技术的配置文件描述 特点: 扩展名为.xml 内容区分大小写 标签要成对出现,形成容器,只能有一个 标签按正确 ...

  8. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

  9. 矩阵论(零):线性代数基础知识整理(1)——逆矩阵、(广义)初等变换、满秩分解

    矩阵论专栏:专栏(文章按照顺序排序) 线性代数是矩阵论的先修课程,本篇博客整理线性代数的基础理论知识,为矩阵论的学习做准备.限于篇幅,梳理的重点将在定理和结论上(只给出部分必要的定义),对最基础的概念 ...

最新文章

  1. Redis 笔记(02)— keys 键相关命令(查询数据库key数量、判断key是否存在、指定key过期时间、查看key类型、查看key剩余秒数、选择数据库、删除key、删除数据库)
  2. vue 给iframe设置src_vue项目iframe的传值问题
  3. spring配置文件_SpringBoot入门建站全系列(二十三)配置文件优先级及自定义配置文件...
  4. 彻底理解webservice SOAP WSDL
  5. Hadoop2.6集群动态添加和删除数据节点
  6. 解决idea启动项目报错:Unable to open debugger port(127.0.0.1:60157):java.net.SocketExceptionsocket closed
  7. 前端如何发ModelAndView的请求
  8. 0和5(51Nod-1433)
  9. 中国移动试商用GPS手机导航业务 包月资费15元
  10. php 取oracle图片,一个php导出oracle库的php代码
  11. Linux内核为什么会发生soft lockup?
  12. linux下qt程序以管理员运行,如何让QT程序以管理员权限运行(UAC)
  13. Entity Framework Code First 学习日记(4)
  14. 盘点番茄汁有益于身体的N多好处
  15. 数据库添加账号(mongoDB)
  16. 【图像去噪】基于非局部均值(NLM)滤波图像去噪matlab源码
  17. win10下安装Centos7
  18. Python--数据库
  19. 十五、存储过程与函数
  20. DSP delay延时函数

热门文章

  1. Scrum立会报告+燃尽图(Beta阶段第七次)
  2. rsync实现断点续传
  3. java固件包_iOS13 各版本固件下载地址以及更新方法
  4. 鸿蒙坐骑九彩祥云,封神演义五大神兽坐骑排名,第一名太出人意料了!
  5. 适用于高级别自动驾驶的驾驶员可预见误用仿真测试
  6. 私有化短链接管理系统-魔众短链接系统 v1.0.0
  7. 医疗等保2.0|新版测评标准对医疗行业网络安全等级保护提出了更高要求
  8. JS Uncaught TypeError: Cannot read property ‘indexOf‘ of null问题解决
  9. 2018年·玉伯《从前端技术到体验科技(附演讲视频)》
  10. 打印JVM所有参数列表的方法 -XX:PrintFlagsFinal、–XX:PrintCommandLineFlags