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

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

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

如何自動生成verilog代碼

芯司機 ? 來源:ExASIC ? 2024-11-05 11:45 ? 次閱讀

以下文章來源于ExASIC,作者陳鋒

介紹幾種自動生成verilog代碼的方法。

第一種:python直接write到文件

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

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

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

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

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

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

第三種:利用模板語言

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

如下圖,有兩個模板,RTL模板和驗證模板,用同一個配置參數(shù)經(jīng)過不同的模板,就可以得到不同的代碼。配置參數(shù)與模板轉(zhuǎn)換的過程是由模板引擎來實現(xiàn),不需要我們再重新造輪子。

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

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

第四種:Verilog里內(nèi)嵌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的執(zhí)行結(jié)果替換到原處。

當(dāng)然為了保證代碼可以再次生成,我們不能刪除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

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

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

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

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

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

但很可能貢獻者有限,停止維護,慢慢荒廢。

第六種:利用DSL來編寫代碼

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

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

    關(guān)注

    28

    文章

    1351

    瀏覽量

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

    關(guān)注

    1

    文章

    585

    瀏覽量

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

    關(guān)注

    30

    文章

    4807

    瀏覽量

    68787
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4801

    瀏覽量

    84849

原文標題:幾種自動生成verilog代碼的方法

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

收藏 人收藏

    評論

    相關(guān)推薦

    如何利用python自動生成verilog模塊例化模板?

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

    什么是代碼自動生成工具

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

    CRC校驗代碼自動生成工具

    CRC校驗代碼自動生成工具根據(jù)輸入條件自動產(chǎn)生各種CRC的VHDL或verilog源程序
    發(fā)表于 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)是數(shù)字系統(tǒng)中一個重要的結(jié)構(gòu),本程序可以自動產(chǎn)生AHDL,VHDL,V
    發(fā)表于 05-14 11:05 ?50次下載

    verilog_代碼資料

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

    verilog代碼規(guī)范

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

    Verilog 入門的實例代碼

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

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

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

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

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

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

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

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

    基于模型的設(shè)計流程和自動代碼生成在汽車等行業(yè)基本上已經(jīng)是標準手段,然而在大多使用 MATLAB 語言的通信和數(shù)據(jù)分析領(lǐng)域,代碼生成的接受度還
    的頭像 發(fā)表于 09-12 11:48 ?3374次閱讀
    關(guān)于<b class='flag-5'>自動</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 自動生成
    的頭像 發(fā)表于 09-18 14:51 ?5460次閱讀
    關(guān)于為FPGA和ASIC<b class='flag-5'>生成</b><b class='flag-5'>Verilog</b>和VHDL<b class='flag-5'>代碼</b>分析和應(yīng)用介紹

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

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

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

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

    c語言代碼自動生成工具,MCU代碼自動生成工具介紹

    MCU代碼自動生成工具介紹文檔編輯原標題:GoKit3二次開發(fā)-代碼自動生成工具介紹前文需知1.
    發(fā)表于 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>工具介紹