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.没找到怎么在批处理方式中加入搜索指令,否则搜索一次,下面直接省略,文件会简单点