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%
rem pause
  • 其中SF_P_WISH时tcl wish的安装路径下的exe

    TCL/TK下载

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]*[ ]*module[ ]+} $v_param "" v_param1
regsub {[\n]*[ ]*\)[\s]*\([ ]*} $v_param1 "\n\)u_$m_module\( " v_param2 }
# regsub param
regsub -all -line {[ ]*parameter[ ]*([\w]+)[ ]*\=[ ]*[\w\']+[ ]*\,} $v_param2 " \.\\1\(\\1\)," v_param2
regsub -all -line {[ ]*parameter[ ]*([\w]+)[ ]*\=[ ]*[\w\']+[ ]*} $v_param2 " \.\\1\(\\1\)" v_param2
regsub -all -line {[ ]*\[[\w\+\-\*\/]+:[\w\+\-\*\/]+\][ ]*} $v_param2 " " v_param3
regsub -all -line {[ ]*input[ ]*([\w]+)[ ]*} $v_param3 " \.\\1\(\\1\)" v_param3
regsub -all -line {[ ]*output[ ]*([\w]+)[ ]*} $v_param3 " \.\\1\(\\1\)" v_param3
regsub -all -line {[ ]*inout[ ]*([\w]+)[ ]*} $v_param3 " \.\\1\(\\1\)" v_param3 puts $v_param3
# clip clear and write text
eval clipboard clear
clipboard append $v_param3 # destroy win
set i_id [after 10 {destroy .}]

vscode联动

  • 添加快捷键(注意快捷键不要冲突)

    {
"key": "alt+m",
"command": "workbench.action.tasks.runTask",
"args": "verilog_utils"
},
  • 添加任务(注意路径)
"tasks": [
{
"label": "verilog_utils",
"type": "shell",
"command": "D:/f1_library2/b0_script_app/c2_vscode_plug/verilog_utils_expand.bat",
"args": [],
"presentation": {
"echo": false,
"reveal": "never",
"focus": false,
"panel": "shared",
"showReuseMessage": false,
"clear": false
},
"problemMatcher": []
}
]
  • 检查效果

    • ctrl + C 复制module
    • alt + m 转化为例化端口
    • ctrl + v 粘贴到制定的位置
    • 理论上后两步可以合并,但是没有找到方法

小结

  • 可以完成verilog的例化

  • 可以保留注释

  • 使用时使用vscode调用bat脚本即可

  • 能满足需求

  • 缺陷:会把注释的端口释放,暂未找到解决方法

脚本推荐-verilog自动对齐的更多相关文章

  1. Tampermonkey脚本安装问题及自用脚本推荐

    对于高手来说,chrome浏览器中即使没有其他任何chrome插件,可能都无关紧要.但是有一个插件必不可少, 那就是Tampermonkey油猴插件.Tampermonkey是Chrome上最流行的用 ...

  2. TamperMonkey 使用指南以及脚本推荐

    写在前面 Chrome浏览器是最适合开发者使用的浏览器,不仅仅是因为Chrome对于Js的友好支持,更是由于Chrome支持丰富且功能强大的插件,扩展了浏览器的功能和使用体验. 在这些插件里面,相信你 ...

  3. 一些Nmap NSE脚本推荐

    前言 Nmap是一款强大的开源扫描工具.同时Nmap提供了强大的脚本引擎(Nmap Scripting Engine),支持通过Lua脚本语言来扩展Nmap的功能,在Nmap的发行版中已经包含了数百个 ...

  4. Window环境下,PHP调用Python脚本

    参考 php调用python脚本*** php 调用 python脚本的方法 解决办法:php提供了许多调用其他脚本或程序的方法,比如exec/system/popen/proc_open/passt ...

  5. java性能问题排查提效脚本工具

    在性能测试过程中,往往会出现各种各样的性能瓶颈.其中java常见瓶颈故障模型有cpu资源瓶颈:文件IO瓶颈:网络IO瓶颈:内存资源瓶颈:资源消耗不高程序本身执行慢等场景模型. 如何快速定位分析这些类型 ...

  6. RHCE脚本题目详解

    目录 RHCE脚本题目详解 题目一 shell脚本之if语句实现: shell脚本之case语句实现: 题目二 实现 测试 解析 写在后面 RHCE脚本题目详解 题目一 在system1上创建一个名为 ...

  7. gimp脚本.scm一些心得记录

    gimp的脚本scm一些心得记录 GIMP 2.10 图像处理脚本推荐GIMP使用脚本使得图像处理的功能更加强大,对于一些常见操作可以通过脚本快速实现.GIMP也出来2.10版本了,比前面的2.8相比 ...

  8. 使用PowerShell收集多台服务器的性能计数器

    写在前面     当管理多台Windows Server服务器时(无论是DB.AD.WEB以及其他的应用服务器),当出现性能或其他问题后,参阅性能计数器都是一个非常好的维度从而推测出问题可能出现的原因 ...

  9. Redis的三种启动方式

    转载:http://www.tuicool.com/articles/aQbQ3u Part I. 直接启动 下载 官网下载 安装 tar zxvf redis-2.8.9.tar.gz cd red ...

  10. windows系统快捷操作の高级篇

    上次介绍了windows系统上几个比较好用的软件和系统快捷键,虽然有些很方便,但是毕竟还是太少了,而且无法自定义专属于自己的快捷键.所以我写了这么一篇教程,主要介绍两个神器:windows平台上的au ...

随机推荐

  1. springboot 实现拦截的 3 种方式介绍及异步执行的思考

    springboot 拦截方式 实际项目中,我们经常需要输出请求参数,响应结果,方法耗时,统一的权限校验等. 本文首先为大家介绍 HTTP 请求中三种常见的拦截实现,并且比较一下其中的差异. (1)基 ...

  2. 【分布式】load balance 02-consistent hash algorithm 一致性哈希算法原理详解

    负载均衡系列专题 01-负载均衡基础知识 02-一致性 hash 原理 03-一致性哈希算法 java 实现 04-负载均衡算法 java 实现 概念 一致哈希是一种特殊的哈希算法. 在使用一致哈希算 ...

  3. 用ELK分析每天4亿多条腾讯云MySQL审计日志(3)--下载日志

    当初分析日志,麻烦的是腾讯云的SQL审计日志下载,有下列限制: 1,单次最多1000万条下载 2,单个实例最多生成5条日志文件,多的要先删除以前文件才能生成   腾讯云日志文件生成界面:      一 ...

  4. golang 打隧道和端口转发

    `package main import ( "golang.org/x/crypto/ssh" "io" "log" "net& ...

  5. win32- 使用WM_NCPAINT在非客户区域绘制边框

    #pragma comment(lib, "UxTheme") #include <windows.h> #include <uxtheme.h> LRES ...

  6. os.path.relpath和os.path.basename,返回文件路径中的文件名

    from os import path print(path.relpath("/home/hpcadmin/lw/demo.py", start="/home/hpca ...

  7. django中model聚合使用

    from django.db.models.functions import Cast, Coalesce, Concat, ConcatPair, Greatest # Cast,类型转换 q1 = ...

  8. python模块imghdr-----推测图像类型

    官方文档 https://docs.python.org/zh-cn/3/library/imghdr.html#module-imghdr 用处 模块推测文件或字节流中的图像的类型 imghdr.w ...

  9. macOS安装RZ,SZ

    使用brew 安装lrzsz sudo brew install lrzsz 安装完成后检查是否存在. ls -alh /usr/local/bin/sz 如果安装报错可以手动下载压缩包安装,安装地址 ...

  10. 【应用服务 App Service】App Service For Windows 如何挂载Storage Account File Share 示例

    问题描述 很早之前,介绍了在 App Service for Linux中挂载 Storage Account共享文件,当时Windows无法实现这个功能.而现在,App Service For Wi ...