Emacs 使用赋值时verilog_模式自动注册输入行为

Emacs 使用赋值时verilog_模式自动注册输入行为,emacs,verilog,system-verilog,Emacs,Verilog,System Verilog,我想知道以下情况是否可能。 我有: 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 但是如果我修改添加行则分配一个_I='0,

我想知道以下情况是否可能。
我有:

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

但是如果我修改添加行
则分配一个_I='0,则它不再展开
自动注册输出。即使我在做作业,也有办法扩展它吗?

简短的回答是,当运行
verilog auto
来填充
/*AUTOREGINPUT*/
时,将排除任何已经声明的信号,并通过添加
分配一个I='0,您正在声明
a_i

在Verilog中,不需要显式变量声明,如果在某些情况下未声明,则将采用默认的nettype。因此,如果我有以下几点:

module x;
  assign myVar = '0;
endmodule
myVar
将被隐式声明为具有默认nettype的网络(默认情况下为
wire
)。您可以在系统Verilog LRM(IEEE1800-2009第6.10节)中阅读更多内容。避免键入生成隐式声明变量的一个建议是,使用
`default\u nettype
宏将默认nettype更改为
none
(即每个文件顶部的
`default\u nettype none
);这样做会强制显式声明所有变量,否则编译器/合成器将抛出错误

emacs中的
verilog模式
模式知道隐式声明,因此不会自动生成任何声明。因此,当您添加
assign
语句时,您正在声明
a_i
,因此自动生成器不会“重新定义”
a_i

为了避免这种情况,我只能建议在分配任何要自动生成的变量之前运行生成器。我不确定它是否正确处理了
`default\u nettype none
,但我认为不会


还要注意的是,它应该是
/*自动注册*/
,而不是
/*自动注册*/
,最后是“否”。

感谢您的澄清。然后我将按照您所说的做,删除赋值,展开autos并复制声明的逻辑