精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

    瀏覽量

    109995
  • 字符串
    +關注

    關注

    1

    文章

    577

    瀏覽量

    20488
  • 代碼
    +關注

    關注

    30

    文章

    4753

    瀏覽量

    68368
  • python
    +關注

    關注

    56

    文章

    4783

    瀏覽量

    84473

原文標題:幾種自動生成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 ?3323次閱讀
    關于<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 ?5304次閱讀
    關于為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 ?3406次閱讀

    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>工具介紹