博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Emacs Verilog mode 简单使用指南
阅读量:4189 次
发布时间:2019-05-26

本文共 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;
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
);

你可能感兴趣的文章
ACM UVa算法题209 Triangular Vertices的解法
查看>>
另一道看上去很吓人的面试题:如何交换a和b两个整数的值,不用额外空间 (Rev. 2)
查看>>
一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
查看>>
今天David Solomon的为期三天的Windows Internal培训刚结束
查看>>
转贴:Mark Russinovich的Inside Vista Kernel系列文章,讲到了Vista内核的调度,IO,内存管理,缓存,事务处理,安全等众多新特性
查看>>
转载:如何指定程序在Vista上面需要提升权限运行(Elevated)
查看>>
如何知道可执行文件是32-bit还是64-bit
查看>>
.NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
查看>>
Microsoft Silverlight正式发布
查看>>
国际化编程中Locale相关概念的一些解释
查看>>
PIA (Primary Interop Assembly) & AIA (Alternate Interop Assembly)简介
查看>>
“妖精”团队———阿里巴巴
查看>>
迟到的感谢——2006最有价值博客的候选人(& 个人回顾)
查看>>
第29回 软件质量度量
查看>>
IT 2007预言
查看>>
怎样让.Net2.0的Membership使用已存在的Sql Server2000/2005数据库
查看>>
ASP.NET2.0 文本编辑器FCKeditor使用方法详解
查看>>
常见的 Web 项目转换问题及解决方案
查看>>
VS2005中使用ClickOnce 部署应用程序的升级
查看>>
Visual Studio2005下配置及运行NUnit
查看>>