完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、前言
之前写过一篇关于利用Python生成module instance的文章,现直接在这篇文章基础上修改完善。作为一名IC验证工程师在公司经常写些脚本,自己在这方面的功底也提高了不少,再者有网友评论之前的脚本有不足之处,所以本文编写了一个进阶版的脚本,扩展性也比较强,方便大家使用。 二、代码设计 新添加的功能特性包括: 1 支持inout端口 2 支持多module文件中指定module的instance生成(不指定则默认与文件名一致) 3 检查注释行 4 生成Instance同时提供端口参数注释,包括端口方向和位宽 5 可选同时生成端口连接信号及其声明 因为提供了上述特性,代码逻辑较基础版更为复杂点。整个生成过程分为三个阶段:获得指定module的代码段,从中提取出端口信息以及按照指定工作模式生成instance文件。先上代码再加以说明: 基础版: python_inst.py 进阶版: rtl_generator.py inst_gen_app.py 在进阶版的脚本中采用了OOP特性,将相关的数据结构和function封装为Rtl_generator class。把命令行选项参数提取和正则表达式部分放在了inst_gen_app.py中完成。 根据生成逻辑中的三个阶段详细阐述内部原理:获取指定module代码段过程中,首先检测是否为注释行,若是则利用continue跳过,为有效行才进一步分析。利用add_flag指示是否检测到module头,若检测到则将代码行添加在extract_list里直至遇到endmodule停止。从module代码段中提取端口信息,使用regex_ports的各个group分离出端口名称、位宽以及方向部分字符串。其中位宽部分再次使用regex_width以及运算得到真实的位宽数值,很简单一看就懂不再赘述了。之后以字典的形式存储在info_list中。最后是生成Instance的部分,判断工作模式,若是默认的gen_inst_only则只产生Instance,若是gen_inst_wc,也就是generate instance with connections,那么在instance的端口上添加同名的连接信号以及该信号的声明,有木有太方便! 三、运行结果 最后我们来看下运行结果,这次在WINDOW的Pycharm环境下开发的,terminal和LINUX中的命令行用起来一样: > python inst_gen_app.py -filename video_system_wrapper.v -mode gen_inst_wc -target testbench.sv 设计原文件与生成文件如下: video_system_wrapper.v testbench.sv 总结下Usage: -filename module所在文件的文件名 -modulename 指定要产生instance的module名称(可选项,默认与文件同名) -mode 工作模式,包括gen_inst_only和gen_inst_wc(可选项,默认为gen_inst_only) -target 指定生成文件的文件名(可选项,默认为wrapper.v) |
|
|
|
只有小组成员才能发言,加入小组>>
865 浏览 2 评论
12803 浏览 0 评论
4099 浏览 7 评论
2320 浏览 9 评论
2140 浏览 2 评论
440浏览 2评论
736浏览 2评论
866浏览 2评论
586浏览 1评论
642浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 12:40 , Processed in 0.880603 second(s), Total 47, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号