目录前言一、数据对象和数据类型二、变量声明格式1. const2. var3. lifetime4. data_type5. variable_name6. dimension7. value三、常见数据类型总结前言本文主要从 IC 验证的常用角度出发梳理 SystemVerilog 中的几个基础概念数据对象和数据类型变量声明格式常见数据类型有哪些本文重点放在验证中常用的变量上线网类型仅作简要说明。一、数据对象和数据类型在 SystemVerilog 中声明一个数据时需要先分清两个概念概念英文说明举例数据对象data object在代码中扮演什么角色parameter、var、net-type (wire, tri)数据类型data type存储什么样的数据logic、bit、int、real例如parameterintWIDTH32;logic[7:0]data;wire ready;其中代码数据对象数据类型parameter int WIDTH 32;parameterintlogic [7:0] data;默认为varlogic [7:0]wire ready;wire默认为logic二、变量声明格式SystemVerilog 标准中变量声明的语法大致如下data_declaration :: [ const ] [ var ] [ lifetime ] data_type_or_implicit list_of_variable_decl_assignments ;为便于理解可将其简化为以下格式[const] [var] [lifetime] data_type variable_name [dimension] [ value];下面逐项解释。1.constconst用来修饰变量表示该变量初始化后不能再被重新赋值。写法含义不写const可以重新赋值写const初始化后不能再被修改例如constintWIDTH32;需要注意const和parameter不完全相同。parameterintWIDTH32;constintDEPTH16;简单理解类型说明parameter参数通常用于模块参数化常在 elaboration 阶段确定const强调变量初始化后不再修改2.varvar表示变量。写法含义不写var在普通变量声明中通常默认就是变量写var显式说明这是变量例如logic a;var logic b;上面两种写法在变量声明中都表示变量。var的主要作用是显式区分变量和线网。例如var logic a;wire logic b;其中声明含义var logic a;a是变量数据类型是logicwire logic b;b是 net 数据类型是logic在 SystemVerilog 验证中变量声明通常很少显式写var一般直接写logic valid; bit [7:0] data; int count;3.lifetimelifetime表示变量的生命周期。主要有两个取值取值含义static静态生命周期变量在仿真过程中始终存在automatic自动生命周期进入其作用域时创建离开其作用域时销毁如果不写lifetime变量会采用所在作用域的默认生命周期。4.data_typedata_type表示数据类型即该变量所能存储的数据种类。常见数据类型有bit logic reg byte shortint int longint integer time real shortreal realtime string event也可以是用户自定义类型例如typedefenum{IDLE,BUSY,DONE}state_t;state_t state;也可以是结构体、类、虚接口等类型structpacked{logic[7:0]addr;logic[7:0]data;}packet_s;virtualapb_if vif;如果省略data_type在 SystemVerilog 中默认类型为logic。但在实际编码中不建议依赖隐式类型声明最好显式地写出类型logic[7:0]data;intcount;bit flag;这样能提高代码的可读性并减少误解。5.variable_namevariable_name就是变量名。例如int count; logic valid; bit [7:0] data;其中声明变量名int count;countlogic valid;validbit [7:0] data;data也可以一次声明多个变量int a, b, c; logic [7:0] data0, data1;6.dimensiondimension表示维度主要分为两类类型位置作用packed dimension写在类型后、变量名前表示位宽、向量范围unpacked dimension写在变量名后表示数组维度packed dimension例如logic[7:0]data;这里[7:0]是 packed dimension表示data是一个 8 bit 向量。unpacked dimension例如logic[7:0]mem[16];这里logic [7:0]表示每个元素是 8 bitmem [16]表示一共有 16 个元素也就是说mem是一个数组数组中每个元素都是logic [7:0]。7. value value表示声明时初始化。写法含义不写使用该类型的默认初始值写 value声明时赋初值例如int count 0; logic [7:0] data 8hff; string name apb;如果不写初始化值不同类型的默认初始值不同。常见情况如下类型默认初始值2 值类型例如bit、byte、int04 值类型例如logic、reg、integerxreal、shortreal、realtime0.0string空字符串class handlenulldynamic array / queue空例如bit a; // 默认 0 logic b; // 默认 x int c; // 默认 0 integer d; // 默认 x所以在验证环境中如果变量是否被初始化会影响检查结果最好显式初始化避免因为默认值导致误判。三、常见数据类型SystemVerilog 标准中常见数据类型可以先分成三类标准分类类型说明integer_vector_typebit、logic、reg整数向量类型通常配合位宽使用integer_atom_typebyte、shortint、int、longint、integer、time整数原子类型其位宽基本固定non_integer_typeshortreal、real、realtime浮点数类型常见类型汇总如下类型标准分类位宽二值/四值默认符号bitinteger vector用户定义默认 1 bit2 值unsignedlogicinteger vector用户定义默认 1 bit4 值unsignedreginteger vector用户定义默认 1 bit4 值unsignedbyteinteger atom8 bit2 值signedshortintinteger atom16 bit2 值signedintinteger atom32 bit2 值signedlongintinteger atom64 bit2 值signedintegerinteger atom32 bit4 值signedtimeinteger atom64 bit4 值unsignedshortrealnon-integer32 bit/无realnon-integer64 bit/无realtimenon-integer64 bit/无SystemVerilog 普通 4 值逻辑包括值含义0逻辑 0假1逻辑 1真x未知值z高阻值二值类型只能表示0 14 值类型可以表示0 1 x z所以在验证中场景常用类型需要观察x/zlogic不关心x/z只关心 0/1bit普通计数、循环变量int字符串string同步事件event时间realtime总结本文主要从 SystemVerilog 的 变量声明出发梳理了数据对象、数据类型、变量声明格式以及常见的数据类型。概念说明数据对象说明声明出来的数据在代码中扮演什么角色例如parameter、var、wire。数据类型说明该数据能存储什么样的值例如logic、bit、int、real。const修饰变量表示初始化后不能再被重新赋值var显式说明声明的是变量对象lifetime决定变量的生命周期主要有static和automatic。data_type决定变量的数据类型。dimension决定位宽或数组结构 value声明时初始化在 IC 验证中常见的类型场景常用类型接口信号、RTL 信号logic不关心x/z的变量bit计数、循环变量int固定位宽字段logic [N-1:0]或bit [N-1:0]字符串string同步事件event时间相关变量realtime线网连接、多驱动、三态场景wire或其他 net 类型