工作中有时拿到第三方IP,会有不同的coding style;或者有些新手写的代码/赶工出来的代码,coding style会比较糙。
为了快速统一coding style,我写了脚本来处理。
大致思路如下:
- [pie_flist]读入input目录,遍历input文件夹下全部代码文件,返回名字列表(filelist)和内容(字符串)列表;
单独抛出重名的文件列表,供设计人员手动确认。
- [pie_retab]遍历内容列表,对每个文件做retab操作(用4个空格替换tab,删除行尾空白,删除文件最前面和最后面的空行)。
- [pie_uniform]遍历内容列表,逐行匹配正则表达式,识别下面几种pattern并做对齐处理:
module声明:parameter以及input/output/inout类型;(v2001)
input/output/inout类型;(v1995)
wire/reg类型;
submodule instance声明;
- [pie_stat]统计每个文件并累计所有文件的代码行数/注释行数/注释占比,记录全部文件数,全部有效module数,并写出到csv文件中。
(对于操作1-4,写出文件及filelist存到output/datetime/input/ 目录下面。)
- [pie_lint]提供简陋的自动lint纠正,并保存到output/datetime/input/after_lint/目录下:
对于同一module内重复定义的wire/reg变量,会自动注释掉行号较靠后的重复定义。
如果重复定义的同名变量有着不同的类型或位宽,会单独打印log提示设计人员手动确认。
- [pie_egg]对于一个文件中定义多个module的情况,会自动按module名称把一个文件分成多个文件。输出文件会写到output/datatime/input/egg/目录下面。
TBD:按照hierachy建立写出的目录。
以上1~6条可以通过一个alias命令[piefly]一次完成。其中每一条又可以设置单独的命令去执行。
所有处理后的文件都会写出到新的目录,原始文件不会被改变,这样比较方便设计人员去进行比对,手动确认要修改的地方。
有一些暂时还没想到或者应用不那么频繁的RTL操作需求,打算等以后再来慢慢补充。