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脚本即可
- 能满足需求