当前位置: 代码迷 >> 综合 >> VCS 仿真教程 lab1
  详细解决方案

VCS 仿真教程 lab1

热度:7   发布时间:2023-12-18 22:47:34.0

根据VCS Simulation Basics完成仿真教程lab1。

 

PartA

1.将文件传入linux虚拟机当中,教程总目录路径为~/vcs,所有的lab文件夹都在vcs文件夹下面。

2.进入./lab1/parta 开始进行第一组仿真实验,首先进行编译

$ vcs addertb.v fa.v add4.v add8.v

vcs命令会进行以下操作:

(1)检查verilog文件的语法

(2)解析引用的模块并建立电路层次

(3)检查编译选项

(4)对电路进行优化

(5)生成link object code, run-time routines以及利用PLI创建可执行文件simv

执行后得到的结果如下:

$ vcs addertb.v fa.v add4.v add8.vChronologic VCS (TM)Version I-2014.03 -- Mon Oct 21 16:17:06 2019Copyright (c) 1991-2014 by Synopsys Inc.ALL RIGHTS RESERVEDThis program is proprietary and confidential information of Synopsys Inc.
and may be used and disclosed only as authorized in a license agreement
controlling such use and disclosure.Parsing design file 'addertb.v'
Parsing design file 'fa.v'
Parsing design file 'add4.v'
Parsing design file 'add8.v'
Top Level Modules:addertb
No TimeScale specified
Starting vcs inline pass...
1 module and 0 UDP read.
recompiling module addertb
rm -f _csrc*.so linux_scvhdl_*.so pre_vcsobj_*.so share_vcsobj_*.so
ld -m elf_i386 -shared -o .//../simv.daidir//_csrc1.so --whole-archive _vcsobj_1_1.a  --no-whole-archive
ld -m elf_i386 -shared -o .//../simv.daidir//_csrc0.so 5NrI_d.o 5NrIB_d.o SIM_l.o  
if [ -x ../simv ]; then chmod -x ../simv; fi
g++  -o ../simv  -m32 -m32   -Wl,-rpath-link=./ -Wl,-rpath='$ORIGIN'/simv.daidir/ -Wl,-rpath='$ORIGIN'/simv.daidir//scsim.db.dir  _csrc1.so _csrc0.so     rmapats_mop.o rmapats.o rmar.o           /opt/Synopsys/VCS2014/linux/lib/libzerosoft_rt_stubs.so /opt/Synopsys/VCS2014/linux/lib/libvirsim.so /opt/Synopsys/VCS2014/linux/lib/librterrorinf.so /opt/Synopsys/VCS2014/linux/lib/libsnpsmalloc.so    /opt/Synopsys/VCS2014/linux/lib/libvcsnew.so /opt/Synopsys/VCS2014/linux/lib/libuclinative.so   -Wl,-whole-archive /opt/Synopsys/VCS2014/linux/lib/libvcsucli.so -Wl,-no-whole-archive          /opt/Synopsys/VCS2014/linux/lib/vcs_save_restore_new.o /opt/Synopsys/VCS2014/linux/lib/ctype-stubs_32.a -ldl  -lc -lm -lpthread -ldl 
../simv up to date
CPU time: 1.723 seconds to compile + .999 seconds to elab + .211 seconds to link

 

3.执行simv文件进行仿真,但是出现了问题

$ simv
$ bash:simv:command not found

在参照的几个仿真教程当中都是直接输入simv完成仿真,一度以为是VCS的安装出了问题导致相关文件丢失,无法执行命令,直到看到了这个帖子:http://bbs.eetop.cn/thread-424278-1-1.html

才知道实际上执行的是./simv,如果想要直接通过名字执行必须要先在.bashrc文件中设置(也反映出我对linux命令不熟悉)

需要在.bashrc文件中加入

export PATH=$PATH:.

加入以后就可以直接执行simv了,得到如下结果:

$ simv
Chronologic VCS simulator copyright 1991-2014
Contains Synopsys proprietary information.
Compiler version I-2014.03; Runtime version I-2014.03;  Oct 21 16:18 2019
*** Testbench Successfully completed! ***
$finish called from file "addertb.v", line 26.
$finish at simulation time             13107200V C S   S i m u l a t i o n   R e p o r t 
Time: 13107200
CPU Time:      0.590 seconds;       Data structure size:   0.0Mb

4.simv -o选项

$ vcs addertb.v fa.v add4.v add8.v –o addertest

执行以上命令之后得到的是名为addertest的可执行文件,运行addertest以后可以得到和之前simv一模一样的结果,因此-o相当于一个帮助你在生成编译文件之前就可以预设改名的选项。

 

PartB

1.在这一部分仿真中要用到教程总目录下的lib文件夹,目录结构如下所示:

在partb目录下执行以下的命令

 $ vcs addertb.v add8.v –y ../../lib +libext+.v -R

对命令进行分析:

(1)-y    指定一个verilog库目录,VCS会在这个目录当中寻找源文件中没有定义但是例化了的模块和实例。指定目录下的文件名和module名要一致且文件里面只能包含这个module,并需要用+libext+来指定文件类型。

注意:+libext+和.v之间不能有空格,否则会出现Error说没有.v这个文件,一开始习惯性地打了一个空格,一运行就报错了。

(2)-R   表示在编译之后立即执行仿真。

 

因此这个命令的意思是除了对addertb.v和add8.v 两个文件进行编译,还会在lib文件夹下寻找源文件中没有定义但例化了的模块,同时指定必须是.v后缀文件类型(在这里是fa.v和add4.v),并对这些文件进行编译。所有符合条件的文件编译完毕后立即执行仿真。

 

2. sim -f选项

创建.f文件来简化仿真时的代码,文件中包含所有要用到的源文件和库,并在编译的时候用-f选项调用。首先创建adder.f文件,文件中包含以下内容(注:这里+libext+.v中间也不能有空格):

addertb.v
add8.v
-y ../../lib +libext+.v

然后输入命令:

$ vcs –f adder.f -R

出来的是与第一步完全一样的结果,说明在第一步命令当中对.v文件的选择和-y选项都被包含在.f文件当中了。

 

 

Questions

仿真教程最后还留了两个问题,

(1)-R可以放入adder.f文件当中吗?

(2)-y选项可以用-v选项替换吗?如果可以的话要怎么替换?

 

 

(1)首先第一问,我再adder.f文件里加入了-R并运行,立即出现了Warning

Warning-[ILLGO] Invalid option usedInvalid option '-R' must be ignored.Please check vcs -help for supported options.

然后发现-f选项的官方解释是这样的:

-f <filename>   Specifies a file that contains a list of pathnames to source files and compile-time options.

-R不属于source files 也不属于compile-time options编译选项)自然就不能放到.f文件当中了。

 

(2)然后是第二问,-v选项的官方解释如下:
 -v <filename>    Specifies a Verilog library file to search for module definitions.

Specifies a Verilog library file. VCS looks in this file for definitions of the module and UDP instances that VCS found in your source code, but for which it did not find the corresponding module or UDP definitions in your source code.

注:指定一个库文件,VCS会来这个文件中找源代码中例化的但在源代码中找不到的模块和实例,这里一个文件可以里面包含很多module。

于是我在总文件夹下创建了~/vcs/libtest/addermod.v,把fa.v和add4.v的内容都复制到addermod.v文件当中

然后回到partb文件夹中执行以下命令:

$ vcs addertb.v add8.v -v ../../libtest/addermod.v 

编译成功执行。

-y和-v的区别在于:-y是指定一个目录搜索,每个模块是目录下独立的一个文件并且名字要和模块名一一对应;而-v命令是指定一个文件,所有的模块都放在这个文件里面,对文件名没有要求。

 

参考资料:http://blog.sina.com.cn/s/blog_185a086540102x2pc.html