Verilog-Implicit Nets、Pack和Unpack

本文详细解读了Verilog中隐式网络(ImplicitNets)的概念,如何在未声明的模块中自动创建,以及在过程赋值和连续赋值中的应用。同时介绍了Pack和Unpack在向量声明中的作用,通过实例展示了压缩和解压缩技术在内存数组中的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在HDLBits学习中,了解到隐式网、压缩和解压缩的概念,下面对它进行详细的讨论:
一、Implicit Nets

在Verilog当中,如果在一个assign语句或者一个未被声明的模块当中出现/引用未声明的向量,Implicit nets 就会被隐性地生成在模块当中。Implicit nets一般都是一位wire变量,如果作为向量使用,很可能会报错。
用指令default_nettype none可以禁止Implicit nets 的生成。

wire [2:0] a,c; //a和c是3位长的向量
assign a = 3'b101; // a == 101
assign b = a; // b == 1
assign c = b; // c == 001
my_module i1 (d,e); // d和e没有声明直接被my_module拿去用了
//这时候它们就成了implicit net,是一位宽的wire变量

针对未声明标识符在具体设计中出现的具体位置,进行以下几个方面仿真验证:
1.在过程性赋值语句中,未声明的标识符出现在表达式左侧或右侧:

reg proce_var;
initial begin 
	proce_var = net_var;
end

编译结果:
在这里插入图片描述
2.在连续赋值语句中,未声明标识符出现在表达式右侧

wire cont_var;
assign cont_var = net_var;

编译结果:
在这里插入图片描述
3.连续赋值语句中,未声明标识符出现在表达式左侧

wire cont_var;
assign net_var = cont_var;

编译过程未给出任何违例信息,但会导致逻辑功能的异常

二、Pack和Unpack

在声明中,向量的指针写在向量名字的前面。这声明了数组的“压缩”维度,这些位宽被压缩为一团(只和仿真有关,和硬件没有关系),解压缩维度声明在向量名字的后面。以上通常用来声明内存数组.

reg [7:0] mem [255:0];//256个解压缩元素,其中每个都是8位reg类型向量
reg mem2 [28:0];//29个解压缩元素,其中每个都是1位reg类型向量

总结:
参考:https://blog.csdn.net/coachip/article/details/114697785

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值