一、SV在验证方面的语言特性优势
SV(system verilog)是在verilog的基础上扩展出的新的语言,相比verilog与VHDL,在验证方面具有以下优势:
- 抽象的数据结构可以满足更高层的验证需要;
- 面向对象这种软件编程方式提供了更好的模块性,封装性和复用性;
- 用于验证部分的语言属性完全基于软件化的方式实现,使得验证一侧独立于设计;
- 约束化的随机激励可提高回归测试的收益;
- 功能覆盖率可量化功能验证点使得验证进度更易于反映;
- 为属性检查提供专用分支语言属性;
二、数据类型
- verilog数据类型:
wire(线网类型),主要用于连续赋值语句(assign),输出随输入变化即刻反映。
reg(变量类型),主要用在过程快(initial,always),表示一定有触发,输出才会反映输入的状态。 - sv新引入数据类型:
logic,可用于连续赋值语句,也可用于过程块,只会作为单纯的变量进行赋值操作(该类型变量只属于软件环境构建)
三、变量类型
- 按逻辑数值类型区分:
四值逻辑类型(可表示0,1,x,z):integer,reg,logic,net-type(如wire,tri);
二值逻辑类型(可表示0,1):byte,shortint,int,longint,bit; - 按有无符号区分:
有符号类型:byte,shortint,int,longint,integer;
无符号类型:bit,logic,reg,net-type(如wire,tri);
注:在变量运算中,尽量避免对两种不一致的变量进行操作而导致的而意外错误。编码时,将操作符左右变量转换为同一类型后再进行运算(从逻辑数值类型,符号类型,矢量位宽三个方面考虑)。
四、模块定义与例化
- verilog模块定义:
module dut_top0 ( clk, reset, req, cmd, addr, ack, rdata);
input clk;
input reset;
input req;
input [1:0] cmd;
input [39:5] addr;
output ack;
output [2