`default_nettype是用于指定未声明线网的类型,即若代码中有变量未定义类型,则可通过`default_nettype 类型,将未定义的变量默认定义为`default_nettype 类型 中的类型。其中,类型可以是none、wire、reg、tri等。如:
`default_nettype wire //其实这里相当于一句废话,因为未被定义的变量默认是wire型的
module abc(……);
……
//wire enable; //将enable的定义注释掉
a u_a(
……
.enable(enable), //若前面没有定义enable类型,则enable为wire类型
……
);
运行这段代码,将不会报错。
但是当类型为none时,所有的线网都要清晰的声明类型,否则会报错。如:
`default_nettype wire //其实这里相当于一句废话,因为未被定义的变量默认是wire型的
`default_nettype none //这句代码将把上一句的定义给覆盖
module abc(……);
……
//wire enable; //将enable的定义注释掉
a u_a(
……
.enable(enable), //前面没有定义enable类型,则运行会报错
……
);
那`default_nettype none这条语句的作用是什么呢?
若不加`default_nettype none这条语句,运行下面代码并不会报错,只会出现一个warning,虽然没有声明bl(这里是字母b和字母l),但是会默认为wire型,并不能检查出我们的笔误。但是如果加上这条语句,这里则会报错,进而让我们查找出笔误的地方。
module abc(……);
input a1,a2;
output b1;
assign bl = a1&a2; //注意,这里是字母b和字母l,不是字母b和数字1
endmodule