分享程序--Verilog HDL代碼分析及整理軟體

2021-02-19 網絡交換FPGA

 課堂上我說過,Verilog HDL代碼具有很強的規律性,但目前尚沒有相關的代碼分析工具,Understanding、Sourceinsight等只支持VHDL,所以很有必要做一個Verilog的代碼分析工具,可用來輔大作業的完成。分享兩款我們自己開發的軟體,一個帶界面,一個不帶界面,原始碼我上傳到QQ群裡面,大家可以參考一下,多提意見。

Verilog HDL代碼規範整理程序使用說明

1、引言

1.1編寫目的

編寫本使用說明的目的是充分敘述本軟體所能實現的功能及其運行環境,以便使用者了解本軟體的使用範圍和使用方法,並為軟體的維護和更新提供必要的信息。

1.2術語和縮寫詞

RTL代碼:本軟體暫時只支持使用Verilog HDL語言描述的行為級代碼。

2、軟體概述

2.1目標

通過本軟體的操作,將RTL代碼進行規範化整理,方便開發人員進行維護。同時該軟體也可用於團隊項目開發,有利於形成統一的代碼規範標準,提高設計的效率,也可以用於教學。

2.2功能

該軟體是一款對Verilog HDL描述的行為級代碼進行自動分析整理的軟體,具有代碼分析功能和自動整理功能。代碼分析,可以對代碼的注釋率,所有模塊的調用關係,文件路徑及文件夾的關係,以及所有模塊中的狀態機等進行識別提取,並轉化為可視化的圖形顯示腳本,方便的採用開源軟體Graphviz進行查看;代碼整理,可以將代碼中所有的輸入輸出、內部變量、參數定義、always模塊、assign語句及例化調用等進行識別提取,按照固定格式(統一的縮進)輸出,保留原來的注釋代碼。自動識別FPGA或者後端軟體自動生成的RAM等IP核,對此類文件不進行整理。所有文件的整理結果以文本的形式給出,詳細說明注釋率、狀態機等統計結果以及不滿足設計規範的寫法的位置。整理後文件輸出保持原來文件的相對路徑關係。

2.3性能

該系統支持最多2048個RTL文件。分析時間較短,如197個Verilog HDL文件(共計有效代碼行數51129)分析整理的時間約為70.608秒。

3、運行環境

3.1軟硬體要求

Windows XP或WIN7作業系統,1G字節以上系統內存,2GHz以上處理器。

3.2支持軟體客戶程序軟體

軟體環境:C語言編程軟體Dev-C++,Visual Studio。

4、使用說明

4.1安裝和初始化

本軟體所有程序都在guifan文件夾下,如圖1所示。

圖1 程序文件

guifan文件夾下包括:

guifan.c  分析網表文件的核心程序;

include  文件夾下的define.h和struct.h是guifan程序的頭文件;

hdl文件夾  所有待規範化的.v程序文件都必須存儲在該文件夾下;

軟體運行結束後會生成newhdl文件夾,所有經過規範整理的文件保存在該文件夾下,與hdl文件夾對應,所有文件保持相對路徑不變。

4.2輸入

輸入的是RTL級代碼程序文件。

4.3 輸出4.3.1輸出結果文件介紹

軟體運行產生的輸出文件說明如圖2。

圖2 輸出文件說明

dir_gragh.txt  使用dot語言描述的hdl文件夾下所有.v文件的路徑關係,在dot文件中不支持「.」,所有.v後綴都去掉了點,可使用GVEdit軟體查看所有.v文件的路徑結構;

file_list.txt hdl文件夾下所有.v文件的所在目錄,每個文件的詳細信息包括注釋率等都有詳細說明;

file_noanno.txt,nouse.txt  都是程序運行產生的臨時文件;

fsm_gragh.txt所有文件程序中包含的狀態機,使用dot語言描述,可使用GVEdit查看狀態機的狀態轉移圖。

instance_gragh.txt 包含所有例化的模塊,該文件最後也使用dot語言描述例化的模塊之間的結構。

4.3.2輸出圖形顯示文件說明

軟體輸出的是dot格式的文件。dot格式文件可以導入開源工具Graphviz查看圖形化顯示結果。

4.3.3輸出舉例

dot文件顯示說明:

軟體運行的部分結果使用dot語言來進行描述的文件。通過GVEdit對dot語言進行處理可得到如圖3所示類型的結構圖,本例詳細描述了各模塊之間的調用關係,圖中多條箭頭表示多次調用。

圖3  Graphviz中顯示舉例

5、操作步驟

本軟體使用Dev-C++ 5.5.3進行操作。

1 建立工程,命名為『guifan』,如圖4。工程保存在guifan目錄下,如圖5。

圖4 建立工程-1

圖5 建立工程-2

2 然後在左側欄右鍵工程名,出現菜單選中Add to Project,然後將程序文件guifan.c添加進來(圖6)。

圖6 添加guifan.c程序

3 編譯&運行compile&run,如圖7。

圖7 編譯&運行程序

4 等待程序運行結束,如圖8。

圖8 運行結束圖

程序運行時顯示每個文件的詳細信息,如圖9.

圖9 程序運行信息

圖中紅框內部分表示,file_name為該文件的位置及名稱,module表示sr_fifo_w模塊共356行,189行注釋,4個parameter,2個assign聲明,該模塊包含1個8行的例化模塊,9個always塊共75行,result_path是該文件將被存儲的目的位置,然後是該模塊共有5個輸入,3個輸出,23個reg型變量和2個wire型變量。

另外,代碼在整理的過程中,能夠自動的識別FPGA或者後端軟體自動生成的RAM等IP核,不對此類文件進行整理,如圖10,識別到此類特殊文件將提示:

This file is an auto generated file by edatools!

對於此類文件,不做任何改動複製到newhdl文件夾下相對路徑下。

圖10 不被整理的文件

接下來查看程序運行的結果,同時藉助GVEdit查看文件結構。

1使用notepad++打開文件file_list.txt,如圖11,前半部分表示hdl文件夾下所有.v文件的存儲路徑。後半部分表示每個代碼文件的詳細信息,如圖12。

圖11  file_list.txt

最後總結,總共197個Verilog文件,同時標明了平均注釋率以及運行時間。

圖12 代碼文件的詳細信息

2打開文件dir_gragh.txt如圖13,將文件內容複製到GVEdit。

圖13  dir_gragh.txt

打開GVEdit軟體,如圖14將dir_gragh.txt的內容粘貼到文件中,然後配置圖片參數,這裡選擇dot型布局,圖片格式為jpg,同時設置輸出圖片到guifan文件夾下。

圖14 在GVEdit創建文件並配置參數

然後點擊OK得到如圖15所示的圖形。

圖15  GVEdit運行結果

打開dir_gragh.jpg如圖16,這裡選取cpt_insert文件夾,結合實際存儲結構,可見結構圖與實際的文件結構相符。

圖16  dir_gragh.jpg

3 打開文件fsm_gragh.txt如圖17,將紅框內容複製到GVEdit中,步驟同上。

圖17  fsm_gragh.txt

得到該狀態機結構如圖18,反映了該狀態機各狀態之間的互相轉換。

圖18  fsm_gragh.jpg

4 打開文件instance_gragh.txt如圖19,將紅框內容複製到GVEdit中。

圖19  instance_gragh.txt

打開GVEdit生成的圖片如圖20,由於hdl下工程頂層文件為himac,因此與圖中顯示相符,頂層模塊himac調用工程其他模塊,其他模塊之間,上層模塊調用下層模塊,結構清晰。

圖20  instance_gragh.jpg

5本軟體對於.v文件中的代碼做了規範化處理,如圖21,將模塊埠定義按輸入輸出進行歸納,刪除空行,統一縮進,標點符號及括號自動對齊。

圖21 整理前後比較-module,input,output

如圖22,所有的reg型和wire型變量分別集中在REGS和WIRES下,所有assign語句放在一起。

圖22 整理前後比較-reg,wire,assign

如圖23,文件中對其他模塊的例化部分也進行了規範整理。

圖23 整理前後比較-instance

經過本軟體的整理,整理後的RTL代碼在結構上更加清晰,格式更加整齊,以上舉例即可說明,不再贅述。

6、結論

本軟體實現對Verilog HDL描述的行為級代碼進行自動分析整理。所有文件的整理結果以文本的形式給出,詳細說明注釋率、狀態機等統計結果以及某些明顯不滿足設計規範的寫法的位置,一些較為複雜的不規範代碼需要手動去修改。整理前後的文件不改變其相對路徑關係。可用於團隊項目開發,有利於形成統一的代碼規範標準,增加可讀性,提高設計的效率。

Verilog HDL代碼分析軟體(添加界面)

1、引言1.1編寫目的

編寫本使用說明的目的是充分敘述本軟體所能實現的功能及其運行環境,以便使用者了解本軟體的使用範圍和使用方法,並為軟體的維護和更新提供必要的信息。

1.2術語和縮寫詞

注釋檢測閾值:指軟體中對代碼注釋率的最低要求。

狀態機:由狀態寄存器和組合邏輯電路構成,能夠根據控制信號按照預先設定的狀態進行狀態轉移,是協調相關信號動作、完成特定操作的控制中心。簡寫為FSM(Finite State Machine)。

2、軟體概述2.1目標

使用戶能夠輕鬆掌握本軟體的安裝和使用。

2.2功能

該軟體針對Verilog HDL代碼分析實現了如下幾個功能:

1、表及3D餅狀圖的形式將選中的.v文件分析結果展示出來;

2、現對某個文件夾下所有.v文件的自動分析與整理,並將分析結果在軟體中展示出來;

3、可以對某個.v文件進行狀態機提取,並利用WinGraphviz將提取結果以圖形的方式更加直觀的表現出來;

4、可以分析某個文件加下.v文件的調用關係。

2.3性能

軟體內核用C語言實現,效率比較高。可以支持不大於2048個文件同時處理。

3、運行環境3.1 軟硬體要求

WindowsXP或WIN7作業系統,1G字節以上系統內存,2GHz以上處理器。

3.2 運行環境要求

運行環境:需要安裝.NET4.0或以上運行環境。

4、使用說明4.1 安裝和初始化

本軟體利用Inno Setup軟體將程序打包為.exe可安裝程序,所有文件在都在Setup文件夾下,如圖1所示。

圖 1程序文件

程序安裝文件分為兩個,一個是VerilogHDL代碼分析軟體.exe,另一個是WinGraphviz_v1.02.24.msi。其中,Verilog HDL代碼分析軟體.exe是整個軟體的主程序,WinGraphviz_v1.02.24.msi是軟體運行中所必須的一個環境包,由於大部分用戶並沒有這個環境,因此在此提供。軟體安裝過程只需運行Verilog HDL代碼分析軟體.exe即可,環境包會自動安裝。

4.2 輸入

輸入的文件需要是Verilog HDL語言編寫的.v文件。

4.3 輸出4.3.1 輸出結果文件介紹

軟體運行後會生成3個文件夾,下面就每個文件夾具體內容進行分析。

newrtl:分析及整理之後新生成的.v文件,保存在該文件夾下,同時保持原有的相對路徑的關係。

相關圖片:該文件夾下為程序運行過程中所產生的一些圖片文件,可以在用戶所安裝的圖片管理其中查看,更加方便直觀。

整理文檔信息:

dir_graph.txt:文件夾的相互包含關係,及每個文件夾下的.v文件,生成的dot文件。在dot文件中不支持「.」,所有.v後綴都去掉了點。

file_list.txt:該文件的內容為最終分析結果,每個文件的詳細信息包括注釋率等都有詳細說明。

fsm_graph.txt:在分析過程中,若.v文件中有狀態機,則自動提取並生成dot文件保存在該文件中,可以直接用graphz圖形化顯示。

instance_graph.txt:該文件是所有module的調用關係圖形化顯示腳本,也是dot文件,可以圖形化顯示。

4.3.2 輸出圖形顯示文件說明

軟體輸出圖形顯示文件為dot格式,可以導入開源工具graphviz工具查看圖形化顯示結果。

4.3.3 輸出舉例

dot文件(fsm_graph.txt)顯示說明

生成的dot文件fsm_graph.txt,是以dot語言來進行描述的。文件中按照所分析代碼的順序,將其中的狀態機保存下來。可以選擇其中一種,拷貝到GVedit中進行顯示。顯示效果如圖2所示。

圖 2狀態機顯示圖

5 操作步驟

本軟體操作分為兩個階段進行。第一階段是安裝exe文件,第二階段,在可視化界面中運行程序,生成對應的結果。

5.1第一階段

首先確認你的安裝包裡面有如下文件:

1、Verilog HDL代碼分析軟體.exe(安裝文件)

2、Graphviz_v1.02.24.msi(安裝所必須的軟體環境)

    雙擊打開安裝文件,選擇安裝路徑,默認的路徑如圖3所示。我選擇的路徑是默認路徑。

圖 3選擇安裝路徑

點擊next,選擇是否在桌面創建快捷方式,如圖4所示。我選擇的是在桌面創建快捷方式。

圖 4選擇是否創建桌面快捷方式

點擊next,出現如圖5所示內容,信息確認無誤後,點擊next進行安裝,如圖6.

圖 5確認當前所選信息

圖 6安裝

在程序安裝結束後,會自動啟動WinGraphviz.msi文件的安裝(如圖7),如果已安裝該軟體,則點擊Cancel,反之點擊next。

圖 7安裝WinGraphviz.msi軟體

點擊next,進入路徑選擇,默認路徑如圖8所示,此處我是按照默認路徑進行安裝。

圖 8選擇安裝路徑

一直點擊next,安裝過程如圖9所示。

圖 9安裝WinGraphviz.msi過程

出現如圖10所示界面報時安裝完成。

圖 10安裝結束界面、

5.2 第二階段

1、打開Verilog HDL代碼分析軟體,軟體界面如圖11所示,通過左邊選擇框,可以選擇含有多個.v文件的文件夾,並將該文件夾下所有.v文件的分析信息顯示在中間的文件信息顯示框中。可以通過標題欄選擇單個.v文件,然後運行、分析。右邊的兩個框分別以文字、圖表的方式來顯示當前選中的.v文件的詳細信息。當選擇相應的文件夾或文件之後,根據需求,選擇菜單欄中相應的功能即可運行程序。

圖 11軟體界面

2、點擊菜單欄『設置』,可設置程序運行的各項參數,如圖12所示。

注釋率閾值默認為1,可以輸入自定義的數值;

文本編輯器的設置,可以選擇自己電腦所安裝的文本編輯器,如果不進行更改,則使用系統默認的文本編輯器。

圖 12參數設置

3、通過左邊選擇含有.v文件的文件夾,程序自動對當前文件夾下的所有.v文件進行分析。如圖13所示。

圖 13打開含有.v文件的文件夾

也可以選擇某個.v文件,如圖14所示。

圖 14選擇某個.v文件

4、選擇文件夾後,會出現對該文件夾下所有.v文件的分析,選中列表中的某一個.v文件,對應該文件的文本、圖表分析會在右邊顯示,如圖15所示。同時,可以將對該.v文件的文本分析結果輸出,如圖16。輸出的文本如圖17所示。

圖 15某個.v文件的圖表及文本分析結果

圖 16文本分析結果輸出

圖 17輸出文本的內容

此外,雙擊選中的文件,可以以設置的文本編輯器打開該文件,如圖18。

圖 18雙擊選中文件,打開該文件

同時,右擊選中文件,可執行菜單出相應的動作。如圖19。

圖 19右擊選中文件出現的菜單

5、選中文件夾後,可以按照菜單欄上的內容,對文件進行分析。點擊「整理並分析」按鈕,軟體將會調用內置C語言程序,對文件夾下的文件進行分析,如圖20所示,最後分析結果會在「詳細信息」中顯示,同時當前文件夾調用關係的圖片顯示,如圖21。

圖 20整理並分析過程

圖 21分析結果及文件夾相互關係

從上圖會發現一個問題,當要顯示的圖片關係比較複雜時,在程序中查看圖片會出現圖片模糊的問題。因此程序中每張出現的圖片,軟體會自動將其保存在當前分析的文件夾下的「相關圖片」文件夾下,方便查看,如圖22所示。

圖 22圖片保存位置

因為狀態機的提取是針對某個.v文件進行提取,因此再使用菜單欄中「狀態機提取」功能時,需要選擇列表中的某一個.v文件,如果文件中有狀態機,則將該狀態機的圖片顯示並保存;如果該文件中沒有狀態機,則會提示用戶。如圖23所示。

a)當前選中文件不含有狀態機

b)當前選中文件含有狀態機

圖 23狀態機提取

「文件調用分析」,該功能實現了對當前文件夾下的所有.v文件調用關係的分析,將其調用關係以圖片的形式展現,如圖24所示。

圖 24文件調用關係分析結果

6 總結

該軟體是一款自動對Veriloghdl描述的行為級代碼進行自動分析整理的軟體,具有代碼分析功能和自動整理功能。代碼分析功能,可以對代碼的注釋率,所有模塊的調用關係,文件路徑及文件夾的關係,以及所有模塊中的狀態機等進行識別提取,並轉化為可視化的圖形顯示腳本,可以方便的採用開源軟體Graphviz進行查看,也可直接在該軟體中查看圖片;代碼整理功能,可以將代碼中所有的輸入輸出、內部變量、參數定義、always模塊、assign語句及例化調用等進行識別提取,並按照固定個格式(統一的縮進)進行輸出,輸出後的文件格式整齊有條理,同時還保留原來的注釋代碼。另外,代碼在整理的過程中,能夠自動的識別FPGA或者後端軟體自動生成的RAM等IP核,不對此類文件進行整理,同時用戶也可以指定某些文件不被整理。整理後文件輸出保持原來文件的相對路徑關係。所有文件的整理結果以文本的形式給出,詳細說明注釋率、狀態機等統計結果以及某些明顯不滿足設計規範的寫法的位置,一些較為複雜的不規範代碼需要手動去修改。該軟體可以用於團隊項目開發,有利於形成統一的代碼規範標準,提高設計的效率,也可以用於教學。

歡迎關注通院專用集成電路課程學習公眾號!

相關焦點

  • Verilog代碼轉VHDL代碼經驗總結
    在轉換的過程,該軟體對代碼中的漢語注釋不支持,如果出現漢字就無法轉換。筆者之前就曾試著寫過Verilog轉VHDL代碼的工具,見:Verilog HDL代碼轉VHDL代碼,無奈因為不是軟體開發出身,寫出來的東西通用性和完善性很差。
  • HDLBits:在線學習Verilog(七 · Problem 30-34)
    解答與分析// synthesis verilog_input_version verilog_2001module top_module( input a, input b, input sel_b1, input sel_b2, output wire out_assign,
  • Verilog常見必備面試題
    使用verilog hdl實現具有同步RESET和SET的觸發器,具有異步RESET和SET的觸發器。異步reset和setalways@(posedge clk or negedge reset or posedge set)begin  if(set)  Q<=1;    else if(!
  • 學會使用Hdlbits網頁版Verilog代碼仿真驗證平臺
    代碼編輯仿真驗證平臺,這個平臺是國外的一家開源FPGA學習網站,通過「https://hdlbits.01xz.net/wiki/Main_Page」地址連結進入網頁,在該網頁上可以進行Verilog代碼的編寫、綜合,而且最後還能夠仿真出波形來驗證設計代碼的正確性,該驗證平臺是基於Icarus Verilog(簡稱iVerilog,比較著名的開源HDL仿真工具,也有對應的安裝版本)的,
  • 細談FPGA之Verilog HDL語法(一)
    前面淺談了一下FPGA(淺談FPGA),有人希望能繼續分享,那麼今天就來簡單講講FPGA的描述語言——Verilog HDL的語法,語法內容比較多
  • ​verilog相關基礎知識
    part two 程序框架注釋:     1.代碼注釋://、/*  */    2.XDC文件注釋  # 關鍵字:    input output   .    這裡引用正點原子整理的文檔(以下此類文檔均引用正點原子):框架:    Verilog的基本設計單元為---模塊block(和C語言中的函數很相似)。
  • 看思維導圖:一文帶你學Verilog HDL語言
    另外Verilog HDL語言具有大量成熟的模塊,從某種角度說Verilog HDL更具生命力。本文整理了一下Verilog HDL語言技術要點,並分享給大家。如發現有錯誤,歡迎留言指正。Verilog HDL能幹啥?
  • Verilog HDL基礎之:程序基本結構
    可描述順序執行或並行執行的程序結構。用延遲表達式或事件表達式來明確地控制過程的啟動時間。通過命名的事件來觸發其他過程裡的激活行為或停止行為。提供了條件、if-else、case、循環程序結構。提供了可帶參數且非零延續時間的任務(task)程序結構。
  • 不說廢話,直接給出verilog代碼for二分法查找
    上一篇文章IC君介紹了二進位搜索算法(二分法查找)在實際電路中的應用,而且文末也給出了一個電路設計的spec,可惜也沒人給出代碼或者電路,沒辦法只能IC君自己上了Linux 的創始人 Linus 曾經說過:Talk is cheap. Show me the code.
  • 零基礎學FPGA(五)Verilog語法基基礎基礎(下)
    例如  begin  r1=10;  $display("size=%d=%h",r1,r1);  $display("size=%0d=%0h",r1,r1);  輸出結果分別為 10,00a和10,a  所以在以後寫程序時,為了養成良好習慣,應該注意加上0來保證代碼的可讀性。
  • Verilog HDL基礎教程之:程序基本結構
    可描述順序執行或並行執行的程序結構。用延遲表達式或事件表達式來明確地控制過程的啟動時間。通過命名的事件來觸發其他過程裡的激活行為或停止行為。提供了條件、if-else、case、循環程序結構。提供了可帶參數且非零延續時間的任務(task)程序結構。
  • Verilog HDL程序設計——基本要素
    這樣芯司機的推送才能繼續出現在你的訂閱列表裡才能繼續跟大家分享集成電路設計行業的優質內容啦~來源:內容來自http://www.cnblogs.com/IClearner/ ,作者:IC_learner,謝謝。
  • 代碼行分析方法常見的軟體規模估算方法
    【IT168 技術文章】    測試工作量的估計往往和軟體開發的規模是緊密相關的.很多軟體公司往往是在估計了即將要開發的軟體規模後才做測試工作量的估計,然後求和得出項目的最終工作量估計.這種方法比較適用於有經驗積累,測試和開發模式穩定的公司或項目,提供了一個比較準確,有參考的數字.但同時由於其完全依賴其前提
  • 關於學習verilog
    規範很重要  工作過的朋友肯定知道,公司裡是很強調規範的,特別是對於大的設計(無論軟體還是硬體),不按照規範走幾乎是不可實現的。  在功能仿真做完後,由於我們做在是FPGA的設計,在設計時已經基本保證RTL級代碼在綜合結果和功能仿真結果的一致性,只要綜合布局布線後的靜態時序報告沒有違反時序約束的警告,就可以下到板子上去調試了。事實上,在華為中興,他們做FPGA的設計時也是不做時序仿真的,因為做時序仿真很花時間,且效果也不見得比看靜態時序分析報告好。
  • 零基礎教你學FPGA之Verilog語法基礎(下)
    例如  begin  r1=10;  $display("size=%d=%h",r1,r1);  $display("size=%0d=%0h",r1,r1);  輸出結果分別為 10,00a和10,a  所以在以後寫程序時,為了養成良好習慣,應該注意加上0來保證代碼的可讀性。
  • 感覺做軟體太累!有網友從IC轉行軟體後,又想轉回來,這個梗怎麼解?
    現在帖子又有更新,所以重新整理給大家。http://bbs.eetop.cn/thread-615093-1-1.html論壇網友@haixi** 的問題如下:本人電子專業研究生,畢業後轉到了軟體,不過做了一段時間後覺得軟體真心太累了。專業是硬體與軟體都相關的。所以說現在又想轉到硬體試試看。
  • Verilog 最全經驗總結(建議收藏)
    verilog與VHDL相比的優點二者的關係仿佛C與FORTRAN,具體而言:1 verilog的代碼效率更高:比較明顯的對比:VHDL在描述一個實體時採用entity/architecture模式,verilog在描述一個實體時只需用一個"module/edumodule"語句塊.
  • 分享||五大數據分析軟體對比
    ⚪  免費、開源     Python是FLOSS(自由/開放源碼軟體)之一。使用者可以自由地發布這個軟體的拷貝、閱讀它的原始碼、對它做改動、把它的一部分用於新的自由軟體中。FLOSS是基於一個團體分享知識的概念。
  • Verilog HDL設計技巧——基本要素
    轉載自:IC_learner的博客,點擊閱讀原文可查看Verilog基本上熟悉了,繼續整理一下Verilog的學習筆記吧。