verilog隐含wire声明

文章讨论了Verilog中未定义变量默认为wire类型的现象,指出这种隐含声明可能导致的位宽不匹配错误。为避免这类问题,建议使用`default_nettypenone`来让未定义变量报错,并提供了限制该定义在模块内的方法,以提高代码的健壮性。
摘要由CSDN通过智能技术生成

 隐含wire声明就是未定义的变量会被默认为wire类型的变量,而非直接报错,如下:

简单来说,对于两个模块的连接来讲,你可以直接使用一个wire变量来连接,而无需定义,但应当保证这种隐含的定义是你需要的,而非打错信号名,导致错误连接。

但应当注意,并非所有的隐形连接都是正确的,这可能导致不可控的错误,如:

 

由上图可见,隐形变量在没有位宽定义时都是1bit,在连接多bit端口时,隐形未定义的连接会出现位宽不匹配(即使编译器知道你本来是要连接多bit端口),那么如何解决这个问题呢?

但是很多时候我们都是不小心直接使用了未定义的变量,如何保证未定义的变量能被直接检查出来?

为了让隐性变量报错,可以使用:`default_nettype none,出现此定义的地方将不再自动产生 wire 型变量。 

 由于define的有效范围是所有模块,所以对于团队中的代码,最好限制此定义只在自己的模块中有效,那么可以按照如下定义,防止此定义变成全局定义。

`default_nettype wire   //模块头
……

`default_nettype wire  //模块尾

参考:

《101 条 Verilog 和 SystemVerilog 设计陷阱》

《菜鸟教程》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值