vcs所有编译命令都是接在字符“vcs”后面,表示调用vcs工具。
1. 编译sv文件
vcs **.sv
此时可能会报语法错误,因为vcs默认只识别verilog语法,system verilog语法无法识别,编译会报错。解决办法见2。
2. 支持system verilog语法
后面加上-sverilog
结果:此时在当前目录下会生成一个文件simv和两个文件夹:csrc/simv.daidir
Simv:这是compile和link后生成的二进制可执行文件
Csrc:这是增量编译文件夹
Simv.daidir:这是编译产生的中间数据,当使用verdi打开波形时可以直接导入该文件夹而省去了手动导入filelist重新编译的步骤,提升效率。
3. 支持生成波形
如果采用调用系统函数$fsdbDumpvars的方式产生波形。由于$fsdbDumpvars这个系统函数并不属于system verilog的系统函数,而是vcs提供的PLI回调函数,用于debug手段,在vcs手册可以查找到相关的内容。解决办法是还需要在vcs编译命令里加上-debug_access+cbk或者-debug_access+all
-debug_access+cbk:该选项允许对sv的字符串类型的信号以及对nets/reg/var类型的PLI回调函数进行dump,但是不能对class里定义的动态nets/regs/vars的PLI回调函数进行dump,此时还需要+cbkd,因此保险起见,还是建议使用-debug_access+all使能所有选项。
4. 生成kdb.elab++文件夹
kdb.elab++文件夹:这是vcs提供给verdi的文件,省去verdi的编译时间。打开verdi时,只要指定了该文件夹,Verdi就能加载rtl代码。
该文件夹的生成需要在编译命令里加上-kdb命令:
编译之后,simv.daidir文件夹下就会多出一个kdb.elab++文件夹和elabcomLog文件夹:
5. 编译log存储到文件里
命令:-l 文件名
编译过后,生成文件cmp.log:
5. 指定timescale
命令:-timescale=时间单位/时间精度
在没有添加该命令前,vcs默认的时间单位/精度是1s/1s。
添加了该命令后,作用就是给环境设置了一个默认的时间单位/精度。