英伟达深度学习加速器开源项目nvdla(NVIDIA Deep Learning Accelerator)中用到了一个python脚本epython。源代码地址:https://github.com/nvdla/hw/blob/master/tools/bin/epython 。epython全称embeded python utility,简单地说,就是用来预处理verilog文件中嵌入的python脚本。利用python语法的简洁性,来自动生成一些重复的、有规律的代码。
提出问题
我们在写Verilog代码时,状态机的编码一般是由parameter定义,如下:
localparam IDLE = 3'd0;
localparam START = 3'd1;
...
localparam START = 3'd7;
如果中间需要插入一个新状态,就可能要修改两部分。一是位宽可能加1,二是新插入的后面所有的状态都需要加1。
二进制、十进制、十六进制,可以利用Vim或Emacs列编辑、数据填充、格式化来重新编码。如果是格雷码或者独热码就会麻烦很多。
那么有没有一种比较简便的方法呢?
epython的一个应用
我们知道epython可以让verilog中嵌入python脚本,那么我们可以写一个脚本来做这个事情。
假设我们有若干个状态,用python的列表来描述就是:
st = ['IDLE', &#

本文介绍了如何利用NVIDIA的nvdla项目中的epython工具,结合python脚本自动生成Verilog状态机的编码,包括二进制、十进制、十六进制、格雷码和独热码。通过示例展示了如何简化状态机编码的维护,详细解析了vloglib.py代码实现,并提供了源码下载链接。
最低0.47元/天 解锁文章

693

被折叠的 条评论
为什么被折叠?



