赞
踩
自动例化verilog模块的脚本(第二版)
第一版:自动例化verilog模块的脚本
这个脚本大概是我写的第一个比较大的脚本了,不过写好还没怎么用就离职了,空了一年,最近又有机会用了,发现确实有不少漏洞,而且第一版只支持符合verilog-2001标准的module,可实际使用中还是不可避免的会接触到旧版的module的定义,于是更新了目前了这一版:改bug+新增支持verilog-1995标准。
改动还算多,再加上有不少朋友是奔着这个脚本来的,所以写篇文章简单介绍下。
修了一些,比如注释被识别为端口、参数化端口中有逗号等等,具体记不清了,略。
其实就是仿着之前的匹配verilog-2001的module头的正则regex_module_head_verilog_2001又写了一个匹配verilog-1995的regex_module_head_verilog_1995,然后正则的分组也做到一致,这样二者可复用,就不用改其他部分了。
这样做就必须让这两个匹配模式互斥,即verilog-2001的module头只能被regex_module_head_verilog_2001匹配到,而verilog-1995的module头只能被regex_module_head_verilog_1995匹配到。
这一点在regex_module_head_verilog_2001中通过module module_name(#parameter …)(input …);这个格式来保证其识别不出verilog-1995的module头,而在regex_module_head_verilog_1995则是靠module module_name( …);这个括号里不能有input|output|inout来保证其识别不出verilog-2001的module头。
这样把改动全集中在匹配模式这里了。关于匹配模式顺便提一下,用之前Markdown脚本里用flag匹配代码块的思路应该也是行的通的,这里这种一下子匹配很多行的写起来有点费劲。
之前就是将默认值直接例化进去,现在改成将其声明为localparam,然后例化时用的就是参数名。对于TB而言,用那种方式其实无所谓,不过若是用于TOP中例化子模块,那着这种方式会好一点。
之前一直在提用logging模块代替print,但都没有真正用起来,这次将其加入argparse,变成可传的参数,真正用起来了。这个可以参考下面的参考链接。
虽然改了些bug、加了点新东西,应该还是做不到很普遍的支持,若是使用中发现用不起来,可以:
电脑操作方便的朋友,可以直接克隆git库,地址:git库
不方便用电脑操作的朋友,可以在公众号内回复关键字:脚本,可获取git库最新版本的压缩包。
【更新完善】利用python自动生成verilog模块例化模板 - 没落骑士 - 博客园
Python在ASIC中的应用
[《Python 编程快速上手–让繁琐工作自动化》]
[《Python Cookbook》第三版]
[《Python 学习手册》第四版]
Python中使用logging模块代替print(logging简明指南)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。