SystemVerilog学习笔记(一):数据类型

时间:2024-11-12 18:07:21

在systemverilog中,主要包含以下数据类型: 

  • 4值类型
  • 2值类型
  • 数组
  • 字符串
  • 结构体和联合体
  • 枚举
  • 自定义类型

  1. 无符号数:无符号数的符号不使用任何标志,即无符号数只能存储正数。无符号二进制数的范围从 0 到 ((2^n) - 1),n 表示位数。
  2. 有符号数:通过有符号数中的符号标志来区分正值和负值。有符号位的零有两种可能表示形式(正 (0) 和负 (1))。有符号二进制数的范围从 -2^(n-1) 到 2^(n-1)-1,n表示位数。有符号二进制数在计算机系统中,一般用补码来表示。

4 值数据类型

序号 数据类型 2值/4值 有符号/无符号
1. reg 4 >=1 unsigned
2. wire 4 >=1 unsigned
3. logic 4 >=1 unsigned
4. integer 4 32 signed
5. time 4 64 unsigned
6. real 4 64 unsigned
状态 描述
0 状态 0
1 状态 1
x or X 未知状态 (与 reg 有关)
z or Z 高阻态 (与 wire 有关)
  1.  reg 变量用于对锁存器、触发器和存储器等存储元件进行建模,它存储一个值并用于程序赋值。 reg 的默认值为 x
  2. wire 是一种 Verilog 数据类型,用于连接元件以及连接由单个门或连续分配驱动的网络。导线的默认值为 z
  3. Logic 类型是 4 值类型,可以取值 0、1、x 和 z。Logic 类型,可以用来代替 wire 和 reg,因为 wire 数据类型没有多个 driver。默认情况下 Logic 类型是无符号的,其初始值为 x。z。Logic 类型可以在过程块和连续赋值语句中驱动。
  4. 整数是 4 态数据类型,整数可以是 0,1,x 和 z,表示 32 位有符号数。整数的默认值为 x。整数可以保存范围从 -2^31 到 (2^31)-1 的值。
  5. time 是用于模拟时间测量的特殊数据类型。它是 4 值类型,表示 64 位无符号整数,可以与 $time 系统函数结合使用来保存当前的仿真时间。
  6. real 是以 64 位实数实现的实数数据类型。实数可以用十进制记数法 (4.43) 或科学记数法 (42e8) 指定。 real 数据类型的默认值为 0。

2 值数据类型

序号 数据类型 2值/4值 有符号/无符号
1. bit 2 >=1 unsigned
2. byte 2 8 signed
3. shortint 2 16 signed
4. int 2 32 signed
5. longint 2 64 signed
  1.  bit 可以是 0 或 1,代表单个位。bit 数据类型的默认值为 0。
  2. byte 可以是 0 或 1,表示 8 位有符号整数。byte 的默认值为0。
  3. shortint 可以是 0 或 1,表示 16 位有符号整数。 shortint 的默认值为 0。
  4. int 可以是 0 或 1,表示 32 位有符号整数。 int 的默认值是 0。
  5. longint 可以是 0 或 1,表示 64 位有符号整数。 longint 的默认值为 0。

数据类型转换

转换意味着将一种数据类型转换为另一种数据类型。 转换有两种类型:

  • 静态转换
  • 动态转换

静态转换 : 转换发生在编译时,不会出现任何运行时错误。静态转换仅适用于固定数据类型。它不适用于面向对象的编程概念。

语法 :data_type'(variable or expression or value);

动态转换 : 转换发生在运行时。如果转换无效,则会报告错误。动态转换用于将分配的值转换为通常无效的变量。 $cast 是系统方法。 $cast 可以是函数或任务。

语法 :$cast(destination_variable, source_expression_or_variable);

 枚举 enum

 枚举数据类型定义一组命名值。

  • 除非指定为其他类型,否则枚举类型存储为“int”类型。
  • 此类型会自动为列表中的每个名称赋予唯一值。
  • 值默认为“int”类型,从 0 开始,然后递增 1。
  • 如果没有为名称指定值,它将获取列表中前一个名称的值并加 1。

语法 :

enum enum_base_type(optional) {
<enum_name_declaration> = constant_expr(optional)...
}<enum_type_identifier>;

 

枚举函数:

序号 函数 描述
1 first() 返回枚举的第一个成员的值
2 last() 返回枚举最后一个成员的值
3 next() 返回枚举的下一个成员的值
4 prev() 返回枚举中前一个成员的值
5 num() 返回给定枚举中的元素数量
6 name() 返回给定枚举值的字符串表示形式

typedef 枚举数据类型

在 typedef 中可以给出类型名称,以便可以在许多地方使用相同的类型。

语法 :

typedef enum enum_base_type(optional) {
<enum_name_declaration> = constant_expr(optional)...
} <enum_type_identifier>;

String

 字符串类型是可变长度的有序字符集合。字符串的长度是集合中字符的数量。

  • 字符串的内存空间是动态分配的。
  • 字符串变量的索引应从 0 到 N–1(其中 N 是字符串的长度)进行编号,以便索引 0 是字符串的第一个(最左边)字符,索引 N–1 是最后一个(最右边)字符字符串的。
  • 未初始化或空字符串用特殊值 "" 表示。空字符串的长度为 0。
操作 操作符 描述
等于 str1==str2 如果两个字符串相等则返回 1,否则返回 0
不等 str1!=str2 如果两个字符串不相等则返回 1,如果相等则返回 0
比较 str1 < str2, str1 <= str2, str1 > str2, str1 >= str2 如果相应条件为 true,则返回 1;如果为 false,则返回 0
级联 {str1, str2, …, strN} 所有字符串将连接成一个结果字符串
复制 {N{str}} 将字符串复制 N 次
索引 str[index] 返回一个字节,即给定索引处的 ASCII 代码。如果给定索引超出范围,则返回 0

 

函数 描述
str.len() 返回字符串的长度。
str.putc() 修改字符串的一个字符
str.getc() 返回一个字符。
str.tolower() 返回字符串的小写字母。
str.toupper() 返回字符串的大写字母。
str.compare(s) 以 ascii 值形式返回字符串比较结果。
str.icompare(s) 以 ascii 值的形式返回不区分大小写的字符串比较结果。
str.substr(i,j) 返回主字符串的子字符串。