首页 > 其他分享 >VCS+DVE+Verdi+Makefile使用

VCS+DVE+Verdi+Makefile使用

时间:2023-06-11 22:33:49浏览次数:64  
标签:仿真 文件 波形 DVE top Makefile vpd VCS

业界有三大仿真工具,Synopsis家的VCS、Cadence家的IUS-irun(现在是Xcelium-xrun)和Mentor的Modelsim。

VCS的全称是Verilog Compile Simulator,是Synopsis公司的电路仿真工具,可以进行电路的时序模拟。VCS属于编译型verilog仿真器,内部的仿真工具是DVE。VCS先将verilog/systemverilog文件转化为C文件,在linux下编译链接生成可执行文件,在linux下运行simv即可得到仿真结果。VCS使用步骤是先编译verilog源码,再运行可执行文件:

下面以实操的方式,用计数器的案例来讲述VCS+DVE+Verdi的操作步骤,中间穿插shell脚本的使用,最后将shell脚本改成makefile的形式,希望对整个工具的使用能有理解。

1 工程说明

整个工程比较简单,目录结构如下所示:

文件

说明

de/top.v

Verilog设计文件

dv/tb_top.sv

SystemVerilog仿真文件

sim/dve.tcl

Dve工具的脚本文件

sim/filelist.f

文件列表,可由find指令或makefile生成

sim/makefile

makefile脚本

sim/verdi.tcl

verdi工具的脚本文件

1.1 设计和仿真文件

设计文件top.v代码如下所示:

module top(
input       clk     ,
input       rst_n   ,
output reg  cnt     );

always @(posedge clk or negedge rst_n) begin
    if(!rst_n)
        cnt <= 0;
    else if(cnt == 9)
        cnt <= 0;
    else
        cnt <= cnt + 1;
end


endmodule

仿真文件tb_top.sv的代码如下所示:

`timescale 1ns/1ps

module tb_top;
//----------------------------------------
reg             clk         ;
reg             rst_n       ;
wire            cnt         ;
//----------------------------------------
top u_top
(
    .clk        (clk        ),
    .rst_n      (rst_n      ),
    .cnt        (cnt        )
);
//----------------------------------------
initial clk = 1'b1;

always #10 clk = ~clk;

initial begin
    rst_n = 0; #11 rst_n = 1;
end
//----------------------------------------
`ifdef DUMP_VPD
    initial begin
        $vcdpluson;
        #1000;
        $vcdplusflush;
        $finish;
    end
`elsif DUMP_FSDB
    initial begin
        #1000;
        $finish;
    end
    
    initial begin 
        $fsdbDumpfile("tb_top.fsdb");
        $fsdbDumpvars("+all");
    end
`endif


endmodule

1.2 makefile文件

all: filelist com_fsdb sim verdi
#---------------------------------------------------------------
filelist:
	find ../de ../dv -name "*.v" -o -name "*.sv" > filelist.f
#---------------------------------------------------------------
com_vpd:
	vcs -f filelist.f \
		-timescale=1ns/1ps \
		-full64 +v2k -sverilog -Mupdate +define+DUMP_VPD \
		-debug_all \
		|tee vcs.log
#---------------------------------------------------------------
com_fsdb:
	vcs -f filelist.f \
		-timescale=1ns/1ps \
		-full64 +v2k -sverilog -Mupdate +define+DUMP_FSDB \
		-debug_acc+all \
		|tee vcs.log
#---------------------------------------------------------------
sim:
	./simv |tee sim.log
#---------------------------------------------------------------
dve:
	dve -vpd vcdplus.vpd -script dve.tcl &
#---------------------------------------------------------------
verdi:
	verdi -f filelist.f -ssf tb_top.fsdb -play verdi.tcl &
#---------------------------------------------------------------
clean:
	rm -rf csrc DVEfiles novas* *.log simv* *fsdb* ucli.key *.vpd verdiLog

1.3 tcl文件

dve.tcl文件内容如下所示:

add_wave -group tb_top /tb_top/*
add_wave -group top /tb_top/u_top/*

verdi.tcl文件内容如下所示:

wvAddSignal -group {tb_top}
wvAddSignal -scope tb_top
wvAddSignal -group {top}
wvAddSignal -scope tb_top/u_top

1.4 filelist文件

../de/top.v
../dv/tb_top.sv

下面就以实验的过程,讲解一下VCS+DVE+Verdi和makefile的使用。

2     VCS+DVE仿真

2.1 GUI交互式仿真

GUI交互式仿真符合我们使用软件的习惯,比较简单易用,这里简单介绍一下。

(1)VCS编译

在sim文件夹下执行指令:

vcs ../de/top.v ../dv/tb_top.sv -timescale=1ns/1ps full64 -sverilog -debug_all |tee vcs.log

下面是一些vcs指令常用的选项说明:

VCS编译

vcs

启用vcs进行某些操作,必须放在命令的开头。

-full64

以64bit模式编译,输出文件是64bit。

-debug_access+all

用于仿真调试时的参数,all表示支持的功能最多。dupm vpd文件时也可以写成-debua_all

|tee vcs.log

仿真结果输入到vcs.log文件中。

+2k

表示兼容Verilog2001以前的标准,也可以不填。

-f filelist.f

.v文件过多,可以写进一个filelist文件里,然后用-f吃这个文件。

-R

编译后立即执行./simv,但要注意代码里写好了停止条件,否则terminal会一直卡着。

-Mupdate

源文件有修改时,只重新编译有改动的.v文件,节约编译时间。

-sverilog

打开对Systemverilog的支持,编译Systemverilog文件时使用。

timescale=1ns/1ns

设置仿真精度,如果有些代码文件没有表明timescale,则必须在vcs命令中加入此选项才不报错。

-o simv_file

默认产生的可执行文件为simv,可以用-o选项给它改名。

+define+DUMPVPD

识别代码中的`define的内容,一般用于指定哪部分程序需要编译。

-LDFLAGS -Wl,

-no-as-needed

ubuntu18.04以上版本必须加上此参数,否则报错说不支持高版本内核。

|tee vcs.log

编译结果写入到vcs.log文件中

执行完后会生成simv文件,该文件就是dve工具的仿真文件。

(2)DVE仿真

执行“./simv -gui &”打开DVE工具,它会自动装载该工程,gui是以图形化方式打开,然后我们右键添加波形:

输入时间精度和运行时间,点击⬇开始仿真,按f键可以缩小波形为全局,它产生的波形文件为inter.vpd文件。

在用“./simv -gui &”打开DVE时,可以指定dve.tcl脚本,这样DVE打开时就自动添加波形了,dve.tcl的书写可以查看DVE的命令台,其语言风格和modelsim类似,常常用“add_wave”添加波形、“run 1us”指定跑多久等指令,其他还有“-radix unsigned”、“-style analog”等规则,可以在DVE命令台输入help add_wave,help -all等指令查看更多可用的参数。

用./simv打开DVE的方式比较少用,后面都是用dve指令来打开DVE工具,dve指令也可以指定打开DVE后要自动运行的tcl脚本,它的参数则是-script ./run.tcl,详见上面贴出的makefile内容。

下面是偶尔会用到的simv选项说明。

simv仿真

./simv

vcs编译成功后会生成simv指令,该指令可以执行仿真相关的命令。

-do run.tcl

打开DVE工具后自动执行run.tcl文件。

-q

静默模式执行仿真,不会打印仿真报告。

+vpdfile+xxx.vpd

修改默认产生的vpd文件名。

-gui

打开DVE工具,界面操作产生的vpd文件默认名为inter.vpd。

|tee sim.log

将仿真结果输入到sim.log文本中。

GUI交互式仿真也能够产生vpd波形文件,默认名为inter.vpd,仿真结果会不断写入到该文件中。

2.2 UCLI接口仿真

UCLI仿真指的是在用户命令行接口仿真,例如在代码中添加一些调试代码,遇到error时会$stop,相当于每发生一次错误,终断一次仿真。

在vcs编译时,加入-ucli使用UCLI接口:

在仿真时会打开UCLI,并使仿真停止在 0 时刻。

使用 run 继续运行仿真,当出错时,$stop被调用而使仿真停下。使用 scope 查看当前 module 名。使用 show 查看信号列表。使用 get sum_test -radix hex 查看当前某个信号的值。

使用 UCLI 进行Debug其实是非常低效的,使仿真在错误的地方停止,用命令打开一个一个“黑盒子”(module) 并查看内部信号与预期是否一致。在实际使用VCS的时候基本不用,在此简单介绍,不做过多赘述。

(摘自知乎:https://zhuanlan.zhihu.com/p/129034106

2.3 后处理模式仿真

交互式调试会非常吃内存而且非常卡,而UCLI接口仿真同样低效且难用,实际工作中我们更常用的是后处理模式。后处理模式是指仿真跑完(断点或finish)处,将波形dump到对应的波形文件中,以供DVE直接读取查看。DVE支持的波形文件类型为vpd,有vcd.vpd和vcdplus.vpd这两种,其中vcd是没有经过压缩的,文件比较大,而vcdplus是带有压缩功能的,更加推荐使用。

注:Verdi里使用的是fsdb文件,Modelsim里使用的是wlf文件。

(1)make filslist

执行“make filelist”可以将所需的设计文件和仿真文件写入到filelist.f文件中,这其实就是用了一个find命令,比较简单,但非常省事。后面需要指明文件时,用-f选项指明该filelist.f文件即可。如果文件较少,也可以不用filelist,直接在命令后面写明文件路径即可。

(2)make com_vpd

执行“make com_vpd”可以调用vcs编译工程,在tb_top.sv里运用了define,然后在vcs里用+define参数的方式指定了代码段,这样就能够指定dump vpd类型的波形文件。

下面是vcd系统函数的一些常用选项说明:

程序

说明

$vcdpluson;

使能dump波形到vpd文件,一般放在仿真的0时刻。

$vcdplus(2,tb_top);

记录tb_top开始往下2层的所有信号。

$vcdpluson(tb_top.reset);

只记录此信号。

$vcdplusoff(tb_top.reset);

不记录此信号。

$vcdplusflush;

仿真finish时,有些波形数据还缓存在系统中,该命令可以将缓存中的波形数据写到vpd中。

$vcdplusautoflush

当遇到stop/finish或中端时,将缓存中的波形写道vpd文件中。

$vcdplusfile(“filename”)

指定生成的vpd文件名称,比较少用,一般在仿真时加参数实现此目的。

(3)make sim

执行“make sim”即可产生vpd波形文件,默认名称是vcdplus.vpd,可以加入参数+vpdfile+xxx.vpd来改名。

明白编译和仿真的过程后,vcs和simv命令可以合并,只需要vcs命令里加上参数 -R 即可自动执行./simv命令,但这样不太好指定输出sim.log文件。

(4)make dve

命令模式:

执行“make dve”即可后台打开DVE工具,并且它自动装载好vpd文件,并且自动运行dve.tcl脚本文件,非常方便。

界面模式:

界面模式比较少用,即先直接在terminal上执行dve命令打开DVE工具,然后点击File---Open Database,选择vpd文件即可。

3 Verdi仿真

相比VCS自带的DVE工具查看波形,业内更多的用Synopsis家另一款工具——Verdi。Verdi不是仿真器,只能查看波形,查看波形时必须引入 fsdb 文件,该文件可由EDA工具的仿真器来实现(如Synopsys的VCS,Cadence的irun,Mentor的Questa),这个过程也称为 Dump 波形文件。一共有两种方式可以产生 fsdb 文件:

  • Verilog系统函数
    • tb内手写,大多用这种方法。
  • Ucli/Tcl接口脚本
    • 快捷但较复杂,不利于新手

3.1 Verdi使用流程

(1)产生fsdb文件

首先是要在testbench中添加verdi系统函数,和上面dump vpd文件类似,在Testbench中加入下面命令即可在执行./simv仿真时产生fsdb文件。

更多verdi系统函数可以查看verdi官方手册,即下面这个:

执行“make com_verdi”对工程进行编译,然后执行“make sim”即可产生fsdb波形文件。

注意,这里不能是debug_all,改用debug_acc+all就行了。

如果觉得两步比较麻烦,可以改一下makefile脚本,在com_verdi的vcs命令中间加上-R,即可编译完成后自动执行simv程序,但是暂时没有想到这样怎么产生sim.log文件。

(2)Verdi打开波形

执行“make verdi”即可打开verdi,并自动运行verdi.tcl脚本文件。

3.2 Verdi常用技巧

Verdi的操作技巧比较多,可以翻阅手册《Verdi and Siloti Command Reference》。

下面是一些常用选项和快捷键的说明。

(1)Verdi常用选项

选项

说明

-sv

支持systemverilog语法

+systemverilogext+.sv

指定sv文件的后缀

-ssv

取消-v指定的library为lib cell

-ssy

取消-y指定的library为lib cell

-ssz

忽略`celldefine的compiler指令

-top tb

指定整个环境的top名称为tb

-vc

支持DirectC语法

-f

指定文件列表

-ssf

指定波形文件

-preTitle

指定GUI界面名称

nologo

关闭欢迎界面

&

使Verdi后台运行,不占用terminal

(2)Verdi快捷键

Verdi界面和Modelsim界面很相似,需要多多练习才能够掌握,下面是最常用的一些功能:

目标

快捷键

查看波形

Ctrl+W

100%显示

F

缩小波形

Z

放大波形

shift+Z

移动信号

中键选择位置+信号+M

拷贝波形

Ctrl+P

粘贴波形

中间选择位置+Ins

删除信号

Del

显示结构

H

重仿真后刷新波形

shift + L

代码中出现当前时刻的值

x

直接添加信号

g

修改波形颜色

c或t

更多知识可以查看一些博客总结:https://blog.csdn.net/immeatea_aun/article/details/80961258

4 其他补充内容

4.1 vcd文件

VCD (Value Change Dump)是一个通用的格式。 VCD文件是IEEE1364标准(Verilog HDL语言标准)中定义的一种ASCII文件。它主要包含了头信息,变量的预定义和变量值的变化信息。正是因为它包含了信号的变化信息,就相当于记录了整个仿真的信息,我们可以用这个文件来再现仿真,也就能够显示波形。因为VCD是 Verilog HDL语言标准的一部分,因此所有的verilog的仿真器都要能够实现这个功能,也要允许用户在verilog代码中通过系统函数来dump VCD文件。我们可以通过Verilog HDL的系统函数$dumpfile 来生成波形,通过$dumpvars的参数来规定我们抽取仿真中某些特定模块和信号的数据。

4.2 gtkwave工具

Gtkwave工具也是一种常用的波形查看工具,我没有用过,有时间再学学。

4.3 irun/xrun

  • Cadence有两大验证仿真工具。一个是IUS,代表工具NCverilog,一个是IES,代表工具irun。
    • IUS——ncverilog:Cadence上古时期仿真工具
  • 多步仿真模式,一步步执行
    • ncvlog/ncvhdl
    • ncelab
    • ncsim
  • 单步仿真模式,根据源程序类型自动调用相应的编译程序
    • ncverilog
  • IES——irun:ncverilog的后继者
  • 1后,IUS转为IES
  • ncverilog命令被替换为irun命令
    • NEW——Xcelium:Cadence最新仿真工具
  • 和irun的使用方式一样

与 Verdi 相似的,运行 irun 同样有两种方法,Makefile 和敲命令的方法。makefile 不过是把 irun 命令集中在一个文件内,方便后续执行而已。Makefile 如下所示:

irun 的选项很多,下面列举一些常用选项:

选项

说明

-64bit

使用64bit irun模式

-f

指定file list

-vlog_ext

修改verilog文件的默认后缀如 -vlog_ext .vvv,.vv ,修改verilog的默认后缀为.vvv和.vv

-c

只生成snapshot,不仿真

-access

设置访问权限

-nclibdirpath

指定 INCA_libs 目录

-R

只仿真,需要有提前生成的snapshot

-sv

支持systemverilog语言

-uvm

开启uvm,自动编译uvm库

-uvmhome

指定uvm库位置CDNS-1.2 默认IES中的uvm-1.2版本

-uvmnoautocompile

不自动编译uvm库

-clean

在run执行之前,删除INCA_libs文件夹

-l

指定输出log文件

-seed

指定随机种子数

-top

指定顶层模块

-hdlvar

指定 hdl.var文件

-cdslib

指定cds.lib文件

-loadpli1

指定读取外部读取的库文件

-prep

打开prep mode,不仿真,生成多步仿真的脚本文件生成4个文件,ncvlog_ver.args: ncvlog工具的参数文件ncelab.args ncelab工具的参数文件ncsim.args: ncsim工具的参数文件RUN_NC: 仿真的脚本文件,调用ncvlog,ncelab,ncsim。

-checkargs

检查irun的输入参数,是否有误

-helpargs

打印每个输入参数的作用

-helpall

打印帮助信息

+xxx=yyy

向验证环境传递仿真参数xxx,值为yyy

 

参考资料:

[1] V3学院IC教程

[2] 知乎文章-VCS入门教程4篇:https://www.zhihu.com/people/xing-qi-55-65/posts

[3] CSDN文章-常用数字设计仿真工具(Questa,VCS,IUS/Xcelium,Verdi等)使用入门: https://blog.csdn.net/chenxy_bwave/article/details/125893738

 

标签:仿真,文件,波形,DVE,top,Makefile,vpd,VCS
From: https://www.cnblogs.com/xianyuIC/p/17473754.html

相关文章

  • Makefile基础教程(伪目标)
    (文章目录)前言本篇文章将讲解Makefile中的伪目标,Makefile的目标在前面的文章中我们已经讲解了那么这篇文章我们就来讲讲伪目标。一、伪目标概念Makefile伪目标是一类特殊的目标,它们的目的是提供给make工具一些命令,而不是用来构建文件的。因为伪目标通常不会对应实际的文件......
  • Makefile教程(Makefile的结构)
    (文章目录)前言一、Makefile的结构Makefile通常由一系列规则组成,每条规则定义了如何从源文件生成目标文件。每个规则又由目标、依赖和命令三部分组成。下面是Makefile规则的基本结构:target:dependenciescommand1command2...其中,target是要生成的目标文......
  • Makefile教程(入门介绍)
    (文章目录)前言本篇文章将带大家学习Makefile,Makefile在文件的编译中起到重要作用,在Linux中我们也是经常使用到Makefile,下面我将会带大家学习什么是Makefile。一、Makefile介绍Makefile是用于自动化构建程序的一种工具,它通常被用于编译,连接以及打包程序等任务。Makefile利用了......
  • Makefile基础教程(变量的高级主题,变量的拓展)
    (文章目录)前言本篇文章将给大家讲解一下变量的高级主题,变量的拓展,这些主题可以让你更加灵活地编写和维护Makefile。一、变量值的替换1.简单替换变量替换语法格式:$(var:a=b)其中,a可以是一个字母,表示var中每个单词结尾的这个字母。b则是替换的字符串。它会替换每个单......
  • SC-FEGAN: Face Editing Generative Adversarial Network with User’s Sketch and Co
    SC-FEGAN:FaceEditingGenerativeAdversarialNetworkwithUser’sSketchandColorhttps://github.com/run-youngjoo/SC-FEGANhttps://arxiv.org/abs/1902.06838基于GAN的人脸编辑,效果非常好,应用点非常新颖。总的来说,效果非常好,包括很多细节都能够进行编辑。就创新点来讲,就是......
  • Makefile基础教程(自动生成依赖关系)
    @TOC前言在前面的文章中我们都只使用到了.c文件作为依赖但是在实际的工程中肯定是不可能只有.c文件的还存在.h文件,那么在包含了.h文件后又该如何来包含依赖关系呢?一、makefile不包含.h依赖的后果首先先在目录下新建四个文件夹,其中就包含了fun.h这个文件。makefile:OBJS:=fun.omai......
  • 【解决问题】libevent 编译时报错 Makefile:1708: test/.deps/test_regress-tinytest.
    1开发环境linux版本:统信UOS1030(可以认为是特殊的ubuntu)开发语言:C++2报错现象截图:报错语句:make:进入目录“/home/depend/libevent-2.1.11-stable”Makefile:1708:test/.deps/test_regress-tinytest.Po:没有那个文件或目录make:***没有规则可制作目标“te......
  • 简单Makefile文件编写
    简单编写单个C文件的Makefile文件,文件名为demo.cdemo.c文件如下:#include<stdio.h>intmain(){printf("hello,world!\n");return0;}编写Makefile文件如下:demo:demo.ogccdemo.o-odemodemo.o:demo.cgcc-cdemo.c-odemo.oclean:rm-rf......
  • VCS常用调试方法记录
    VCS常用调试方法1.若编译VCS报错不明显,可在pkg注释掉`inlcude`单个或多个文件后再编译。简单来说:注释!调试!2.若VCS报错信息noendpackage,可能是pkg中的某个文件有误3.调试编译除了可以用VCS也可用DVT来获取更多的报错信息来确定出错点4.可以将makeclean一下后再编译试试5.......
  • vSphere VCSA 6.7的搭建
    VCSA6.7搭建总是失败,最后总结是DNS解析的问题。步骤:一、下载VCSA安装包,挂载,这个步骤就没什么说的啦。二、第一步的安装,这里也基本没问题,但是涉及到后面是否安装成功,配置还是要不按照常规修改下。配置网络设置页面:FQDN填写VCSA的ip地址,DNS服务器也填写VCSA的ip地址,第一步按照默认安......