VCS 即 verilog compile simulator,主要分为两个步骤:compile编译、simulator仿真
- 编译
编译verilog文件成为一个可执行的二进制文件,完成后生成 simv 文件。
vcs <source_files>
- 仿真
运行生成的二进制文件,进行仿真。
./simv
实际使用
封装成一个python脚本,方便使用。
#! /usr/bin/env python
import os, sys
# 打印脚本信息和分割线
def cut_line():
"Draw the cut lines."
print "-" * 79
print """Script name: run_vcs.py"""
cut_line()
# 读入源文件
if sys.argv[1] == '':
print("Please type in the path of filelist.")
quit()
filelist = sys.argv[1]
print("VCS running case: " + filelist)
# 删除原来的仿真文件
rm_command = "rm ./simv -f"
# 编译命令
vcs_command = "vcs -full64 +v2k +nospecify -sverilog -fsdb -override_timescale=1ns/1ps -f " + filelist
# 仿真命令
simv_command = "./simv "
sys.stdout.flush()
os.system(rm_command)
os.system(vcs_command)
os.system(simv_command)
编译参数
- +v2k
使能verilog2000的标准 - +nospecify
不对SPECIFY 模块进行时序检查和路径延时计算 - +notimingcheck
不进行时序检查;但是还是把path延时加入仿真中 - -timescale
time_unit采用就近原则,例如顶层文件定义timescale后,中间文件再次定义timescale,则其后的文件按照中间文件定义的timescale执行。time_precision则采用最小的精度 - -override_timescale
统一所有的timescale - -f -F
-f采用绝对路径;-F与-f类似,也可以采用绝对路径,同时也支持相对路径,但不允许嵌套使用。
VCS用-F解析filelist时,不允许文件嵌套使用,不支持`include “xxx.v”这种写法,改为-f便ok了。 - +incdir+directory+
添加include 文件夹 - -R
编译完成后,自动执行当前编译生成的可执行文件 - +vcs+initmem+0|1|x|z
初始化RTL中所有mem的所有bit初始值
- +vcs+initreg+0|1|x|z
初始化RTL中所有reg的所有bit初始值 - VCS的+ -区别
-的一般是编译时用的,编译工具自带的。
+的是插件,环境,验证语言,等等加的,可扩展的,自定义的。