VCS-数字逻辑仿真工具实践-1
写在前面:
百度是这样介绍VCS的:
VCS是编译型Verilog模拟器,它完全支持OVI标准的Verilog HDL语言、PLI和SDF。VCS具有目前行业中最高的模拟性能,其出色的内存管理能力足以支持千万门级的ASIC设计,而其模拟精度也完全满足深亚微米ASIC Sign-Off的要求。
VCS结合了节拍式算法和事件驱动算法,具有高性能、大规模和高精度的特点,适用于从行为级、RTL到Sign-Off等各个阶段。VCS已经将CoverMeter中所有的覆盖率测试功能集成,并提供VeraLite、CycleC等智能验证方法。VCS和S*cco也支持混合语言仿真。VCS和S*cco都集成了Virsim图形用户界面,它提供了对模拟结果的交互和后处理分析。
手机中设置的“待办事项”属于.vcs格式。
声明:本文基于下面某站学习整理,链接如下:
https://www.bilibili.com/video/BV1h5411t7A7?p=1
VCS对verilog模型进行仿真包括两个步骤:
1. 编译verilog文件成为一个可执行的二进制文件命令为:vcs source_files
2. 运行该可执行文件:./simv
类似于NC, 也有单命令行的方式:vcs source_files -R
-R 命令表示, 编译后立即执行。
Verilog仿真事件队列
Verilog内建仿真规范
- IEEE1364: Verilog语言的仿真基于分层的事件队列
- 执行事件的队列
- 仿真时间的计算
- Verilog仿真器先从没有延退的事件开始,执行他们,然后把时间设成0,然后按照时间循序一次执行各个事件
- Verilog语言规范没有规定当多个事件被安排在同一个时刻来调度时,应该执行那个
- 只要在同一层的事件,什么执行循序都是可以的
- 设计师必须理解 Verilog的分层次仿真事件队列
逻辑仿真队列
1.VCS首先会读取initial和always block,执行没有延时的语句。
2.将时间设置成t=0
3.进入active region:
(1)首先执行原语(包括UDP即用户定义的原语),例如简单的与门或门、上拉下拉等
(2)$display
(3)continuous assignments例如assign
(4)阻塞赋值,先计算右边的表达式再赋给左边;非阻塞赋值只计算右边的表达式,没有完成赋值过程,这一块结束才赋值成功。
4.进入inactive region:处理#0语句
5.进入nonblocking assign region:非阻塞赋值在这个模块执行
6.进入monitor region:$monitor在这个模块执行,与$display不同,只有变量值出现变化才会输出监测值。因此$monitor显示的一定是赋值之后的新值,$display可能显示的是旧值。
7.进入future region
vcs编译型仿真器
同一段代码,交给不同仿真器,仿真结果不一样;
VCS可以支持多种级别的描述方式:
- 行为级描述
- RTL(寄存器传输级)
- Gate-level(门级),与具体工艺库有关
Compile-time option examples
- vcs-help
lists compile options, run-time options, environment variables
Command line options(commonly used):
- -Mupdate
Incremental compilation (only changed files are compiled)
增量编译,类比增量备份。
- -R
Run after compilation
编译完成立即执行仿真
- -gui
Starts the DVE gui at runtime
仿真时启用DVE图形界面
- -I <filename>
Set log file name
把编译过程写入compile.log文件,便于查看(log在词源中,好像就有记录的意思)
- -sverilog
Enable Systemverilog language support
支持SV语言
- +v2k
Compile with support for Verilog 2001 extensions
支持verilog 2001标准
Run-time options example
加入定义define的三种方法
1.文件中加入 `define INC_COUNTER。
2.新建立一个文件,在文件中加入 `define INC_COUNTER 并在原文件中引用这个文件
`include "file"需要启用+incdir+选项指定目录。
3.编译时启用选项+define+INC_COUNTER