verilog_mode 使用赋值时的自动重新输入行为
verilog_mode autoreginput behavior when using assignment
不知是否有以下情况
我有:
module a(
input [2:0] a_i
);
endmodule
module b ();
/*AUTOREGINPUTS*/
a u_a(/*AUTOINST*/)
endmodule
扩展为:
module b ();
/*AUTOREGINPUTS*/
reg [2:0] a_i;
a u_a(/*AUTOINST*/
.a_i(a_i))
endmodule
但是如果我修改添加行 assign a_i = '0;
,那么它不再扩展 AUTOREGINPUTS
。即使我正在做作业,有没有办法扩展它?
简短的回答是因为当 运行 verilog-auto
填写 /*AUTOREGINPUT*/
时将排除任何已经声明的信号,并且通过添加 assign a_i = '0;
,您声明 a_i
.
在 Verilog 中,不需要显式变量声明,如果在某些情况下未声明,将采用默认网络类型。所以,如果我有以下内容:
module x;
assign myVar = '0;
endmodule
myVar
将被隐式声明为具有默认网络类型(默认为 wire
)的网络。您可以在 System-Verilog LRM(IEEE1800-2009 第 6.10 节)中阅读更多内容。避免拼写错误生成隐式声明变量的一个建议是将带有 `default_nettype
宏的默认网络类型更改为 none
(即每个文件顶部的 `default_nettype none
);这样做会强制显式声明所有变量,否则 compiler/synthesizer 将引发错误。
emacs 中的 verilog-mode
模式知道隐式声明,因此不会自动生成任何已声明的内容。因此,当您添加 assign
语句时,您正在声明 a_i
,因此自动生成器不会 "redefine" a_i
.
为了避免这种情况,我只能在您分配任何要自动生成的变量之前推荐 运行 生成器。我不确定它是否正确处理 `default_nettype none
,但我认为不会。
另外注意,应该是/*AUTOREGINPUT*/
,不是/*AUTOREGINPUTS*/
,最后没有's'。
不知是否有以下情况
我有:
module a(
input [2:0] a_i
);
endmodule
module b ();
/*AUTOREGINPUTS*/
a u_a(/*AUTOINST*/)
endmodule
扩展为:
module b ();
/*AUTOREGINPUTS*/
reg [2:0] a_i;
a u_a(/*AUTOINST*/
.a_i(a_i))
endmodule
但是如果我修改添加行 assign a_i = '0;
,那么它不再扩展 AUTOREGINPUTS
。即使我正在做作业,有没有办法扩展它?
简短的回答是因为当 运行 verilog-auto
填写 /*AUTOREGINPUT*/
时将排除任何已经声明的信号,并且通过添加 assign a_i = '0;
,您声明 a_i
.
在 Verilog 中,不需要显式变量声明,如果在某些情况下未声明,将采用默认网络类型。所以,如果我有以下内容:
module x;
assign myVar = '0;
endmodule
myVar
将被隐式声明为具有默认网络类型(默认为 wire
)的网络。您可以在 System-Verilog LRM(IEEE1800-2009 第 6.10 节)中阅读更多内容。避免拼写错误生成隐式声明变量的一个建议是将带有 `default_nettype
宏的默认网络类型更改为 none
(即每个文件顶部的 `default_nettype none
);这样做会强制显式声明所有变量,否则 compiler/synthesizer 将引发错误。
verilog-mode
模式知道隐式声明,因此不会自动生成任何已声明的内容。因此,当您添加 assign
语句时,您正在声明 a_i
,因此自动生成器不会 "redefine" a_i
.
为了避免这种情况,我只能在您分配任何要自动生成的变量之前推荐 运行 生成器。我不确定它是否正确处理 `default_nettype none
,但我认为不会。
另外注意,应该是/*AUTOREGINPUT*/
,不是/*AUTOREGINPUTS*/
,最后没有's'。