脚本推荐-verilog自动对齐
Posted 绿叶落秋风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了脚本推荐-verilog自动对齐相关的知识,希望对你有一定的参考价值。
verilog自动对齐脚本
简介
- vscode中的verilog-utils可以自动例化
- 但是没有保留注释
- 导致注释丢失比较严重
- 这个为后期的维护带来了巨大的工作量
- 基于此,使用TCL脚本完成同样的工作
bat脚本启动
- 文件 verilog_utils_expand.bat
rem get script path
set pns_own=%0
set p_own=%~dp0%
set pns_own_tcl="%p_own%verilog_utils_expand.tcl"
cd %p_own%
rem call tcl
call %SF_P_WISH% %pns_own_tcl%
pause
- 其中SF_P_WISH时tcl wish的安装路径下的exe
TCL/TK脚本例化
# get script own path
variable v_own [file normalize [info script]]
set pns_own [file nativename $v_own]
set p_own [file dirname $pns_own]
set n_own [file tail [file rootname $pns_own]]
set s_own [file extension $pns_own]
# get param
# set pns_param "$p_own/param.ini"
# set f_path [open $pns_param r]
# set v_param [read $f_path]
# close $f_path
set v_param [clipboard get]
puts $v_param
# regsub module
set v_param2 ""
set l_module_name [regexp -all -inline [\\n]*[\\s]*module[\\s]*([\\w]+)[\\s]*\\#[\\s]*\\( $v_param]
if [llength $l_module_name] == 0
puts no parameter like module xx #()
set l_module_name [regexp -all -inline [\\n]*[\\s]*module[\\s]*([\\w]+)[\\s]*\\( $v_param]
if [llength $l_module_name] == 0
puts no parameter like module xx(
else
set m_module [lindex $l_module_name 1]
regsub [\\n]*[\\s]*module[\\s]+ $v_param "" v_param1
regsub [\\s]*\\([\\s]* $v_param1 "u_$m_module\\(\\n " v_param2
else
set m_module [lindex $l_module_name 1]
regsub [\\n]*[\\s]*module[\\s]+ $v_param "" v_param1
regsub [\\n]*[\\s]*\\)\\([\\s]* $v_param1 "\\n\\)u_$m_module\\(\\n " v_param2
# regsub param
regsub -all -line [\\n]*[\\s]*parameter[\\s]* $v_param2 "\\n \\." v_param3
regsub -all -line [\\s]*=[\\s]* $v_param3 "\\(" v_param4
regsub -all -line [\\n]*[\\s]*\\)[\\s]* $v_param4 "\\)\\n)" v_param5
regsub -all -line [\\s]*\\,[ ]*\\/\\/ $v_param5 "\\)\\,\\/\\/" v_param6
regsub -all -line [\\s]*\\,[ ]*\\n $v_param6 "\\)\\,\\n" v_param6
regsub -all -line [\\n]*[\\s]*input[\\s]* $v_param6 "\\n \\.\\(" v_param7
regsub -all -line [\\n]*[\\s]*output[\\s]* $v_param7 "\\n \\.\\(" v_param8
regsub -all -line [\\s]*\\[[\\w\\+\\-\\*\\/]+:[\\w\\+\\-\\*\\/]+\\][\\s]* $v_param8 "" v_param9
regsub -all -line [\\s]*\\[[\\w\\+\\-\\*\\/]+:[\\w\\+\\-\\*\\/]+\\][\\s]* $v_param8 "" v_param9
regsub -all -line [ ]*\\.\\(([\\w]+)[ ]* $v_param9 " \\.\\\\1\\(\\\\1" v_param10
puts $v_param10
# clip clear and write text
eval clipboard clear
clipboard append $v_param10
destroy .
小结
- 可以完成verilog的例化
- 可以保留注释
- 使用时使用vscode调用bat脚本即可
- 能满足需求
RTL顶层自动连线的秘密武器:Emacs verilog-mode介绍(VIM也可以用)
RTL顶层自动连线听说过吗?想学吗?我们今天就来介绍自动连线的神器——emacs verilog-mode。
emacs是什么?
江湖流传版:传说中神的编辑器。
维基百科版:Emacs(Editor MACroS,宏编辑器),最初由Richard Stallman于1975年在MIT协同Guy Lewis Steele Jr.共同完成。
verilog-mode是什么
官网的介绍
Verilog-mode.el is the extremely popular free Verilog mode for Emacs which provides context-sensitive highlighting, auto indenting, and provides macro expansion capabilities to greatly reduce Verilog coding time. It supports AUTOs and indentation in Emacs for traditional Verilog (1394-2005), the Open Verification Methodology (OVM) and SystemVerilog (1800-2005/1800-2009).
Recent versions allow you to insert AUTOS in non-AUTO designs, so IP interconnect can be easily modified. You can also expand SystemVerilog ".*" port instantiations, to see what ports will be connected by the simulators.
简单点说就是支持Verilog、SystemVerilog(包括UVM)的emacs语法高亮文件。其中提到Verilog-mode支持Autos——这就是今天的重点。
Verilog-mode是由Michael McNamara <mac@verilog.com>和Wilson Snyder <wsnyder@wsnyder.org>编写。难能可贵的是,这个verilog-mode保持着每月都有更新。最新版本是verilog-mode-2018-08-21-08b745f-vpo.el.gz,也就是上周二的事。
verilog-mode Autos有哪些功能
我们来一起看一个官网的例子。
手动编写的verilog代码:
由Autos处理后的verilog代码:
大家可以看到,verilog-mode自动分析出:
模块的端口输入和输出
内部变量
敏感信号列表
提取子模块的端口定义
自动提取子模块的端口定义来连线是今天的重点中的重点。一般来讲,我们实例化模块时大部分的信号名与子模块定义的名字一致即可。如上面代码中的:
特殊连接关系的处理
但常常我们顶层连接时会换一个名字。比如module A有一个输出端口dat_o,module B有一个输入端口dat_i,这两者怎么连?定义模版AUTO_TEMPLATE,如下:
手动编写的verilog代码:
由Autos处理后的verilog代码:
在哪里找子模块定义?
默认规则:
当前文件夹下找
当前找不到怎么办,指定搜索路径(与仿真器的-y一样)
使用方法:在顶层endmodule后面指定verilog-library-directories,如下:
除了写模版还需要做什么?
只需要Ctrl-C Ctrl-A,仅此而已。
如果修改了子模块或者模版,再按一次Ctrl-C Ctrl-A。
更多功能
详见官网帮助文档:
https://www.veripool.org/projects/verilog-mode/wiki/Verilog-mode-Help
verilog-mode下载、安装
新版的GNU Emacs自带verilog-mode,如果需要最新的verilog-mode可以在官网下载:
https://www.veripool.org/projects/verilog-mode/wiki/Installing
VIM用户咋办?
可以用VIM调动shell命令执行(emacs批处理模式),例如:
:!emacs --batch <filenames.v> -f verilog-batch-auto
是不是很简单!
欢迎关注ExASIC
分享数字集成电路设计中的经验和方法
分享让工作更轻松
以上是关于脚本推荐-verilog自动对齐的主要内容,如果未能解决你的问题,请参考以下文章