隐含wire声明就是未定义的变量会被默认为wire类型的变量,而非直接报错,如下:
简单来说,对于两个模块的连接来讲,你可以直接使用一个wire变量来连接,而无需定义,但应当保证这种隐含的定义是你需要的,而非打错信号名,导致错误连接。
但应当注意,并非所有的隐形连接都是正确的,这可能导致不可控的错误,如:
由上图可见,隐形变量在没有位宽定义时都是1bit,在连接多bit端口时,隐形未定义的连接会出现位宽不匹配(即使编译器知道你本来是要连接多bit端口),那么如何解决这个问题呢?
但是很多时候我们都是不小心直接使用了未定义的变量,如何保证未定义的变量能被直接检查出来?
为了让隐性变量报错,可以使用:`default_nettype none,出现此定义的地方将不再自动产生 wire 型变量。
由于define的有效范围是所有模块,所以对于团队中的代码,最好限制此定义只在自己的模块中有效,那么可以按照如下定义,防止此定义变成全局定义。
`default_nettype wire //模块头
……
`default_nettype wire //模块尾
参考:
《101 条 Verilog 和 SystemVerilog 设计陷阱》
《菜鸟教程》