本文共 2145 字,大约阅读时间需要 7 分钟。
可实现自动生成instance,wire,parameter等,方便设计的上层模块连接设计,免去手打代码的重复工作。
(参考博客 https://blog.csdn.net/tbzj_2000/article/details/81702009 安装后,给gvim也添加了verilog mode,即用emacs和gvim都可编辑verilog,并使用verilog mode下的各种功能)
/*AUTOARG*/、/*AUTOWIRE*/、/*AUTOSENSE*/、/*AUTOINST*/、/*AUTO_TEMPLATE*/、/*AUTOINSTPARAM*/使用说明
1)自动生成组合逻辑敏感列表 /*AUTOSENSE*/
always @ (/*AUTOSENSE*/) begin
outin = ina | inb; out = outin; endEmacs编辑器: 快捷键C-c a,自动加入敏感表信号.
gvim编辑器:参考https://blog.csdn.net/tbzj_2000/article/details/88024225,直接输入ta快捷命令或在emacs菜单栏点击verilog-batch-auto命令。 结果如下: always @ (/*AUTOSENSE*/ina or inb) begin outin = ina | inb; out = outin; end2)自动生成module的端口 /*AUTOARG*/
module ex_arg (/*AUTOARG*/);
input i; output o; end自动生成:
module module ex_arg (/*AUTOARG*/ // Outputs o, // Inputs i);input i;
output o; endmodule3)自动补全例化(instance)的端口映射 /*AUTOINST*/
module fanout (o,i)
input i; output [31:0] o; wire [31:0] o = {32{i}}; endmodulemodule ex_inst (o,i)
input i; output [31:0] o; fanout fanout (/*AUTOINST*/); endmodule自动生成:
module fanout (o,i) input i; output [31:0] o; wire [31:0] o = {32{i}}; endmodulemodule ex_inst (o,i)
output o; input i; fanout fanout (/*AUTOINST*/ // Outputs .o (o[31:0]), // Inputs .i (i)); endmodule4)模板 /*AUTO_TEMPLATE*/,注意下面的@,和例化的序号(如下面的ms2中的2)是一致的
/* psm_mas AUTO_TEMPLATE (
.PTL_MAPVALIDX (PTL_MAPVALID[@]), .PTL_BUS (PTL_BUSNEW[] ), ); */psm_mas ms2 (/*AUTOINST*/);
自动生成:
/* psm_mas AUTO_TEMPLATE (
.PTL_MAPVALIDX (PTL_MAPVALID[@]), .PTL_BUS (PTL_BUSNEW[] ), ); */psm_mas ms2 (/*AUTOINST*/
// Outputs .INSTDATAOUT (INSTDATAOUT), .PTL_MAPVALIDX (PTL_MAPVALID[2]), // Templated .PTL_BUS (PTL_BUSNEW[3:0]), // Templated5)当instance的信号名和所要连接的信号名不一致时,可使用/*AUTO_TEMPLATE*/结合正则表达式来修改连接.
以下的例子还说明了autowire的使用。 /*AUTOWIRE*/ //使用了正则表达式。 /* soc_top AUTO_TEMPLATE ( .\(wdt_.*\)\(1\) (cpu_\1[]) ); */soc_top u_ISP_CFG(
/*AUTOINST*/ );自动连接生成的代码:
/*AUTOWIRE*/ // Beginning of automatic wires wire [7:0] wdt_int2; //From u_INST of INST.v // End of automatics//使用了正则表达式。
/* soc_top AUTO_TEMPLATE ( .\(wdt_.*\)\(1\) (cpu_\1[]) ); */soc_top u_ISP_CFG(
/*AUTOINST*/ //outputs .wdt_int1 (cpu_wdt_int[7:0]), //Templated .wdt_int2 (wdt_int2 ) //Templated );