linux环境下vcs+verdi的使用

这篇具有很好参考价值的文章主要介绍了linux环境下vcs+verdi的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

今日感想:学习只能慢慢搭积木,想一步登天可不行啊


在vcs仿真时调用$dump函数dump出fsdb文件,随后verdi load filelist和fsdb文件来进行debug

一、vcs编译过程

1、vcs两步仿真:先编译文件,生成simv可执行文件;后进行仿真(compilation and simulation)
VCS:Verilog Compiler Simulator
问题一:当设计比较大的时候,每次都要全部重新编译一遍,比较浪费时间;
问题二:当设计中存在VHDL文件时,两步法就无法使用,因为VHDL文件需要单独处理。

linux打开vcs命令,EDA工具仿真,linux,fpga开发,运维

2、vcs三步仿真:编译(compilation)、elaboration、和执行仿真(simulation)三步执行
elaboration:把各种资源进行整合链接,有些文章或书上说是建立层次关系,意思差不多,类似于c语言的link
适合于文件中存在多种语言,例如sv和vhdl同时存在

英文解释:Elaboration is the process of binding together the components of the design. Elaboration includes among other things creating instantiations, computing parameter values, resolving hierarchical names and connecting nets. Often when referring to the compilation and elaboration phases they are not distinguished but are generally referred to as compilation.

3、CLI and GUI界面
(1)VCS有命令行模式图形模式
图形模式使用的是DVE,命令交互模式使用的是Unified Command-line Interface (UCLI)
(2)vcs中要调用ucli接口,执行脚本,必须在compile的时候,加入debug的权限:-debug,-debug_pp,-debug_all,-debug_access,-debug_region。在run的时候,指定vcs -ucli [run_option],需要在编译时加入参数以开启ucli,否则ucli交互时只能使用简单的 ’run’、 ‘dump’、 'quit’命令。

4、带-号的,一般是编译时用的,编译工具自带的。(编译选项)
+号的,一般是插件,环境,验证语言等加的,可扩展、自定义的。

5、VCS和VCS_MX区别
VCS_MX为mixed hdl仿真器,支持vhdl+verilog+sv的混合仿真。VCS只支持verilog, sv。在feature上唯一的区别在于对vhdl的支持。如果没有vhdl的设计的话或许VCS好些,速度快些。

二、vcs常用指令

区分编译步骤和仿真步骤中加上的选项,添加错了位置选项就不起作用了

1、常用

which vcs  //查看vcs的安装路径
vcs -help  //查看vcs的编译选项

(1)编译文件

vlogan:vcs的编译指令,支持sv、v文件
vhdlan:vcs的编译指令,支持vhdl文件
-sverilog:支持SystemVerilog的语法

-f <filename>:指定源文件的路径名列表,文件中可包括源代码文件的路径名称,和编译选项参数
-l <filename>:指定vcs编译信息的存储文件
-ntb_opts uvm-1.2:表示要引入UVM1.2的包,当然也可以选择使用1.0或1.1版本的,但是要注意这个选项不可缺少
-full64:在64bit模式下编译、仿真,用于64位操作系统
-Mupdate :源文件有修改时,只重新编译有改动的.v文件,节约编译时间。
-top:设置顶层模块
+v2k:支持Verilog-2001标准
-gui:打开仿真的图形化界面
-o <name>:指定编译后产生的可执行文件名,默认编译后的文件名为simv
+incdir <directory>:指定包含include文件的文件夹,以方便后续编译文件时不用逐个写出所有文件的路径,只需将其在pkg中include一下即可。可以指定多个目录,用+字符分隔每个路径名称
linux打开vcs命令,EDA工具仿真,linux,fpga开发,运维

vcs top.v              //编译verilog文件
vcs -sverilog top.sv   //编译system verilog文件,要加选项
vcs -f file.list       //按照顺序把源文件放到file.list里面,然后全部编译
vcs -sverilog  +incdir+filespath pkg.sv  //把相关的类定义放到一个package里面,pkg里面include源文件
vcs -l compile.log -sverilog top.sv   //指定编译信息存储到log文件
vcs –sverilog design.sv –top work.tb1  //设置顶层模块

-R:编译后立即进行仿真,如果不加这个会生成可执行文件后就退出了

-s:在simulation仿真刚开始时立即停止,并进入交互模式。一般与-R和+cli配合使用

vcs cpu.v +cli+3 -R -s

-ucli:在linux终端使用TCL控制仿真进程(统一命令行界面模式)
+vcs+lic+wait:一直等待licese
+licwait 100:设置等待license的仿真超时时间
+memcbk:查看多维数组
-error <number>:编译器遇到n个错误之后就停止

(2)debug选项

-debug_all:支持所有调试
-debug_pp:同上,更加节约资源,可以dump fsdb和vpd,使能DVE、VERDI波形调试和UCLI命令行调试
-debug:使能dve、verdi波形调试和UCLI命令行调试
-debug_accessvcs -debug_access时,不需要再手动配置PLI的tab file verdi.tab 和静态库 pli.a,只需设置VERDI_HOME环境变量,vcs会自动查找所需文件,$fsdbDumpfile可以直接使用。
-debug_access+all 并不包含library(-v -y指定)和cell(celldefine编译原语标记的module,是cell module),无法PLI访问(如uvm_hdl_write)和波形dump。加上-debug_region=cell+lib才可以正常访问。而-debug_all则是默认包含library和cell。(一般library和cell为标准单元,特别是在后仿,RTL综合成stdcell,被celldefine标记,而且PR也加入很多buf和inv, 降低仿真速度,增加波形文件size,如果不需要可以加上+nocelldefinepli+2,只dump module instance上的port波形)

-debug_access是新推出来的选项,更好地控制仿真过程中的调试性能
也就是说,debug_all和配置PLI,或者-debug_access+all和-debug_region选项

现在前仿过程中不涉及工艺库那些信息,所以就可以直接使用-debug_acc+all!!!就可以了!

这个链接讲的很详细

配置PLI的方法

VERDI_PATH = /home/xxx/synopsys/verdi-2016.06-1/share/PLI/VCS/linux64
VERDI_ARGS = ${VERDI_PATH}/novas.tab \
             ${VERDI_PATH}/pli.a
             
编译选项加上-P ${VERDI_ARGS}

(3)目录

这里涉及到的这三个是个库文件相关的
-v <filename>:设置搜索设计的文件,这两个参数和工艺库相关
-y <dir_pathname>:指定目录路径,定义verilog的库
+libext+<extension>:让VCS在verilog库路径下搜索指定的扩展名文件,与-y配合

一般使用:

  • 把所有文件相对于makefile的文件路径都写在filelist里面,然后使用-f xxx.filelist
  • 使用+incdir指定include文件所在的文件夹

(4)使用verdi时需要在vcs里面添加的编译选项

-lca:(Limited Customer Availability)表示使用vcs“用户限制使用”功能,即vcs提供的一些功能,但该功能还未经过充分验证。
-kdb:是lca下的一个feature,其作用是在vcs two-step flow和three-step flow中生成kdb databas,是vcs支持verdi很重要的选项

这两个命令加在一起
vcs编译完后生成simv.daidir库文件,其中包含kdb.elab++文件
可以让verdi直接打开VCS编译之后的sim.daidir, 这样verdi可以直接trace代码
simv.daidir:仿真生成的verdi的库文件,包含代码信息;verdi可以打开rtl代码而不需要重新编译

-debug_access -lca -kdb  //vcs编译时加上这个选项,为了后面使用verdi

//使用kdb的几种方法
verdi -elab ./simv.daidir/kdb  
verdi -dbdir simv.daidir
verdi -simBin simv
verdi -ssf top.fsdb   //加载kdb的同时加载波形,一般用这种方式

(5)仿真选项(加在sim里面)

+nospecify:不进行时序检查
+notimingcheck:不进行时序检查,前仿为了加快仿真速度暂时不需要,两个选项一般一起用
+delay_mode_unit:延时模型,都是在前仿用不到的一些参数
+vcs+flush+all:dump vpd的波形需要的选项
+define+< macro_name>=< value>:定义一个文本宏,与源文件中的 ifdef配合

//top文件有如下定义
initial begin
    `ifdef dumpon
        $dumpfile("results.vcd");
        $dumpvars;
    `endif
end
vcs -sverilog  +define+dumpon -l compile.log top.sv  //改变参数的定义
//需要修改的时候,又要重新编译,比较麻烦

+fsdb+dumpon+500ns :vcs编译选项,仿真从500ns开始时dump波形
+ntb_random_seed=3:添加随机种子

(6)其他

-simprofile:可以记录vcs各模块仿真时间
-override_timescale=< unit>/< preciision>:让源文件统一使用指定的timescale
-timescale=<time_unit/time_precision>:为在前面编译且没有`timescale的源文件指定timescale。time_unit采用就近原则,例如顶层文件定义timescale后,中间文件再次定义timescale后,则其后的文件按照中间文件定义的timescale执行

vcs -sverilog -timescale=1ns/1ps -l compile.log top.sv 
vcs -sverilog -timescale_override=1ns/1ps -l compile.log top.sv //覆盖源代码中的仿真时间单位和精度,不推荐使用,会把模型的时间单位覆盖,可能导致模型功能错误

(7)完整版本

vcs -sverilog -full64 -fsdb -ntb_opts uvm-1.2 \
    -debug_access+all -lca -kdb -f flist.f \
    -timescale=1ns/1ps -cm line+tgl+cond+branch+assert+fsm \
    -assert -LDFLAGS '-Wl,--no-as-needed' -l com.log

2、覆盖率相关

(这部分请查看另一篇博客,单独来讲解)
覆盖率传送门

3、波形相关

-gui:开启GUI界面,否则就在linux终端显示transcript的内容
-fsdb:调用Verdi PLI 库,支持fsdb 波形
-i <filename>.tcl: 启动DVE后,在UCLI要启动的TCL命令。或者其他的文件,这样就可以不重新编译,直接进行输出波形等的调整,节约仿真资源
linux打开vcs命令,EDA工具仿真,linux,fpga开发,运维
在这里可以执行一些tcl命令

scope: 显示当前的顶层模块
scope u1: 就表示进入到当前顶层模块中的u1模块,同时将u1模块设置为顶层模块
scope -up: 回到目前顶层模块的上一层。
show: 显示当前顶层模块的信号以及子模块
show -value 信号 -radix hex/bin/dec:显示信号的值 以特定的进制显示。
run:运行仿真run 一直运行,直到遇到$stop或者设置的断点
run time: 运行多少时间停止(不推荐)
run -posedge: 信号 运行到信号的上升沿停止
run -negedge: 信号 运行到信号的下降沿停止
run -change: 信号 信号有变化时停止
stop: 设置断点stop 显示断点
stop -posedge: 信号 在信号的上升沿设置断点
stop -negedge: 信号 在信号的下降沿设置断点
stop -condition {信号表达式}: 信号表达式为真的地方设置断点
stop -delete 断点值: 删除断点值的断点
restart: 重新开启ucli调试模式
call {系统任务}:调用verilog系统任务,
finish:结束仿真
force:信号强制赋值
release:解除信号强制赋值
get:获取信号数值
step:单步执行
do *.do:可将很多这些UCLI命令整合到一个*.do文件内,然后以打包运行
命令 –h:显示命令的帮助

-vcd <filename>:将输出VCD文件名设置为指定文件。默认文件名为verilog.dump。Verilog源代码中的$dumpfile系统任务将覆盖此选项;
-verdi:使用verdi图形界面
+vcdfile+<filename>:指定想要用于后期处理的VCD文件;
-vpd_file <filename>:在运行时,定义VCS写入的VPD文件的替代名称,而不是缺省名称vcdplus.vpd;
+define+VCS:定义全局的VCS,编译器在编译时如果源文件有类似ifdef VCS等字样,那么会执行定义之后的代码。
+vcs+vcdpluson:编译选项,加入后会使能产生vpd文件,默认文件名vcdplus.vpd
-vpd <filename>:打开仿真波形,一般在末尾加&,表示在后台运行

4、仿真命令和仿真环境之间传递参数

4.1 宏定义

前面介绍仿真选项的有

4.2 条件编译函数 $test$plusargs

if($test$plusargs("FSDB_ON")):表示从命令行读取参数并判断是否开启波形dump处理。如果去掉这个if判断,就表示无条件的波形dump。当然,正式项目开发中通常会加上条件判断,将开关控制权留到实际做仿真时去。因为回归验证由于要做大量的仿真,通常是不会dump波形,只有单个testcase的调试时才会进行仿真验证。

仿真代码:

initial
	begin
	if($test$plusargs("test1")
		$readmemh("test1.dat",mem1);
	if($test$plusargs("test2")
		$readmemh("test2.dat",mem2);
	end

仿真命令:
只需要加上即可

.... +test1 +test2

4.3 参数传递函数 $value$plusargs

通过仿真命令向仿真环境传递参数

仿真代码:

if($value$plusargs("finish=%d", finish))
begin
	repeat(finish); 
	$display("finish=%d", finish);
	$finish;
end

仿真指令:

.... +finish=3 +freq=50

三、verdi相关

输出波形
verdi需要在testbench中添加如下代码

initial
	begin
        $fsdbDumpfile("./top.fsdb");  //指定输出波形名称
        $fsdbDumpvars(0,tb);   
        //输出信号层级,0表示所有,1表示第一层,依次类推;
        //tb表示例化的顶层模块名称
        $fsdbDumpvars("+all");   //+all参数,dump SV中的struct结构体
        $fsdbDumpSVA();         //将assertion的结果存存储到fsdb中
		$fsdbDumpMDA(0, top);  //dump memory arrays
	end

verdi:分析过程,跟踪信号,比vcs自带的dve功能更强
-ssf filename.fsdb:打开波形文件
-f filelist.f -top adder:打开rtl代码,顶层模块名为adder
-nologo:不显示verdi的启动log信息
常用的如下:

verdi -ssf test.fsdb -f filelist.f -top tb_top -ntb_opts uvm-1.2 -nologo

4.1 verdi使用方法
上面的界面:nTrace
下面的波形:nWave
linux打开vcs命令,EDA工具仿真,linux,fpga开发,运维

(1)点击dut里面的信号,右键添加到波形图中,或者crtl+w
也可以点击红色图标,打开对话框去选要添加的信号
linux打开vcs命令,EDA工具仿真,linux,fpga开发,运维

(2)快捷命令:
波形图左击选中部分波形:可以放大波形
按f键:全屏显示所有的波形
shift+滚轮:左右移动波形
ctrl+滚轮:放大或者缩小波形
保存添加到窗口的波形:save,保留成rc文件,方便查看
追踪信号:选中信号,点左上面一排的绿色的向右向左的图标
信号分组:选中信号,按照滚轮移动信号到别的分组,或者一开始的时候就进行分组
统计时钟上下升沿个数
linux打开vcs命令,EDA工具仿真,linux,fpga开发,运维

切换data的进制
linux打开vcs命令,EDA工具仿真,linux,fpga开发,运维

数字/模拟信号切换
linux打开vcs命令,EDA工具仿真,linux,fpga开发,运维

data有很多位,包含地址和数据,可以进行分开查看edit bus
linux打开vcs命令,EDA工具仿真,linux,fpga开发,运维

linux打开vcs命令,EDA工具仿真,linux,fpga开发,运维

查看数值logical operation:选中信号,右键,最下面的选项
然后再去统计个数,就可以知道该信号这个数值有多少次
linux打开vcs命令,EDA工具仿真,linux,fpga开发,运维

查找信号Find Scope:crtl+S

四、面试问题

1、define和 t e s t test testplusargs的区别

define:需要在编译之前完成变量的定义,如果需要修改的话,要重新编译,比较麻烦
$test$plusargs:不需要重新编译,是从命令行传递参数进去
$value$plusargs:它既可以实现testplusargs的要求,它是能传递参数同时对内部信号进行赋值文章来源地址https://www.toymoban.com/news/detail-680452.html

vcs +define+dumpon -sverilog

sim +test1
sim +test1=123

到了这里,关于linux环境下vcs+verdi的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【VCS+Verdi联合仿真】~ 以计数器为例

    首先,先声明一下,我写这篇博客的时候我就是一个纯小白,实不相瞒,刚刚学了一天,哈哈哈,没错,你没看错,就是一天!!!主要是因为前天因为刷题和找工作的需要,需要熟悉VCS和Verdi的联合仿真(据说是很好用,随大流呗!!!),所以才会有接下来的一些相关博

    2023年04月12日
    浏览(35)
  • EDA07--VCS仿真验证(一)

    VCS用于在Linux下仿真.v代码,vcs六大功能: ·System Verilog ·OVA ·NTB ·DVE调试环境 ·覆盖率统计 ·DirectC ·增量编译 ·64-bit模式 ·混合信号仿真 本文讲解VCS的知识内容,具体操作步骤单独写一篇… VCS-DVE仿真由三步构成: 编译、仿真、调试 。提前编写好设计文件和Testbench的.v文件。

    2024年02月08日
    浏览(52)
  • linux VCS+verdi运行UVM实战(第二章)中的例子

    目录 前言 介绍 建立工程 运行代码 查看波形 总结 前言 用VCS+verdi运行了下UVM实战中的例子(第二章)。 在某宝上花了几十块,买了个虚拟机(已经安装好VCS+verdi)。直接用UVM实战中,现成的uvm代码跑了下。 UVM实战源码下载地址:UVM实战源码下载 书中DUT的功能:通过rxd接收

    2023年04月08日
    浏览(45)
  • 逻辑仿真工具VCS的使用-Makefile

            Gvim写RTL code,VCS仿真,Verdi看波形,DC做综合下约束,Primetime做STA,Spyglass做异步时序分析。            VCS全称Verilog Computer Simulation ,VCS是逻辑仿真EDA工具的编译源代码的命令。要用VCS做编译仿真,首先得有一个RTL代码,比如我们写了一个全加器和全加器的

    2024年02月02日
    浏览(41)
  • 新手教程01:逻辑仿真工具VCS的基础使用

    目录 前言 利用图形化界面的方法使用VCS 1. 新建文件夹,存放需要仿真的Verilog源代码和testbench测试文件​ 2. 使用cd命令进入该文件夹路径下,对需要编译的文件生成file.list文件 3. 使用vcs命令编译仿真需要的verilog代码 4. 启动VCS图形化界面 5. 进行仿真,生成波形 总结 零基础

    2024年02月09日
    浏览(43)
  • VCS与Verdi联仿,简要万能工程模板,持续更新中...

    一、背景 学习verilog,故用vcs来编译verilog,用verdi来查看波形。 提供一套简要verilog工程模板去执行教程中代码,并分析波形。 二、编写工程模块 建立工程在temp文件夹下新建文件夹/rtl、/sim、/tb,如下: 在/rtl文件夹下新建两个.v文件: template.v和timescale.v ,为模板rtl代码。

    2024年02月12日
    浏览(40)
  • EDA09--VCS 操作实践(二)

    前面介绍过了VCS的基本知识,现在进行VCS操作实践,介绍两类,即交互式操作和后处理两种。 本次操作所用到的所有文件脚本都在这里,大家下载下来即可:链接: link 本次操作所用到的所有文件脚本都在这里,大家下载下来即可:链接: link 本次操作所用到的所有文件脚本都在

    2024年02月12日
    浏览(45)
  • EDA开源仿真工具verilator入门1:安装和测试

    Verilator是一种开源的Verilog/SystemVerilog仿真器,可用于编译代码以及代码在线检查,Verilator能够读取Verilog或者SystemVerilog文件,并进行lint checks(基于lint工具的语法检测),并最终将其转换成C++的源文件.cpp和.h。 Verilator不直接将Verilog HDL转换为C++或者SystemC,反之Verilator将代码编译

    2024年01月19日
    浏览(36)
  • LINUX下使用命令行打开图片文件

    1.使用图像查看器打开文件 最简单的方法是使用Linux默认的图像查看器来打开PNG图像文件。大多数Linux发行版都有自带的图像查看器,例如 GNOME、KDE 等。只需右键单击PNG文件,然后选择 “打开”,就能在图像查看器中看到PNG图像。 如果您不确定图像查看器的位置,可以使用以

    2024年01月16日
    浏览(36)
  • vcs仿真教程(查看断言)

            VCS是在linux下面用来进行仿真看波形的工具,类似于windows下面的modelsim以及questasim等工具,以及quartus、vivado仿真的操作。 vcs的常见指令后缀 sim常见指令 命令:mkdir +文件名,例如:mkdir tst 然后直接把设计文件和仿真文件拷贝到tst7这个文件夹里。 打开终端,输入

    2024年02月10日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包