网站首页 > 文章精选 正文
1、System Verilog数据类型
System Verilog新增的数据类型:
(1)两态(I/O)数据类型;
(2)枚举类型;
(3)用户自定义类型;
(4)静态数组;
(5)压缩数组;
(6)动态数组;
(7)关联数组;
(8)队列;
(9)字符串;
(10)结构体;
(11)联合体;
(12)常量。
1.1、数据类型
verilog中常用的数据类型:变量reg和网线wire,均为四态数据类型(0、1、X、Z)。变量的存储都是静态的,仿真过程中不能使用堆栈来保持参数和当前值;网线wire用来连接两个设计模块。
两态数据类型,减少仿真器对内存的使用和提高仿真的运行效率,System Verilog中常用的两态数据类型:bit,byte,shortint,int,longint。
1.1.1、按照两态和四态数据类型分类
两态数据类型(1、0),默认值为0:bit-单比特,byte-8位整型有符号数,int-32位整型有符号数,shortint-16位整型有符号数,longint-64位整型有符号数。
四态数据类型(0、1、X、Z),默认值为X:reg-无符号数,logic-无符号数,integer-32位整型有符号数。
1.1.2、其他常用的数据类型及方式
time-64位整数,单位s;
real-64位;
shortreal-32位;
string-可变长度的字符数组;
void-空返回,用于函数;
int转换无符号数:int unsigned using_int;
reg转换有符号数:reg signed sig_reg;
注意:System Verilog引入logic用来代替reg;在双向总线和多驱动的情况下,只能使用wire。
1.2、枚举类型
枚举类型用来声明一组整型的命名常量,定义具有强类型的枚举变量。
例子:枚举类型定义一组具有名字的数值,light1、light2定义成int枚举类型,包含三个成员red/green/blue
enum{
red,
green,
blue
}light1,light2;
初始化枚举类型,不能被在枚举集合范围以为的数值直接赋值。
比如:
initial
begin
light1 = red;
light2 = blue;
end
1.3、用户自定义类型
System Verilog中,通过使用typedef关键字进行用户自定义类型的扩展。
例子:定义LED color enum,logic [2:0] color_t,其中[2]-red,[1]-green,[0]-blue
parameter LED_WIDTH = 3;
typedf enum logic[LED_WIDTH-1:0]{
LED_OFF = 3'b111,
LED_RED = 3'b011,
LED_GREEN = 3'b101,
LED_BLUE = 3'b110
}color_t;
color_t use_color_t;
initial
begin
//两种初始化方式
use_color_t = LED_OFF;
use_color_t = color_t`(1); //通过color_t数据类型标识符做类型转换
end
1.4、静态数组和压缩数组
静态数组是指其数组的大小在定义时被显性地指定。
System Verilog引入两种类型的数组:压缩数组和非压缩数组。
压缩数组:维数的定义在变量标识符之前;
非压缩数组:维数的定义在变量标识符之后;
例子:
bit [07:00] i; //压缩数组(比特类型)
real j [07:00]; //非压缩数组(实型)
bit [03:00] [07:00] reg_32;//4个字节压缩为32bits的向量
bit [03:00] [07:00] mix_array [3];//3个非压缩的数组(每个数组由4个字节压缩为32bits的向量)
1.5、动态数组
System Verilog提供了动态数组,可以在仿真的过程中动态分配大小。
动态数组的声明语法:
data_type array_name[];
[]表示编译时未指定数组的大小,在运行时可以动态分配。使用前必须通过调用new[],并在[]中输入期望的长度数值来分配空间。foreach会自动遍历数值中的元素。
例子:
int dyn1[],dyn2[];//声明两个动态数组dyn1和dyn2
initial
begin
dyn1 = new[50]; //给动态数组分配50个成员
foreach(dyn1[i]) //初始化动态数组
begin
dyn1[i] = i;
end
dyn2 = new[50](dyn1); //复制dyn1数组至dyn2
dyn2[10] = 1; //修改动态数组[10]数值为1
end
1.6、关联数组
关联数组是一种通过标号来分配空间和访问的数组,可以精确分配至使用的特定地址。
例子:关联数组只分配0-5、45、1000、4531和200000地址的数值。
关联数组实现了一个所声明类型成员的查找表,用索引的数据类型作为查找表的查找值,并强制其排列顺序。
关联数组的声明语法:
data_type array_id[index_type];
data_type-数组成员的数据类型;
array_id-关联数组的变量名;
index_type-用做索引的数据类型或者是*
例子:
integer array_a [*]; //整型关联数组,未指定索引类型
bit [20:00] array_b [string]; //21比特向量的关联数组,索引为字符串
1.7、队列
队列是一个大小可变,具有相同数据类型成员额有序集合。队列能够在固定时间内访问它的所有元素,也能够在固定时间内对队列的尾部和头部插入和删除成员。队列中的每一个成员都通过一个序号来标识,0代表第一个成员,$代表最后一个成员。队列是一个一维的非压缩数组,它可以自动地增长和缩减。队列适合于实现FIFO和堆栈之类的数据结构。
队列的定义:
data_type queue_name[$];
data_type queue_name[$:maxsize];
例子:
byte q1[$]; //字节队列
string names[$] = ["Moonin"]; //字符串队列
integer q[$] = {3,2,7}; //初始化整型队列
bit q2[$:255]; //最大长度为256的比特队列
1.8、字符串
System Verilog引入一个字符串类型(string),它是一个大小可变、动态分配的字节数组。
字符串类型变量的声明语法
string varialbe_name[=initial_value];
string my_name = "Moonin";
1.8、结构体和联合体
System Verilog提供结构体(struct)和联合体(union),结构体中的成员被连续地存储,联合体的所有成员共享同一片存储空间,联合体中最大成员的空间。
通过packed关键字,构成压缩结构体。压缩结构体的所有成员在存储器中被无缝地压缩在一起,一个压缩体结构可以当做一个整体使用,第一个指定的成员为最高位,后续的成员以降序排列。
例子:结构体实例
typedef struct{
bit [07:00] my_byte;
int my_data;
real p;
}struct_t;
initial begin
struct_t.my_byte = 8'hff;
struct_t = `{ff,10,3.5};
end
自定义联合体实例
typedef union{
int i;
shortreal f;
}num;
自定义压缩结构体
typedef struct packed{
bit [07:00] my_byte;
int my_data;
real p;
}struct_t;
1.9、常量
System Verilog四种常量参数,parameter,localparam,specparam,const。
specparam延时参数只能在延时说明块中出现,只能定义延时参数。
例子:
parameter depth_array = 8;
localparam width = 8;
specparam delay = 10;
const logic flag = 1;
- 上一篇: 上海8家生物医药单位正在招聘中!扫码即可报名
- 下一篇: 「C初级」.整型数值
猜你喜欢
- 2025-04-10 今秋减龄又抢眼的小清新风格(小清新造型)
- 2025-04-10 超模Kasia Struss诠释夸张的性感美妆大片
- 2025-04-10 纪梵希推出全新魔幻天使香水和魔法香氛
- 2025-04-10 夏日脱妆一边去 改变底妆很重要(夏天脱妆)
- 2025-04-10 趣味风格小设计 工业风还能这样玩
- 2025-04-10 CBN丨China's largest air show takes off with star fighter jet model
- 2025-04-10 夏日粉刺怎么消除 好方法大收集(夏季长粉刺的原因)
- 2025-04-10 炎热的夏季 露出你性感肩膀的穿搭
- 2025-04-10 四招轻松应对换季时期的头皮敏感(为什么换季的时候头皮会痒)
- 2025-04-10 固特异概念轮胎展示(固特异轮胎介绍)
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)