数据类型
数据类型用来定义存储值或者用于线连接的变量
数据类型 | 位宽 | 符号 | 值 |
---|---|---|---|
reg | 可变 | 无符号 | 四态(0, 1, x, z) |
wire | 可变 | 无符号 | 四态(0, 1, x, z) |
logic | 可变 | 无符号 | 四态(0, 1, x, z) |
bit | 1 | 无符号 | 二态(0, 1) |
byte | 8 | 有符号 | 二态(0, 1) |
shortint | 16 | 有符号 | 二态(0, 1) |
int | 32 | 有符号 | 二态(0, 1) |
longint | 64 | 有符号 | 二态(0, 1) |
Integer | 32 | 有符号 | 四态(0, 1, x, z) |
⚠️:使用有符号数据类型声明无符号变量,可以加 unsigned; 例如:byte unsigned i
Logic 数据类型只能一对一驱动,
数组
可综合:静态数组
仿真使用:动态数组、队列、关联数组
定宽数组
初始化数组
//非紧凑型数组
bit [31:0] cnt[3:0] = '{ 4, 3, 2, 1 } ; // 使用'{} 对一个元素进行初始化
//紧凑型
bit [31:0] cnt[4] = '{ 4, default:1} ; // 使用'{} 对一个元素进行初始化, default:1 后面元素都为 1
foreach
foreach(cnt[i]) == for(int i = 0; i<4; i++) //遍历数组元素,
合并数组
bit [31:0] cnt1[8]; //非合并数组,8 个 32 位元素
bit [3:0][7:0] cnt2[8]; //合并数组,8 个 4*8 元素
// cnt1[5][2] 为 1 位数据
// cnt2[5][2] 为 8 位数据。
// cnt2[5][2][4] 为 1 位数据。
动态数组
声明数组
int cnt[] ; // 使用空的[]
cnt = new[5]; // 使用 new[] 中括号的值来传递数组空间 cnt[4:0]
cnt.delete(); //删除所有元素
常数数组赋值
bit [7:0] cnt[] = '{8'b0000_0000,8'b1111_1111}; // cnt[1:0]
队列
声明
int cnt[$] = {3, 4}; //不需要 ' 来初始化或赋值
- cnt.push_front(6) 在队列前插入 6;
- cnt.pop_back. 将队列末尾的数移除并赋给别人;
- cnt.push_back(6) 在队列末尾插入 6;
- cnt.pop_front. 将队列末尾的数移除并赋给别人;
- cnt.insert(1,2) 在 cnt 的第二位前插入 1
$ 在等式左边:表示最小值; [$: 2] 即 [0:2]
$ 在等式右边:表示最大值; [$: 1] 即 [1:2]
关联数组
声明
需要在中括号里放置数据类型来声明
bit [31:0] cnt[bit[31:0]];
- cnt.first(ides) ; 找到第一个索引
- cnt.next(ides) ; 找到下一个索引
- cnt.delete(ides) ; 删除当前索引
数组方法
缩减方法
cnt.sum
; 对数组内所有元素进行求和.product(乘)
;.and(与)
;.xor (异或)
;.or (或)
定位方法
int cnt1[6] = '{1,2,2,6,6,7}; // 定宽数组
int cnt2[] = '{1,2,2,6,6,7}; // 动态数组
int cnt3[$] = '{1,2,2,6,6,7}, tq[$]; // 队列
tq = cnt1.min(); // 最小值 {1}
tq = cnt2.max(); //最大值 {7}
tq = cnt3.unique(); //唯一值 {1,2,6,7}
tq = cnt1.find with(item > 3); // 找到元素中大于 3 的所有元素 {6,6,7}
tq = cnt1.find_first_index with(item == 1); // 第一个找到元素为 1 的索引 [0]
tq = cnt1.find_last_index with(item == 1); // 最后找到元素为 1 的索引 [0]
**with
为条件语句 ** ,with (item >3) 为元素中大于 3 的元素。
其中,也可以将缩减方法与 with 条件语句结合
排序方法
-
sort() 从小到大
;rsort() 从大到小
;reverse() 倒序
;shuffle() 从小到大
其中,reverse 和 shuffle 不能和 with 条件语句结合使用
自定义类型
- typedef
- enum 创建枚举类型 ---> 适合创建常量列表
- struct 创建结构体
typedef int unsigned uint; // uint 表示 前面的 int unsigned ,相当于 define; uint表示的是变量类型
在枚举中,loat 代表缺省值 0, waite 为 2,idle 为 3;
enum {loat, wait} state_t; // state_t 表示的是枚举变量,是变量
typedef enum {loat, waite=2,idle} state_t; //定义枚举类型,这个 state_t 是枚举类型
//初始化
state_t pstate , nstate ;
case(pstate)
loat: nstate = waite ;
waite: nstate = loat ;
endcase
first()
返回第一个 枚举常量;last()
;next()
返回第下一个 枚举常量;next(N)
返回下 N 个 枚举常量;prev()
前一个枚举变量
typedef struct { int a; bit b ;} state_t; //同理,是结构变量
// 初始化
state_t cnt = '{32'haaaaaaaa, 32'd2};
字符串
单个字符转是 byte 类型,字符串使用动态存储方式,不用担心存储空间会用完。
标签:cnt,int,元素,System,枚举,Verilog,数组,bit From: https://www.cnblogs.com/50mhz/p/17743931.html