0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何自动生成verilog代码

芯司机 来源:ExASIC 2024-11-05 11:45 次阅读

以下文章来源于ExASIC,作者陈锋

介绍几种自动生成verilog代码的方法。

第一种:python直接write到文件

f = open('mytest.v', 'w')
# rtl = ...
f.write(rtl)

说明:这种方法相当简单朴素,python做出需要的字符串,写到文件。好处是不需要技巧,坏处是python代码可维护性较差。

第二种:读配置文件再生成

与第一种的差异是,把各种可配置的信息存到配置文件里,如excel、json、yaml,在脚本里读取配置文件再用第一种方法生成字符串。

这种方法的好处是脚本相对固定,只需要修改配置文件就可以重新生成verilog代码。但python脚本还是相对较乱,因为从配置参数到目标verilog中间需要各种字符串处理,如正则替换,format,进制转换等。当目标verilog的格式要求一变,python脚本还是需要重写。

85821bd6-9804-11ef-a511-92fbcf53809c.png

第三种:利用模板语言

现在我们来利用模板语言,比如jinja2,(https://docs.jinkan.org/docs/jinja2),把配置参数与目标verilog格式拆分开来。

如下图,有两个模板,RTL模板和验证模板,用同一个配置参数经过不同的模板,就可以得到不同的代码。配置参数与模板转换的过程是由模板引擎来实现,不需要我们再重新造轮子。

8595c5d2-9804-11ef-a511-92fbcf53809c.png

这种方法的好处是只需要把精力花了编写模板身上,而其它部分都是由现成的库来实现,这样就只需要写很少量的python代码了。缺点是这种模板语言与Verilog语言本身有比较大的差异,需要稍微学习一下。

第四种:Verilog里内嵌python

在Verilog代码注释里嵌入几行python代码,而保持大部分Verilog不动。比如下面的例子:

always@(posedge clk, negedge rst_n)
  if(!rst_n)
     q[7:0] <= 8'b0;
  else begin
// PYTHON_BEGIN
// import random
// data = []
// for i in range(8)
//   data.append(random.randint(0, 1))
// for i in range(8):
//   print('q[{}]'.format(data[i]))
// PYTHON_END
  end

可见,这串代码的注释中用PYTHON_BEGIN和PYTHON_END括起了一段python代码。我们需要提取出这段python,把python的执行结果替换到原处。

当然为了保证代码可以再次生成,我们不能删除python源码,而是需要在注释下方生成。重新生成时会先删除PY_VLG_BEGIN和PY_VLG_END之间的verilog代码。

always@(posedge clk, negedge rst_n)
  if(!rst_n)
     q[7:0] <= 8'b0;
  else begin
// PYTHON_BEGIN
// import random
// data = []
// for i in range(8)
//   data.append(random.randint(0, 1))
// for i in range(8):
//   print('q[{}] <= {};'.format(i, data[i]))
// PYTHON_END
// PY_VLG_BEGIN
    q[0] <= 0;
q[1] <= 1;
q[2] <= 0;
q[3] <= 0;
q[4] <= 1;
q[5] <= 1;
q[6] <= 1;
q[7] <= 0;
// PY_VLG_END
  end

这个“提取->执行->替换”的脚本具有通用性,编写起来比较简单。不需要频繁修改。

当verilog里内嵌的python功能接近,或者有共性时,就可以把这种处理函数写到一个py库里,用时import进来。

优势:只需要维护一份verilog文件(不需要额外的python脚本了),对设计工程师友好。缺点:每个公司都需要建立自己的共用py库,当库越来越庞大时,新人或者换工作后就需要重新学习或者重新零开始。

第五种:第四种基础上把常用规则提炼,做成开源工具

每个人单独搞一套就会变得不可持续。可以以开源项目的方式,爱好者共同开发和维护,不断迭代,形成行业规范。例如:HDLGen(https://github.com/WilsonChen003/HDLGen)。

但很可能贡献者有限,停止维护,慢慢荒废。

第六种:利用DSL来编写代码

比如SpinalHDL(https://thucgra.github.io/SpinalHDL_Chinese_Doc)、Chisel(https://www.chisel-lang.org)这种基于Scala的硬件开发工具。优点:有规范,行业标准。缺点:创新得太彻底,学习成本非常高,遇到问题很难找到地方咨询。并与现有的Verilog开发流程差异较大,DSL自成一套设计和验证的方法。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Verilog
    +关注

    关注

    28

    文章

    1345

    浏览量

    110045
  • 字符串
    +关注

    关注

    1

    文章

    578

    浏览量

    20501
  • 代码
    +关注

    关注

    30

    文章

    4767

    浏览量

    68464
  • python
    +关注

    关注

    56

    文章

    4789

    浏览量

    84566

原文标题:几种自动生成verilog代码的方法

文章出处:【微信号:芯司机,微信公众号:芯司机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何利用python自动生成verilog模块例化模板?

    如何利用python自动生成verilog模块例化模板?
    发表于 06-21 06:06

    什么是代码自动生成工具

    MCU代码自动生成工具介绍文档编辑原标题:GoKit3二次开发-代码自动生成工具介绍前文需知1.
    发表于 11-03 06:04

    CRC校验代码自动生成工具

    CRC校验代码自动生成工具根据输入条件自动产生各种CRC的VHDL或verilog源程序
    发表于 05-20 11:16 294次下载
    CRC校验<b class='flag-5'>代码</b><b class='flag-5'>自动</b><b class='flag-5'>生成</b>工具

    LFSR代码自动生成工具v1.20 beta

    LFSR代码自动生成工具v1.20 beta 线形反馈移位寄存器(LFSR)是数字系统中一个重要的结构,本程序可以自动产生AHDL,VHDL,V
    发表于 05-14 11:05 50次下载

    verilog_代码资料

    verilog_代码资料,非常实用的代码示例。
    发表于 02-18 15:00 37次下载

    verilog代码规范

    verilog代码规范,学会写代码还不行,我们需要更加的规范。
    发表于 03-25 14:43 24次下载

    Verilog 入门的实例代码

    Verilog 入门的实例代码,有需要的下来看看
    发表于 05-24 10:03 20次下载

    STM32库函数代码自动生成器正式版

    STM32库函数代码自动生成器正式版,感兴趣的可以看看。
    发表于 07-13 16:55 0次下载

    STM32库函数代码自动生成器正式版

    STM32库函数代码自动生成器正式版 STM32库函数代码自动生成器正式版
    发表于 07-25 18:52 0次下载

    基于普适服务的代码自动生成研究_黄凯

    基于普适服务的代码自动生成研究_黄凯
    发表于 03-16 10:48 0次下载

    关于自动生成高效的代码的方法分析和分享

    基于模型的设计流程和自动代码生成在汽车等行业基本上已经是标准手段,然而在大多使用 MATLAB 语言的通信和数据分析领域,代码生成的接受度还
    的头像 发表于 09-12 11:48 3349次阅读
    关于<b class='flag-5'>自动</b><b class='flag-5'>生成</b>高效的<b class='flag-5'>代码</b>的方法分析和分享

    关于为FPGA和ASIC生成Verilog和VHDL代码分析和应用介绍

    HDL Coder 还可以生成第三方 lint 工具脚本,用于检查您生成的 HDL 代码。HDL Coder 自动生成
    的头像 发表于 09-18 14:51 5365次阅读
    关于为FPGA和ASIC<b class='flag-5'>生成</b><b class='flag-5'>Verilog</b>和VHDL<b class='flag-5'>代码</b>分析和应用介绍

    用于实现和评估TMR方法的自动快速可综合Verilog代码生成器工具介绍

    端口添加多数表决电路。构建这种三重化方案是一项非常重要的任务,需要花费大量的时间和精力来修改设计代码。本文开发了RASP-TMR工具,该工具具有以可综合的Verilog设计文件为输入,对设计进行解析和三次复制的功能。该工具还生成
    发表于 04-16 08:00 3次下载
    用于实现和评估TMR方法的<b class='flag-5'>自动</b>快速可综合<b class='flag-5'>Verilog</b><b class='flag-5'>代码</b><b class='flag-5'>生成</b>器工具介绍

    如何在VScode中自动生成Verilog仿真文件

    一、实现功能 1、可以自动创建文件夹 2、根据Verilog文件自动生成测试文件模板(TB文件名字是) 3、自动打开
    的头像 发表于 06-23 17:48 3444次阅读

    c语言代码自动生成工具,MCU代码自动生成工具介绍

    MCU代码自动生成工具介绍文档编辑原标题:GoKit3二次开发-代码自动生成工具介绍前文需知1.
    发表于 10-28 17:36 8次下载
    c语言<b class='flag-5'>代码</b><b class='flag-5'>自动</b><b class='flag-5'>生成</b>工具,MCU<b class='flag-5'>代码</b><b class='flag-5'>自动</b><b class='flag-5'>生成</b>工具介绍