python模板代码生成_用python jinja2模板制作register generator

本文介绍了如何使用Python和Jinja2模板引擎从Excel文件中提取寄存器信息,并生成UVM寄存器模型代码。通过构建多叉树数据结构来表示寄存器结构,解析Excel表头和数据,最后利用模板生成符合要求的代码。
摘要由CSDN通过智能技术生成

寄存器设计验证在IC前端周期占据着相当的分量。如果能通过输入某种格式的文件,输出寄存器RTL, uvm register model, HTML描述,FW API...那对工作效率将是极大的提升。这里以uvm register model为例,介绍一种通过python模板制作代码生成器的方法,抛砖引玉。

输入格式选择

常用的寄存器输入格式有:tcl, excel, XML(IP_XACT). synopsys的ral gen一开始采用的就类似tcl的语法,处理起来很方便,然而写输入的人大概会很痛苦。不过最痛苦的莫过于直写XML,读起来头都要大两圈,通常会作为GUI工具的中间文件。为了使用者方便,这里选择了excel作为最终格式。

既然要用excel格式,那么需要使用第三方插件openpyxl处理excel文件,当然如果你习惯使用xlsxwriter, xlrd/xlwt也是一样的。

结构

寄存器在结构上自上而下依次为:block->register->field, 有两个明显的特点,每一层结构又带有该层特有的信息

每一层节点有1~N个子节点

这不就是颗多叉树么?实现的方式多种多样,可以用嵌套字典,也可以用class, 这里采用了后者。接下来构造这样的一棵树:

class RegisterNode(object):

def __init__(self, name='root'):

object.__setattr__(self, 'name', name)

object.__setattr__(self, 'items', {})

object.__setattr__(self, 'attrs', {})

为了未来使用的方便,将Node改造成可迭代的:

def __iter__(self):

return iter(self.items.items())

填充完__setitem__, __getitem__等一众方法之后,一颗寄存器树就做好了。

提取信息

我们的需求,无非是将文件从一种格式的文件映射

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值