帮助文档
https://www.veripool.org/projects/verilog-mode/wiki/Verilog-mode-Help
初级使用教程
GVIM中使用verilog-mode时,GVIM中有个plug-in,里面有一个自动生成的按钮,还有一个删除自动生成的按钮。
再按下自动生成的按钮之前,先来看看需要在RTL中加入什么。
module test(/*AUTOARG*/);
/*AUTOINPUT*/
/*AUTOOUTPUT*/
/*AUTOWIRE*/
/*AUTOREG*/
INST inst(/*AUOINST*/);
endmodule
// Local Variables:
// verilog-library-directories:("." "子目录" )
// End:
module INST(/*AUTOARG*/);
input a;
output b;
endmodule
有了上述代码,先在INST中按下自动生成按钮,将生成
module INST(/*AUTOARG*/
// Outputs
b,
// Inputs
a);
input a;
output b;
endmodule
再按下test的自动生成按钮,将生成如下代码:
module test(/*AUTOARG*/
b,
a);
/*AUTOINPUT*/
input a;
/*AUTOOUTPUT*/
output b;
/*AUTOWIRE*/
/*AUTOREG*/
INST inst(/*AUOINST*/
.b(b),
.a(a));
endmodule
// Local Variables:
// verilog-library-directories:("." "子目录" )
// End:
从上可以看出,verilog-mode的作用就是在需要自动生成例化信号的地方写/AUTOINST/,需要自动生成输入信号则写/AUTOINPUT/。还有很多功能,可以参考上面的博文。例如需要按要求生成例化模块时,可以编写AUTO_TMEPLATE,编写时注意,不管信号是否位于信号的末尾,都需要加上,(逗号)。AUTO_TMEPLATE还可以通过@来根据模块例化的次数来给信号不同的命名,以及通过字符匹配搭配@来根据模块给不同的信号命名。还可以给不同例化模块的相同端口输入相同信号的不同位段(待学习,详见参考博文2)。使用[]可以自动给例化信号带上位宽。
注意事项
1、一般input信号与output信号自己写,reg与wire信号自动生成就好。如果顶层没有任何逻辑处理的话,只需要将各个例化模块与顶层外部的连接信号列出(input与output),其他子模块之间的交互信号需要的就在template中写好,那么/AUTOINPUT/与/AUTOOUTPUT/将不会生成任何信号,剩余的交互信号将生成在/AUTOWIRE/中。
2、所有子模块的输出如果不是其他子模块的输入,那么将自动生成在/AUTOOUTPUT/下。如果该子模块的输出信号是其他子模块的输入信号,且没有被定义为output,那么将生成在/AUTOWIRE/下。如果该子模块的输出信号是其他子模块的输入信号,且被定义为output,那么将不会再在/AUTOWIRE/下生成wire类型的信号,因为verilog中input与output端口在声明时都默认为wire类型,不用额外定义。
3、/AUTOWIRE/下生成wire一定是那些未被定义为output,且作为其他子模块输入的信号。
4、/AUTOREG/生成的reg是未被声明的输出。例如:.xxA(xxB)中xxA是insta的输出,但在顶层中被定义为xxB,那么output xxA(自己写的)就是一个未被声明的输出,如果output xxA没被删除,那么将生成一个xxA的reg信号,放在/AUTOREG/下。因此,一般/AUTOREG/下面应该没有任何信号。