验证-SystemVerilog-数据类型、断言
刚开始工作,首先要去做验证相关的工作了,后续还是以FPGA的Verlog为主,但还是懂一些SystemVerilog,不需要精通,只希望懂点基本的。
1、logic和bit
SV作为验证语言,不关心变量对应的逻辑应该被综合为寄存器还是线网,同时为了方便DV驱动和连接硬件模块,省去考虑reg和wire的精力,于是新引入了logic和bit。
注意:logic和bit不能是多驱,即如果硬件端用的是inout wire类型,则不能用logic/bit,只能用wire。
数据类型 | 属性 | 符号 | 描述 |
logic | 4值 | 无 | 0、1、X、Z |
bit | 2值 | 无 | 0、1 |
1.1 logic和bit的比较
由于验证环境更多的是二值逻辑,所以即使有了四值逻辑logic,还要引入二值逻辑bit。相较于四值逻辑logic,二值逻辑bit有利于提高仿真器的性能并减少内存的使用量。
//**************************************************************************
// *** 名称 : SV_02_bit_vs_logic.v
// *** 描述 : logic(4值)和bit(2值)的比较:
//**************************************************************************
module SV_logic_vs_bit;initial begin: logic_vs_bitbit bit_num;logic logic_num;$display("---< test start >---")//---------------------------------------------------------------------logic_num = 'b1; $display("logic_num = %d",logic_num);bit_num = logic_num; $display("bit_num = %d",bit_num);// # logic_num = 1 // # bit_num = 1//---------------------------------------------------------------------logic_num = 'b0; $display("logic_num = %d",logic_num);bit_num = logic_num; $display("bit_num = %d",bit_num);// # logic_num = 0 // # bit_num = 0//---------------------------------------------------------------------logic_num = 'bx; $display("logic_num = %d",logic_num);bit_num = logic_num; $display("bit_num = %d",bit_num);// # logic_num = x // # bit_num = 0//---------------------------------------------------------------------logic_num = 'bz; $display("logic_num = %d",logic_num);bit_num = logic_num; $display("bit_num = %d",bit_num);// # logic_num = z // # bit_num = 0
endendmodule
1.2 四值逻辑的检查
如果DUT试图产生x或z,采用bit后这些值会被转换为0或1,使用$isunknow可以在表达式任意位出现x或z时返回1.
if($isunknow(iport)==1)$display("@%0t: 4-state value detected on iport %b",$time,iport);
2、有符号数
大多数时候使用的都是无符号数,logic和bit也属于无符号数,但也有时候需要使用到有符号数。
数据类型 | 属性 | 尾款 | 符号有无 |
int | 2值 | 32 | 有 |
int unsigned | 2值 | 32 | 无 |
integer | 4值 | 32 | 有 |
shortint< |