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. csplit命令

    csplit命令 csplit命令将用PATTERN分隔的FILE文件输出到文件xx00.xx01....,并将每个文件的字节数输出到标准输出. 语法 csplit [OPTION]... FILE ...

  2. Xposed 原理

    Xposed 使用替换app_process的方式(这是个二进制文件) xposed 的 app_main2.cpp中做了xposed的初始化 /** Initialize Xposed (unles ...

  3. OFDM系统各种调制阶数的QAM误码率(Symbol Error Rate)与 误比特率(Bit Error Rate)仿真结果

    本文是OFDM系统的不同QAM调制阶数的误码率与误比特率仿真,仅考虑在高斯白噪声信道下的情景,着重分析不同信噪比下的误码(符号)率性能曲线,不关心具体的调制与解调方案,仿真结果与理论的误码率曲线进行了 ...

  4. vm添加新硬盘时,不用重启即可让新硬盘生效

    # 两个命令使用其中一个即可 echo '- - -' > /sys/class/scsi_host/host0/scan echo '- - -' > /sys/class/scsi_h ...

  5. 重点:递归函数,数学模块,随机模块---day14

    1.递归函数 自己调用自己的函数是递归函数 递:去 归:回 一去一回叫作递归 简单递归 def digui(n): print(n,'<==1==>') if n > 0: digu ...

  6. signature hdr data: BAD, no. of btyes(9088) out of range 问题排查与解决方案

    在使用yum工具安装gcc的时候,报出了signature hdr data: BAD, no. of btyes(9088) out of range 的问题 这是由于centos8中rpm工具存在 ...

  7. 【Azure 存储服务】Storage Account Blob 使用REST API如何获取磁盘大小(Content-Length), IOPS信息

    问题描述 1)关于使用Rest API获取非托管磁盘信息比如获取磁盘大小 2)关于使用Rest API获取非托管磁盘信息比如iops 问题答案 #1:关于使用Rest API获取非托管磁盘信息比如获取 ...

  8. 【XInput】手柄模拟鼠标运作之 .NET P/Invoke 和 UWP-API 方案

    上一篇中,老周简单肤浅地介绍了 XInput API 的使用,并模拟了鼠标移动,左.右键单击和滚轮.本篇,咱们用 .NET 代码来完成相同的效果. 说起来也是倒霉,博文写了一半,电脑忽然断电了.不知道 ...

  9. C++ STL 容器-Deque

    C++ STL 容器-Deque std::deque(双端队列)是C++标准模板库(STL)中的一个容器,它支持在序列的两端快速插入和删除元素.与std::vector和std::list等其他序列 ...

  10. .NET周刊【3月第1期 2024-03-03】

    国内文章 推荐10款C#开源好用的Windows软件 https://www.cnblogs.com/Can-daydayup/p/18035760 DevToys.Microsoft PowerTo ...