0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何自動(dòng)生成verilog代碼

芯司機(jī) ? 來(lái)源:ExASIC ? 2024-11-05 11:45 ? 次閱讀

以下文章來(lái)源于ExASIC,作者陳鋒

介紹幾種自動(dòng)生成verilog代碼的方法。

第一種:python直接write到文件

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

說(shuō)明:這種方法相當(dāng)簡(jiǎn)單樸素,python做出需要的字符串,寫到文件。好處是不需要技巧,壞處是python代碼可維護(hù)性較差。

第二種:讀配置文件再生成

與第一種的差異是,把各種可配置的信息存到配置文件里,如excel、json、yaml,在腳本里讀取配置文件再用第一種方法生成字符串。

這種方法的好處是腳本相對(duì)固定,只需要修改配置文件就可以重新生成verilog代碼。但python腳本還是相對(duì)較亂,因?yàn)閺呐渲?a target="_blank">參數(shù)到目標(biāo)verilog中間需要各種字符串處理,如正則替換,format,進(jìn)制轉(zhuǎn)換等。當(dāng)目標(biāo)verilog的格式要求一變,python腳本還是需要重寫。

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

第三種:利用模板語(yǔ)言

現(xiàn)在我們來(lái)利用模板語(yǔ)言,比如jinja2,(https://docs.jinkan.org/docs/jinja2),把配置參數(shù)與目標(biāo)verilog格式拆分開來(lái)。

如下圖,有兩個(gè)模板,RTL模板和驗(yàn)證模板,用同一個(gè)配置參數(shù)經(jīng)過不同的模板,就可以得到不同的代碼。配置參數(shù)與模板轉(zhuǎn)換的過程是由模板引擎來(lái)實(shí)現(xiàn),不需要我們?cè)僦匦略燧喿印?/p>

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

這種方法的好處是只需要把精力花了編寫模板身上,而其它部分都是由現(xiàn)成的庫(kù)來(lái)實(shí)現(xiàn),這樣就只需要寫很少量的python代碼了。缺點(diǎn)是這種模板語(yǔ)言與Verilog語(yǔ)言本身有比較大的差異,需要稍微學(xué)習(xí)一下。

第四種:Verilog里內(nèi)嵌python

在Verilog代碼注釋里嵌入幾行python代碼,而保持大部分Verilog不動(dòng)。比如下面的例子:

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的執(zhí)行結(jié)果替換到原處。

當(dāng)然為了保證代碼可以再次生成,我們不能刪除python源碼,而是需要在注釋下方生成。重新生成時(shí)會(huì)先刪除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

這個(gè)“提取->執(zhí)行->替換”的腳本具有通用性,編寫起來(lái)比較簡(jiǎn)單。不需要頻繁修改。

當(dāng)verilog里內(nèi)嵌的python功能接近,或者有共性時(shí),就可以把這種處理函數(shù)寫到一個(gè)py庫(kù)里,用時(shí)import進(jìn)來(lái)。

優(yōu)勢(shì):只需要維護(hù)一份verilog文件(不需要額外的python腳本了),對(duì)設(shè)計(jì)工程師友好。缺點(diǎn):每個(gè)公司都需要建立自己的共用py庫(kù),當(dāng)庫(kù)越來(lái)越龐大時(shí),新人或者換工作后就需要重新學(xué)習(xí)或者重新零開始。

第五種:第四種基礎(chǔ)上把常用規(guī)則提煉,做成開源工具

每個(gè)人單獨(dú)搞一套就會(huì)變得不可持續(xù)。可以以開源項(xiàng)目的方式,愛好者共同開發(fā)和維護(hù),不斷迭代,形成行業(yè)規(guī)范。例如:HDLGen(https://github.com/WilsonChen003/HDLGen)。

但很可能貢獻(xiàn)者有限,停止維護(hù),慢慢荒廢。

第六種:利用DSL來(lái)編寫代碼

比如SpinalHDL(https://thucgra.github.io/SpinalHDL_Chinese_Doc)、Chisel(https://www.chisel-lang.org)這種基于Scala的硬件開發(fā)工具。優(yōu)點(diǎn):有規(guī)范,行業(yè)標(biāo)準(zhǔn)。缺點(diǎn):創(chuàng)新得太徹底,學(xué)習(xí)成本非常高,遇到問題很難找到地方咨詢。并與現(xiàn)有的Verilog開發(fā)流程差異較大,DSL自成一套設(shè)計(jì)和驗(yàn)證的方法。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1343

    瀏覽量

    109918
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    570

    瀏覽量

    20464
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4721

    瀏覽量

    68213
  • python
    +關(guān)注

    關(guān)注

    55

    文章

    4766

    瀏覽量

    84365

原文標(biāo)題:幾種自動(dòng)生成verilog代碼的方法

文章出處:【微信號(hào):芯司機(jī),微信公眾號(hào):芯司機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何利用python自動(dòng)生成verilog模塊例化模板?

    如何利用python自動(dòng)生成verilog模塊例化模板?
    發(fā)表于 06-21 06:06

    什么是代碼自動(dòng)生成工具

    MCU代碼自動(dòng)生成工具介紹文檔編輯原標(biāo)題:GoKit3二次開發(fā)-代碼自動(dòng)生成工具介紹前文需知1.
    發(fā)表于 11-03 06:04

    CRC校驗(yàn)代碼自動(dòng)生成工具

    CRC校驗(yàn)代碼自動(dòng)生成工具根據(jù)輸入條件自動(dòng)產(chǎn)生各種CRC的VHDL或verilog源程序
    發(fā)表于 05-20 11:16 ?294次下載
    CRC校驗(yàn)<b class='flag-5'>代碼</b><b class='flag-5'>自動(dòng)</b><b class='flag-5'>生成</b>工具

    LFSR代碼自動(dòng)生成工具v1.20 beta

    LFSR代碼自動(dòng)生成工具v1.20 beta 線形反饋移位寄存器(LFSR)是數(shù)字系統(tǒng)中一個(gè)重要的結(jié)構(gòu),本程序可以自動(dòng)產(chǎn)生AHDL,VHDL,V
    發(fā)表于 05-14 11:05 ?50次下載

    verilog_代碼資料

    verilog_代碼資料,非常實(shí)用的代碼示例。
    發(fā)表于 02-18 15:00 ?37次下載

    verilog代碼規(guī)范

    verilog代碼規(guī)范,學(xué)會(huì)寫代碼還不行,我們需要更加的規(guī)范。
    發(fā)表于 03-25 14:43 ?24次下載

    Verilog 入門的實(shí)例代碼

    Verilog 入門的實(shí)例代碼,有需要的下來(lái)看看
    發(fā)表于 05-24 10:03 ?20次下載

    STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版

    STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版,感興趣的可以看看。
    發(fā)表于 07-13 16:55 ?0次下載

    STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版

    STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版 STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版
    發(fā)表于 07-25 18:52 ?0次下載

    基于普適服務(wù)的代碼自動(dòng)生成研究_黃凱

    基于普適服務(wù)的代碼自動(dòng)生成研究_黃凱
    發(fā)表于 03-16 10:48 ?0次下載

    關(guān)于自動(dòng)生成高效的代碼的方法分析和分享

    基于模型的設(shè)計(jì)流程和自動(dòng)代碼生成在汽車等行業(yè)基本上已經(jīng)是標(biāo)準(zhǔn)手段,然而在大多使用 MATLAB 語(yǔ)言的通信和數(shù)據(jù)分析領(lǐng)域,代碼生成的接受度還
    的頭像 發(fā)表于 09-12 11:48 ?3307次閱讀
    關(guān)于<b class='flag-5'>自動(dòng)</b><b class='flag-5'>生成</b>高效的<b class='flag-5'>代碼</b>的方法分析和分享

    關(guān)于為FPGA和ASIC生成Verilog和VHDL代碼分析和應(yīng)用介紹

    HDL Coder 還可以生成第三方 lint 工具腳本,用于檢查您生成的 HDL 代碼。HDL Coder 自動(dòng)生成
    的頭像 發(fā)表于 09-18 14:51 ?5232次閱讀
    關(guān)于為FPGA和ASIC<b class='flag-5'>生成</b><b class='flag-5'>Verilog</b>和VHDL<b class='flag-5'>代碼</b>分析和應(yīng)用介紹

    用于實(shí)現(xiàn)和評(píng)估TMR方法的自動(dòng)快速可綜合Verilog代碼生成器工具介紹

    端口添加多數(shù)表決電路。構(gòu)建這種三重化方案是一項(xiàng)非常重要的任務(wù),需要花費(fèi)大量的時(shí)間和精力來(lái)修改設(shè)計(jì)代碼。本文開發(fā)了RASP-TMR工具,該工具具有以可綜合的Verilog設(shè)計(jì)文件為輸入,對(duì)設(shè)計(jì)進(jìn)行解析和三次復(fù)制的功能。該工具還生成
    發(fā)表于 04-16 08:00 ?3次下載
    用于實(shí)現(xiàn)和評(píng)估TMR方法的<b class='flag-5'>自動(dòng)</b>快速可綜合<b class='flag-5'>Verilog</b><b class='flag-5'>代碼</b><b class='flag-5'>生成</b>器工具介紹

    如何在VScode中自動(dòng)生成Verilog仿真文件

    一、實(shí)現(xiàn)功能 1、可以自動(dòng)創(chuàng)建文件夾 2、根據(jù)Verilog文件自動(dòng)生成測(cè)試文件模板(TB文件名字是) 3、自動(dòng)打開
    的頭像 發(fā)表于 06-23 17:48 ?3381次閱讀

    c語(yǔ)言代碼自動(dòng)生成工具,MCU代碼自動(dòng)生成工具介紹

    MCU代碼自動(dòng)生成工具介紹文檔編輯原標(biāo)題:GoKit3二次開發(fā)-代碼自動(dòng)生成工具介紹前文需知1.
    發(fā)表于 10-28 17:36 ?8次下載
    c語(yǔ)言<b class='flag-5'>代碼</b><b class='flag-5'>自動(dòng)</b><b class='flag-5'>生成</b>工具,MCU<b class='flag-5'>代碼</b><b class='flag-5'>自動(dòng)</b><b class='flag-5'>生成</b>工具介紹