SystemVerilog的数组和结构体(五)

本文详细介绍了Verilog中的结构体与数组概念,包括结构体的声明与使用、数组的索引与初始化方法,以及结构体与数组之间的赋值规则。此外,还对比了结构体与联合体的区别。
  1. 结构体不同于数组,数组是同类型同尺寸的元素集合,而结构体是不同类型和尺寸的变量和常量的集合。数组元素是通过索引引用,而结构体成员通过成员名称引用。

  2. 结构体内部只能是变量,而不能是线网。可以将结构体整体声明为变量或线网,如果未指定,整个结构体将默认为是一个变量。

// 将结构体整体声明为一个变量
var struct {
   
   
	logic	[31:0] a,b;
	...
} instruction_t;
// 将结构体整体声明为一个线网
wire struct {
   
   
	logic	[31:0] a,b;
	...
} instruction_t;
// 未指定默认为变量
struct {
   
   
	logic	[31:0] a,b;
	...
} instruction_t;
  1. 结构体在实例化的时候可以对其成员初始化。使用`{}的方式赋值,大括号里的值的个数必须与成员的个数一致。
typedef struct {
   
   
	logic	[31:0] a,b;
	logic	[7:0] 	opcode;
	logic	[23:0] address;
} instruction_t;
// 在定义结构体变量的时候,赋初始值的个数要一致
instruction_t IW = `{
   
   100,3,8'hFF,0};
// 整个结构体可以使用结构体表达式进行赋值,跟赋初始值是一样的
instruction_t IW;
IW = `{
   
   100,3,8'hFF,0};
// 也可以对单个成员赋值
IW.a = 100;
// 结构体表达式也可以指定被赋值的结构体成员名称,使用冒号隔开成员名称和要赋值的值
IW = `{
   
   a:100, b:3, opcode:8'hFF, address:0};
// 在同一个结构体表达式中混合使用成员名称和成员顺序是不合法的
IW = `{
   
   a:100, b:3, 8'hFF, 0};	// 这种是错误的写法
  1. 结构体的优先级:可以给所有成员指定为默认值,也可以使用数据类型的关键字给结构体中特定的数据类型指定默认值。成员赋值还有个优先级的问题,default关键字具有最低的优先级,指定数据类型的默认值又会被任意显性使用成员名称的赋值覆盖。
// 所有成员赋默认值
IW = `{
   
   default:0};
// 使用数据类型关键字赋默认值
typedef struct {
   
   
	real r0,r1;
	int	i0,i1;
} instruct_t;
instruct_t IW = `{
   
   real:1.0, default
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值