数据类型
四态值:0 1 X Z
logic、reg、net(wire)、integer、real、time、realtime
二态值:0 1
bit
- bit[7:0] 无符号
byte、shortint、int、longint、shortreal
byte、shortint、int、longint 默认有符号
unsigned 表示无符号
使用
$isunknown()
可检查二态值是否出现 X 或 Z
转换
1 | // cast |
- 当四态值转换为二态值时,X 和 Z 将转换为 0
数组
访问数组越界地址将返回缺省值(四值为 X,二值为 0)。
很多仿真器采用 32 比特的字边界存放数组。
当需要用@等待数组的变化,则必须使用合并数组。
非合并数组
维度声明
int array [0:3][0:7]
; orint array [4][8];
存放格式
bit[7:0] b_unpack[3];
初始化
int array [4] = '{0,1,2,3}
array = '{4{1}}
array = '{0,1,default:2}
array [0:2] = '{0,1,2}
合并数组
对某些数据类型,有时候希望作为整体访问,有时候则希望分解为更小单元访问,可使用合并数组。
数组大小声明
bit [3:0] [7:0] bytes;
(bit [size]
不可以)存放格式
bit [3:0] [7:0] bytes;
bit [3:0] [7:0] barray[3];
遍历:for & foreach
1 | initial begin |
数组聚合操作
1 | initial begin |
动态数组
定义
bit [3:0] d_array[];
分配大小、初始化
d_array = new[3];
d_array = '{0, 1, 2}
;方法
1
2d_array.size() // return 0 if not created
d_array.delete() // empties the array resulting in a zero-sized array追加元素
1
d_array = new [d_array.size() + N] (d_array); // 保留原有元素
关联数组
字符串 string
枚举 enum
定义
1
2
3
4
5
6
7
8
9
10
11enum {RED, YELLOW, GREEN} color_1; // 默认 int, RED = 0, YELLOW = 1, GREEN = 2
enum bit[1:0] {RED, YELLOW, GREEN} color_2; // 声明 bit, RED = 0, YELLOW = 1, GREEN = 2
enum {RED = 3, YELLOW = 5, GREEN} color_3; // 根据前者递增, RED = 3, YELLOW = 5, GREEN = 6
enum {BLACK[3]} color_3; // BLACK0 = 0, BLACK1 = 1, BLACK2 = 2
enum {BLACK[2] = 3} color_4; // BLACK0 = 3, BLACK1 = 4
enum {BLACK[3:4]} color_5; // BLACK3 = 0, BLACK4 = 1
enum {BLACK[4:5] = 4} color_6; // BLACK4 = 4, BLACK5 = 5
enum {RED = 0, YELLOW, GREEN = 1} color_7; // 错误:值冲突
enum bit[0:0] {RED, YELLOW, GREEN} color_8; // 错误:位宽不够
typedef enum {TRUE, FALSE} bool_t; // 自定义数据类型enum 命名不能以数字开头
方法
1
2
3
4
5
6
7
8typedef enum {RED, YELLOW, GREEN} colors;
colors color = YELLOW;
$display("%0d", color.first); // 0 (RED)
$display("%0d", color.last ); // 2 (GREEN)
$display("%0d", color.next ); // 2 (GREEN)
$display("%0d", color.prev ); // 0 (RED)
$display("%0d", color.num ); // 3
$display("%0d", color.name ); // YELLOW类型检查
1
2
3
4
5
6
7typedef enum bit[1:0] {RED, YELLOW, GREEN} colors;
colors color;
color = RED; // valid
color = 0; // invalid
color = colors'(0); // valid
if(color == RED | color == 0) // valid, autocast
...
结构体 structure
1 |