总结
1.之前用emacs的autoreg和autowire,以及后来使用的gvim 插件autodef,都没有找到合适对齐module input和output的方法,索性就自己写了个perl脚本来对齐。
2.使用对齐后代码确实美观了不少。
3.脚本使用:可以对当前目录下的.v文件统一进行对齐。脚本名字是run_indent.pl
4.其实不管是自动生成还是自动对齐,可以自己写一套适合自己风格的脚本来实现(待做)
使用效果如下:
#! /usr/bin/perl
use 5.010;
use strict;
my ($sec,$min,$hour,$day,$mon,$year,$weekday,$yeardate,$savinglightday) = (localtime(time));
$sec = ($sec < 10)? "0$sec":$sec;
$min = ($min < 10)? "0$min":$min;
$hour = ($hour < 10)? "0$hour":$hour;
$day = ($day < 10)? "0$day":$day;
$mon = ($mon < 9)? "0".($mon+1):($mon+1);
$year += 1900;
my $date = "${mon}${day}";
my $dir = '*.v';
my @all_files = glob($dir);
foreach my $file_name (@all_files){
open my $file_text,'<',"$file_name";
my $file_name_store = $file_name;
open my $new_file,'>',"new_file.v";
while(<$file_text>){
chomp;
if (/^\s*(input)\s*(\w*\s*;)/){
printf $new_file "%s %-70s\n",$1,$2;
}
elsif (/^\s*(input)\s*(\[.*\])\s*(\w*\s*;)/){
printf $new_file "%s %-20s %-50s\n",$1,$2,$3;
}
elsif (/^\s*(output)\s*(\w*\s*;)/){
printf $new_file "%s %-70s\n",$1,$2;
}
elsif (/^\s*(output)\s*(\[.*\])\s*(\w*\s*;)/){
printf $new_file "%s %-20s %-50s\n",$1,$2,$3;
}
else {
print $new_file "$_\n";
}
}
close $file_text;
close $new_file;
system("cp new_file.v $file_name_store");
}
system("rm new_file.v");