可实现自动生成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;
end
Emacs编辑器: 快捷键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;
end
2)自动生成module的端口 /*AUTOARG*/
module ex_arg (/*AUTOARG*/);
input i;
output o;
end
自动生成:
module module ex_arg (/*AUTOARG*/
// Outputs
o,
// Inputs
i);
input i;
output o;
endmodule
3)自动补全例化(instance)的端口映射 /*AUTOINST*/
module fanout (o,i)
input i;
output [31:0] o;
wire [31:0] o = {32{i}};
endmodule
module 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}};
endmodule
module ex_inst (o,i)
output o;
input i;
fanout fanout (/*AUTOINST*/
// Outputs
.o (o[31:0]),
// Inputs
.i (i));
endmodule
4)模板 /*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]), // Templated
5)当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
);
可实现自动生成instance,wire,parameter等,方便设计的上层模块连接设计,免去手打代码的重复工作。(参考博客 https://blog.csdn.net/tbzj_2000/article/details/81702009 安装后,给gvim也添加了verilog mode,即用emacs和gvim都可编辑verilog,并使用verilog mode下的各种功能)/*...
介绍
verilog
-
mode
的一个ppt:http://www.veripool.org/papers/
verilog
-
mode
_veritedium_20090925.pdf。它的官方网站:http://www.veripool.org/wiki/
verilog
-
mode
(应该是吧,没仔细考证)
电脑跑仿真,还得挺长时间的,顺便把用
emacs
写
verilog
的方便之处大概总结一下吧,我只能...
方法1。给
emacs
工具安装evil
mode
,使得在
emacs
的文件编辑方式和gvim基本一致。但仍然没有直接调用gvim方便。
emacs
evil
mode
和
verilog
mode
的安装方法参见:
https://blog.csdn.net/tbzj_2000/article/details/81702009
方法2。在gvim中调用
emacs
的
verilog
...
AUTOINST和AUTOWIRE的应用
背景介绍
emacs
默认自带
verilog
-
mode
插件,不仅仅支持语法高亮、代码段自动补全等功能,核心应用还有/*AUTOXXX*/。
IC顶层集成,最常见的工作就是实例化和端口线网的连接。可以利用/*AUTOINST*/和/*AUTOWIRE*/节省很多工作量,减少出错可能性。AUTOINST和AUTOWIRE的应用下面是示例。用到的技巧包括:
1.写
verilog
代码时经常会遇到自动更新的问题,以前都是用
emacs
打开文档,再ctrl-a + ctrl-x
2.但是很多时候初始状态的代码,要经常进行更新,如果能写成脚本更新的话会方便不少。
emacs
脚本主要使用的两项:
1.
emacs
--batch <filenames.v> -f
verilog
-batch-indent :功能,对齐
2.
emacs
--ba...