VCS 即 verilog compile simulator,主要分為兩個(gè)步驟:compile編譯、simulator仿真
- 編譯
編譯verilog文件成為一個(gè)可執(zhí)行的二進(jìn)制文件,完成后生成 simv 文件。
vcs <source_files> - 仿真
運(yùn)行生成的二進(jìn)制文件,進(jìn)行仿真。
./simv
實(shí)際使用
封裝成一個(gè)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)
# 刪除原來(lái)的仿真文件
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)
編譯參數(shù)
- +v2k
使能verilog2000的標(biāo)準(zhǔn) - +nospecify
不對(duì)SPECIFY 模塊進(jìn)行時(shí)序檢查和路徑延時(shí)計(jì)算 - +notimingcheck
不進(jìn)行時(shí)序檢查;但是還是把path延時(shí)加入仿真中 - -timescale
time_unit采用就近原則,例如頂層文件定義timescale后,中間文件再次定義timescale,則其后的文件按照中間文件定義的timescale執(zhí)行。time_precision則采用最小的精度 - -override_timescale
統(tǒng)一所有的timescale - -f -F
-f采用絕對(duì)路徑;-F與-f類(lèi)似,也可以采用絕對(duì)路徑,同時(shí)也支持相對(duì)路徑,但不允許嵌套使用。
VCS用-F解析filelist時(shí),不允許文件嵌套使用,不支持`include “xxx.v”這種寫(xiě)法,改為-f便ok了。 - +incdir+directory+
添加include 文件夾 - -R
編譯完成后,自動(dòng)執(zhí)行當(dāng)前編譯生成的可執(zhí)行文件 - +vcs+initmem+0|1|x|z
初始化RTL中所有mem的所有bit初始值
- +vcs+initreg+0|1|x|z
初始化RTL中所有reg的所有bit初始值 - VCS的+ -區(qū)別
-的一般是編譯時(shí)用的,編譯工具自帶的。
+的是插件,環(huán)境,驗(yàn)證語(yǔ)言,等等加的,可擴(kuò)展的,自定義的。