当前位置: 代码迷 >> 综合 >> VCS 视频教程 笔记 第一课
  详细解决方案

VCS 视频教程 笔记 第一课

热度:19   发布时间:2023-12-18 22:43:45.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

 

  • Example
`define CASE1
`timescale 1ns/1nsmodule sim_event;reg clk,a,z,zin;always @(posedge clk) begina = 1'b1;#0;a = 1'b0;end`ifdef CASE1always @ (a) #0 z = zin;always @ (a)    zin = a;`elsealways @ (a)    z = zin;always @ (a) #0 zin = a;`endifinitial begin#50 clk = 1'bz;#50 clk = 1'b0;#50 clk = 1'b1;#50 $finish();endendmodule

**编译型仿真器和解释型仿真器的区别:

编译型仿真器必须要先经过编译的过程;

解释型仿真器可以不经过编译,边解释边仿真,相当于执行一个脚本。

 

在vcs中仿真出的结果如下图所示:

视频中仿真出的结果如下图所示:

对于上述这种代码,仿真结果没有绝对的对错,区别只在于仿真规范的不同。

 

  • 代码规范

1.在时序逻辑中(即always模块中)不推荐/不要使用阻塞性语句,而是用非阻塞性<=符号。

2.always模块中(整个RTL级代码中)不推荐/不要使用#0语句。

3.对于一个时序逻辑要记得加上rst信号。

4.用always描述组合逻辑电路时用always @(*)

 

数字逻辑仿真工具实践——VCS

真正写代码的时间很少,大部分时间会花在debug上

代码覆盖率/功能覆盖率

Compiles with IEEE-1364, including PLI1.0/VPI(PLI2.0) (Programming Language Interface)   

→VCS提供了接口供用户debug

VCS可以支持多种级别的描述方式:

  1. 行为级描述
  2. RTL(寄存器传输级)
  3. Gate-level(门级),与具体工艺库有关

 

  • VCS Compilation Command Format
$vcs source_files[options]
  • -Mupdate 增量编译,对大量文件进行编译以后,如果只想修改其中的个别文件可以启用这个选项,避免重复编译。
  • -R 立即执行仿真
  • -gui 启用DVE图形界面
  • -l <filename>  生成指定名字的log文件,大型项目必备
  • -sverilog 支持SV语言
  • +v2k 支持verilog 2001标准

编译时的选项:-v -y -f -o等,详情见lab1教程文章

 

  • VCS Run-time Command Format
$simv [options]
  • -s 时间为0时暂停仿真
  • $plusargs() +userswitch 从键盘或者脚本动态地接受一个参数
  • -E 返回生成当前simv文件时所用的编译选项
  • -l 生成logfile,大型项目必备

 

  • Using DesignWare Library with VCS

DesignWare是软件自带的库,可以在vcs安装目录下找到

$ Dwpart # (parameters) u1(.porta(a), .portb(b));//例化一个名为u1的文件

需要配合-y选项寻找DesignWare的库,否则软件会提示找不到

 

  • 加入定义define的三种方法

1.文件中加入 `define INC_COUNTER。

2.新建立一个文件,在文件中加入 `define INC_COUNTER 并在原文件中引用这个文件  `include "file"

   需要启用+incdir+选项指定目录

3.编译时启用选项+define+INC_COUNTER

 

 

 

 

 

 

 

 

 

 

  相关解决方案