目录
引言
工作中经常需要开发很多自动化的脚本或者小工具来提升开发效率。在没有读《Cad Frameworks: Principles And Architecture》之前,这些脚本或者工具的开发,只是按照功能需求,用各种function和变量、类堆砌而成。但是随着脚本代码规模的增加,脚本就像一个打满补丁的轮胎,每迭代一次,都很恼火。
最近刚好完成一个公司内部的自动连线工具,在开发前按照书中的结构划分,照猫画虎做了类似的分层设计。目前迭代很多版,修改起来比以前轻松很多。回看书中的framework,有多了一些认知,对这本1994年初版的书心中默默点了个赞。
此外,还要感谢pyverilog的作者,从他的代码中借鉴了部分数据结构。
代码解析
代码解析直接使用开源的解析工具。然后从工具中提取需要的数据,组成module的数据结构。
解析器的需求
-
支持宏定义的展开
-
支持提取parameter的名字和值。目前用的verilog-perl只能提取parameter的定义字符,对于parameter之间的嵌套引用,还需要自己处理。
-
支持端口名、位宽、方向等信息
-
支持按照定义的顺序获取端口信息
目前在用verilog-perl,基本上满足端口解析的需求。
解析结果通过转换为xml或者json,提供给自研的工具进行读取。
使用json作为中间格式,除了便于调试,还便于以后切换不同的编译