verilog文件到tb的简单vim脚本

逐条指令如下
/\vinput\s+(\[(\d+):0\])?\s*(\w*)(,|;)? #匹配所有input
:g//y|$pu|s//reg \1 \3; #reg声明
:g//y|$pu|s//assign \3 = \2'd0; #initial赋0
:g//y|$pu|s// .(\3)(\3\1), #例化input
/\voutput\s+(reg\s+)?(\[(\d+):0\])?\s*(\w*)(,|;)? #匹配所有output
:g//y|$pu|s//reg \2 \4; #wire声明
:g//y|$pu|s// .(\4)(\4\2), #例化output
用批处理方式
test.vim

g/\vinput\s+(\[(\d+):0\])?\s*(\w*)(,|;)?/y|$pu|s/\vinput\s+(\[(\d+):0\])?\s*(\w*)(,|;)?/reg \1 \3;
g/\vinput\s+(\[(\d+):0\])?\s*(\w*)(,|;)?/y|$pu|s/\vinput\s+(\[(\d+):0\])?\s*(\w*)(,|;)?/assign \3 = \2'd0;;
g/\vinput\s+(\[(\d+):0\])?\s*(\w*)(,|;)?/y|$pu|s/\vinput\s+(\[(\d+):0\])?\s*(\w*)(,|;)?/  .(\3)(\3\1);
g/\voutput\s+(reg\s+)?(\[(\d+):0\])?\s*(\w*)(,|;)?/y|$pu|s/\voutput\s+(reg\s+)?(\[(\d+):0\])?\s*(\w*)(,|;)?/reg \2 \4;
g/\voutput\s+(reg\s+)?(\[(\d+):0\])?\s*(\w*)(,|;)?/y|$pu|s/\voutput\s+(reg\s+)?(\[(\d+):0\])?\s*(\w*)(,|;)?/  .(\4)(\4\2),

使用时在v文件中source test.vim 即可。
注:1.vim的正则表达式好像没有(?:)非捕获组
2.没找到怎么在批处理方式中加入搜索指令,否则搜索一次,下面直接省略,文件会简单点

posted @ 2024-11-21 17:05  心比天高xzh  阅读(2)  评论(0编辑  收藏  举报