模拟技术学习
登录
直播中
康桃花
8年用户
1003经验值
私信
关注
[问答]
如何利用python自动生成verilog模块例化模板?
开启该帖子的消息推送
python
Verilog
如何利用python自动生成verilog模块例化模板?
回帖
(1)
刘帅
2021-6-21 09:27:33
一、前言
之前写过一篇关于利用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)
一、前言
之前写过一篇关于利用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)
举报
更多回帖
rotate(-90deg);
回复
相关问答
python
Verilog
模块
例
化
2015-01-02
2835
FPGA中如何
例
化
生成
的rom
2015-09-20
6735
模块
例
化
错误
2017-04-17
5098
采用
模板
方式
生成
报表时,在制作EXE程序怎么
自动
处理
模板
?
2015-03-11
3737
如何
利用
NI FlexRIO
模块
去满足
自动化
测试需求?
2021-05-06
1546
使用
Python
MyHDL有哪些注意事项?
2021-06-23
12017
用
verilog
语言编写PwM
生成
模块
2016-05-16
7909
iar for msp430
模块化
编程之
模板
如何搭建
2016-10-08
4907
如何
利用
Python
去实现Arduino UNO的串口通信呢
2021-12-21
1772
大家好 ,问个关于XILINX DCM
模块
例
化
的问题
2016-01-12
4225
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分