一,基础介绍
VCS用来编译仿真verilog/systemverilog,先将HDL源文件转化为C文件,在linux下编译和链接生成可执行文件,运行可执行文件即可得到仿真结果。
- 编译命令格式 :vcs sourcefile [compile_time_option] (编译选项用来控制编译过程)
- 执行仿真命令格式:./simv [run_time_option] (simv为可执行文件)
常用编译选项(更详细参考 VCS 编译选项 - 知乎 (zhihu.com)):
- +neg_tchk:使能时序检查中的负延时
- +notimingcheck:不进行时序检查
- +sdf_nocheck_celltype:SDF反标时不检查SDF文件中的celltype的一致性
- +v2k:支持Verilog-2001标准
- -f <filename>:指定文件列表的文件名,文件中可包括源代码文件的路径和名称,也可以包括编译选项参数
- -R:在编译之后立即执行产生的可执行文件
- -v <filename>:指定verilog库文件
- -l <filename>:指定记录VCS编译和运行信息的log文件名
- -o <name>:指定编译生成的可执行文件的名称,默认是simv
- -gui:仿真开始后启动DVE图形界面
- -verdi:使用verdi图形界面
- -debug_all:用于产生debug所需的文件
在复杂设计的VCS使用中,经常将需要编译的源文件写进一个verilog.f文件,然后用-f选项指定文件进行编译。
同时,也可以把编译过程写成makefile脚本,提高程序的复用性,提高效率:
#一种参考运行vcs的makefile脚本
.PHONY:com sim clean OUTPUT = adder_top VCS = vcs -sverilog +v2k -timescale=1ns/1ns \ -debug_all \ -o ${OUTPUT} \ -l compile.log \ SIM = ./${OUTPUT} -l run.log com: ${VCS} -f verilog_file.f sim: ${SIM} clean: rm -rf ./csrc *.daidir *.log simv* *.key
执行make com、make sim、make clean即可执行编译、仿真、清除指令。
二,VCS testbench搭建
简单的testbench常常是initial给波形,always给时钟,然后使能信号看输出,但这种方法效率很低,目前通用的是uvm(Universal Verification Method,通用验证方法学)。对于个人开发者或者学生而言,需要快速搭建testbench用于vcs对自己的设计进行验证。
1,verilog testbench基本语法
完整的testbench测试文件结构为:
`timescale 仿真单位/仿真精度 module Test_bench();//通常无输入无输出 信号或变量声明定义 逻辑设计中输入对应 reg 型 逻辑设计中输出对应 wire 型 使用 initial 或 always 语句产生激励 例化待测试模块 监控和比较输出响应 endmodule