RENESAS ForgeFPGA 軟體仿真

RENESAS ForgeFPGA 軟體仿真

重要訊息

模擬是一種在不同時間對設計應用不同輸入激勵以檢查 RTL 程式碼是否如預期運作的技術。它用於驗證設計的穩健性。模擬允許用戶 view 相關訊號的時序圖,了解設計中如何進行設計描述 file 行為。

測試平台是用於模擬的程式碼片段。一個簡單的測試平台將實例化被測單元 (UUT) 並驅動輸入。 Go 配置軟體使用 Icarus Verilog (iVerilog) 和 GTKWave 透過測試台中提供的激勵來觀察模擬波形。

本文檔描述了在系統上安裝 Icarus 時需要執行的步驟以及如何運行成功的模擬。

安裝伊卡洛斯 Verilog

a。從以下位置安裝最新版本的 Icarus Verilog (IVerilog) https://bleyer.org/icarus/
b。確保將 IVerilog 添加到 PATH 並讓它安裝 GTKWave(見圖 1)
安裝伊卡洛斯 Verilog

c。開啟Go設定軟體並選擇零件:SLG47910(Rev BB)以開啟Forge Workshop(見圖2)。
安裝伊卡洛斯 Verilog

d。點擊頂部工具列中間的 FPGA Editor,或者使用者也可以雙擊視窗中間的 FPGA Core 結構。
安裝伊卡洛斯 Verilog

e。將會開啟一個名為 Forge Workshop 的新視窗。在頂部的選單工具列中,按一下「選項」→「設定」。在「設定」對話方塊中,前往「使用者設定」標籤下的「工具」。取消選擇 Icarus Verilog 和 GTKWave 的使用「系統環境框」。將系統中儲存的 Iverilog 和 GTKWave 的路徑加入給定的空間(請參閱圖 4)。
安裝伊卡洛斯 Verilog

您已準備好模擬測試平台,上述步驟可確保在 Go 設定軟體上模擬測試平台時 GTKWave 自動啟動。

試驗台

成功實施任何系統的最關鍵步驟是驗證設計及其功能。在實現硬體之後驗證複雜的系統並不是一個明智的選擇。它在金錢、時間和資源方面都是無效的。因此,對於 FPGA,測試平台用於測試 Verilog 原始程式碼。

假設我們有一個 11 位元的輸入,並且我們想要測試設備的所有可能的輸入組合值,即 (211)。由於這是一個非常大量的組合,因此不可能手動測試它。在這種情況下,測試平台非常有用,因為您可以自動測試設計的所有可能值,從而確認測試設計的可靠性。 Verilog 測試平台用於模擬和分析設計,無需任何實體硬體設備。

待測設計,縮寫為 DUT,是我們要測試的功能的可綜合模組。換句話說,這就是我們要測試的電路設計。我們可以使用 Verilog 中的三種建模風格之一來描述我們的 DUT:閘級、資料流或行為。

測試平台不可綜合,因此它僅用於模擬目的。這允許使用者使用全範圍的 Verilog 結構,例如“for”、“$display”和“$monitor”等關鍵字來編寫測試平台。簡單的測試台將實例化被測單元 (UUT) 或被測設備 (DUT) 和驅動輸入。

了解測試平台

了解測試平台

Testbench 中的時間刻度定義

仿真時,軟體需要知道時間是如何定義的。延遲單位是使用“timescale”指令指定的,該指令指定時間單位及其後面模組的精確度。 `時間尺度有助於確定 #1 在時間上的意義。 # 用於定義依照timescale中指定的時間單位在系統中引入的延遲。因此,如果 time_unit 的單位為 ns,則 #1 表示 1 ns 的延遲。

句法:
`時間尺度/ /

time_unit 是 #1 延遲所代表的時間量。 time_ precision 基數表示相對於時間單位要使用多少個小數點精確度。 (請參閱圖 23 中的第 5 行)

我們可以使用時間尺度構造在同一設計中使用不同的時間單位。使用者需要記住,延遲規範不可綜合,也不能轉換為硬體邏輯。延遲函數完全用於模擬目的。 $時間 和$即時的 系統函數傳回目前時間,可以使用另一個系統任務 $timeformat 來變更預設報告格式。

Examp樂: 

`時間尺度10us/100ns
`時間尺度1ns/1ps
#10 重置=1; // 將訊號延遲 10 ns
#0.49 $display(“T = %0t at Time #0.49”, $realtime) ;

指定的延遲為#0.49,小於半個單位時間。然而,時間精度被指定為 1ps,因此模擬器不能小於 1ns,這使得它舍入給定的延遲語句並產生 0ns。因此,這個聲明沒有提供任何延遲。

模擬日誌: 

T = 1,時間 #0.49

模組聲明

任何測試平台中的模組聲明都不同於主 Verilog 程式碼。在測試台中,聲明該模組時沒有附帶任何終端連接埠。 (請參閱圖 25 中的第 5 行)

句法: 

模組;

模組聲明之後是定義先前在主設計中定義的輸入和輸出訊號 file.
我們在模擬過程中使用兩種訊號類型來驅動和監控訊號。 reg 資料類型將保留該值,直到為其指派新值。此資料型別只能在always 或initial 區塊中賦值。
線路資料類型類似於實體連接的資料類型。它將保存由連接埠、分配語句或暫存器驅動的值。該資料類型不能在initial 或always 區塊中使用。任何參數和整數聲明也在本節中完成。

Examp樂:
寄存器a,b; // HDL程式碼中的輸入在testbench中定義為reg
線y; // HDL 中的輸出訊號在測試平台中定義為導線

DUT實例化

測試平台的目的是驗證我們的 DUT 模組是否正常運作。因此,我們需要實例化我們的設計模組來測試模組。

句法: 

(. (信號1),.信號1>(信號2));

Examp樂:

ALU d0 (.a(a), // ALU 中的訊號“a”應連接到 ALU_tb 模組中的“a”
.b(b), // ALU 中的訊號“b”應連接到 ALU_tb 模組中的“b”
.c(c)) ;// ALU 中的訊號“c”應連接到 ALU_tb 模組中的“c”

我們已將 DUT 模組 ALU 實例化到測試模組。實例名稱 (d0) 是使用者的選擇。帶有句點“.”的信號它們前面是 ALU 模組內部訊號的名稱,而它們在測試台中連接的導線或暫存器位於括號 () 中的訊號旁邊。建議在單獨的行中對每個連接埠連接進行編碼,以便任何編譯錯誤訊息都能正確指向發生錯誤的行號。由於這些連接是按名稱建立的,因此它們出現的順序無關緊要。

也可以為測試平台模組具有不同訊號名稱的模組進行 DUT 實例化。實例化時,訊號的正確映射非常重要。

Examp樂: 

ALU d0 (.a(A), // ALU 中的訊號“a”應連接到 ALU_tb 模組中的“A”
.clk(clock), // ALU 中的訊號「clk」應連接到「clock」ALU_tb 模組
.out(輸出)); // ALU 中的訊號“out”應連接到 ALU_tb 模組中的“OUT”

測試台中的始終和初始區塊

Verilog 中有兩個順序區塊:initial 和always。我們正是在這些區塊中施加刺激。

初始區塊

初始區塊僅執行一次,並在執行區塊的最後一行時終止。刺激被寫入初始區塊中。 (請參閱圖 54 中的第 72-5 行)

句法:
..
初始開始
$轉儲file();
$dumpvars();
..(輸入刺激)
結尾

初始區塊在模擬開始時的時間 t = 0 開始執行。當達到延遲時,該區塊的執行將等待,直到延遲時間(10 個時間單位)過去,然後再次開始執行。
使用者也可以在此初始區塊內使用循環(for、while、if-else)定義刺激,而不是手動輸入所有組合。
初始區塊

 

Examp樂:
初始開始
A = 0; b = 0; // 開始執行
#10 a = 0; b = 1; // 執行時間為 t = 10 單位時間
#10 a = 1; b = 0; // 執行時間為 t = 20 單位時間
結尾

傾倒 Files

另一件要記住的事情是 $ 的聲明傾倒files 和$轉儲變數 在初始區塊內(請參閱圖 55 中的第 56-5 行)。 $傾倒file 用於轉儲網路和暫存器值的變化 file 這被命名為它的參數。

對於前amp樂:

$傾倒file(“alu_tb.vcd”);

將轉儲 a 中的更改 file 命名為alu_tb.vcd。更改記錄在 file 稱為VCD file 這代表價值變化轉儲。 VCD(值變更轉儲)儲存所有有關值變更的資訊。我們不能有多個 $dumpfile Verilog 模擬中的語句。

$轉儲變數 用於指定要轉儲哪些變數(在 file $dump 提到的file)。最簡單的使用方法就是不帶任何參數。 $dumpvars 的一般語法是

$轉儲變數 ( <, >);

我們基本上可以指定哪些模組以及模組中的哪些變數將被轉儲。最簡單的使用方法是將等級設為 0,並將模組名稱設為頂級模組(通常是頂級測試平台模組)。

$轉儲變數(0,alu_tb);

當 level 設定為 0 並且僅指定模組名稱時,它會轉儲該模組的所有變數以及由此頂級模組實例化的所有較低層級模組中的所有變數。如果任何模組沒有被這個頂層模組實例化,那麼它的變數將不會被覆蓋。還有一件事,$ 的聲明傾倒file 必須位於 $dumpvars 或指定轉儲的任何其他系統任務之前。這些轉儲 files 必須在刺激輸入之前聲明,否則,這些轉儲中不會保存任何值 files.

永遠封鎖

與初始語句相反,always 區塊會重複執行,儘管執行是在時間 t = 0 時開始的。amp也就是說,時脈訊號對於觸發器等時序電路的操作至關重要。需要持續供應。因此,我們可以在測試台中編寫時鐘操作程式碼(請參閱圖 52 中的第 5 行):

總是
#10 時鐘=~時鐘;
終端模組

上述語句在從 t ​​= 10 開始 0 ns 後執行。這樣,就產生了10 ns脈衝寬度的時脈訊號。因此,該語句產生頻率為 20 MHz 的訊號。需要注意的是,訊號的初始化是在always區塊之前完成的。如果我們不做初始化部分,clk訊號將從t – 50開始為x,0 ns後,它將反轉為另一個x。

自檢測試台

自檢查測試台包含檢查目前狀態的語句。

  • $展示 系統任務主要用於顯示偵錯訊息以追蹤模擬流程

初始開始
A = 0 ; b = 0 ; c = 0; #10; // 應用輸入,等待
if( y !== 1) 開始
$display(“000失敗”); //查看
c = 1; #10 ; //套用輸入,等待
結尾
else if ( y !== 0) 開始
$display(“001失敗”) //檢查
b = 1; c = 0; #10 ;結尾
否則如果(y!==0)
$display(“010失敗”); //查看
結尾
終端模組

$展示 用於顯示變數、字串或表達式的值。從上面的前ample,每當任何一個 if-else 迴圈滿足時,模擬器日誌就會顯示其各自的 $展示 陳述。預設情況下,字串末尾有一個換行符。

$展示 (“時間=%t,A=%b,B=%b,C=%b”,$時間,A,B,C);

引號中提到的字元將按原樣列印。字母和 % 表示字串格式。我們使用 %b 來表示二進位資料。我們可以使用%d、%h、%o分別表示十進制、十六進制和八進制。 %g 用來表示實數。這些將按提到的順序替換為報價之外的值。對於前ample,上述語句在模擬日誌中將顯示為:time = 20, A = 0, B =1, C = 0

桌子 1.Verilog表格式

爭論 描述
%h,%H 以十六進位格式顯示
%d,%D 以十進制形式顯示
%b,%B 以二進位格式顯示
%毫米 顯示層級名稱
%s,%S 顯示為字串
%t,%T 以時間格式顯示
%f,%F 以十進位格式顯示“真實”
%e,%E 以指數格式顯示“真實”

$展示 主要列印當時的資料或變量,就像 C 中的 printf 一樣。展示 對於我們必須的任何文本 view 在模擬日誌中。

  • $時間

$時間 是一個系統任務,它將返回模擬的當前時間。

  • $監視器

$監視器 將監視寫入的資料或變量,每當變數更改時,它將列印
改變的值。它達到了與每次獲得任何參數後調用 $display 類似的效果
更新。 $監視器 就像一個在主執行緒後台運行的任務,它監視和
顯示其參數變數的值變化。 $監視器 與 $ 具有相同的語法展示.

$監視器(“時間=%t,A=%b,B=%b,C=%b”,$時間,A,B,C);
自檢測試台

從圖 7 中您可以觀察到新增了新的程式碼行來自我評估測試平台。 $ 的位置展示 和$監視器 測試平台不同部分的語句將產生不同的結果(參見圖 8)。 $時間 這些語句中提到的列印該值的列印時間。同時單位為 170000,我們可以看到 A 和 B 的值因 $ 的不同而有差異展示 和$監視器 聲明。
自檢測試台

GTKWave 軟體

GTKWave 是一台功能齊全的 GTK+ wave viewer 適用於 Unix、Win32 和 Mac OSX,讀取 LXT、LXT2、VZT、FST 和 GHW file以及標準 VCD/EVCD file並允許他們 viewing。這是官方的 web站點位於 http://gtkwave.sourceforge.net/ 。推薦使用 GTKWave viewer 透過 Icarus Verilog 模擬工具。

一旦用戶成功創建了測試平台來測試設計的功能,用戶現在就可以使用 GTKWave 軟體來 view 波形。

啟動 GTKWave 軟體 view 波形,使用者需要點選工具列頂部的「模擬測試台」按鈕或從主選單「工具」→「模擬」→「模擬測試台」。如果沒有語法錯誤,則根據設計,GTKWave 應自動啟動,或測試台中的刺激結果將顯示在視窗的記錄器部分中。

GTKWave 軟體開啟 .vcd 格式轉儲file 自動地。 GTKWave 視窗開啟時不顯示波形。這使用戶有機會選擇想要的訊號 view 並觀察。要選擇訊號,使用者需要顯示,使用者需要點擊 SST 標籤下視窗左側的模組/實例的名稱。透過點擊每個實例的+,您可以在底部看到與該實例相關的訊號。然後您可以拖放所需的信號或雙擊它們以將其顯示在“信號”視窗中。您也可以選擇全部 (CTRL + A) 並將它們插入訊號視窗中(請參閱圖 9)。
GTKWave 軟體

訊號現已添加到訊號視窗中,但尚未進行模擬。將所需訊號新增至訊號視窗後,按一下象徵 使訊號適合視窗的當前寬度,然後從重新載入中重新載入訊號象徵 工具列上出現的符號。現在您可以看到訊號及其各自的值。

訊號值

預設情況下,訊號的值採用十六進位格式,並且所有波形均為綠色(如果運行正確)。

使用者可以透過右鍵單擊訊號並選擇資料格式或顏色格式來變更這些訊號的屬性。使用者還可以插入空白訊號以在訊號組之間進行劃分。當您獲得所需的光學結果時,您可以透過以下方式儲存配置: File → 寫入保存 File.

GTKWave 工具列

工具列(見圖 10)允許使用者執行訊號的基本功能。讓我們從左到右討論工具列上的每個選項。
GTKWave 工具列

  1. 選單選項: 在這個選項下我們可以 view 該軟體的所有各種功能都可用於使用該軟體。本使用者指南第 8 節介紹了此選單選項下的詳細資訊。
  2. 切割痕跡:用於從訊號視窗中刪除/剪切選擇訊號
  3. 複製痕跡:用於複製訊號視窗中選取的訊號
  4. 貼上痕跡:複製/剪下的跡線可以貼上到訊號視窗中的不同位置
  5. 縮放適合:用於根據使用者選擇顯示的視窗大小來擬合訊號
  6. 放大:用於放大訊號視窗
  7. 縮小:用於縮小訊號視窗
  8. 縮放撤消:用於撤銷訊號視窗的放大/縮小
  9. 縮放至開始:這將縮放訊號窗口,顯示訊號的開始時間。
  10. 縮放至末尾:這將縮放顯示訊號結束時間的訊號視窗
  11. 尋找上一邊:這會將標記移到左側,指示前一個邊緣
  12. 找到下一條邊:這會將標記向右移動,並指示下一個邊緣
  13. 滾動下/上鍵:使用它我們可以設定使用者想要顯示的時間範圍。對於前amp例如,我們可以將時間範圍設為 0 秒到 500 ns,它將只顯示該持續時間下的訊號。
  14. 重新加載: 每當顯示的訊號發生變化時,就會按下重新載入按鈕。它將根據新參數重新加載並顯示信號。對於前amp例如,在更改訊號的時間範圍後,我們需要重新載入訊號以在新設定的時間範圍內顯示訊號。

選單選項

在 GTKWave 軟體的左上角,使用者可以透過點擊三條垂直線來存取選單選項(見圖 11)。用戶可以在選單選項下找到以下選項:
選單選項

File

這 File 子選單包含與存取相關的各種項目 files、導入導出VCD files、列印和讀/寫 files 並退出。

編輯

編輯子選單用於執行各種實用功能,例如更改波形子視窗中值的資料表示形式。使用編輯子選單下的選項,使用者可以更改訊號的資料格式、重新排列、移動、修剪、突出顯示、將訊號分組、對訊號進行註釋、更改訊號的顏色等。

檢索

搜尋子選單用於對網路名稱和值執行搜尋。它有助於在VCD中的訊號和實例的不同層次上執行功能 file.

時間

時間子選單包含導航和狀態面板按鈕執行的功能的超集。
它支援簡單的、與時間相關的功能,例如縮放、移動到特定時間點、沿著特定方向移動訊號等。

標記

標記子選單用於對標記執行各種操作以及控制螢幕外滾動。
它支援在訊號視窗上添加大量標記的功能。最多允許 26 個名稱標記,且所有標記的時間必須不同。

a。在訊號視窗中新增標記
左鍵點選要放置標記的所需點,然後按 ALT + N。使用者可以在 26 個不同的時間和地點繼續執行此操作。
若要比較所有地點標記處的時間值,選單 → 標記 → 顯示變更標記資料。
這將打開一個窗口,其中顯示每個標記的時間值。使用者可以手動記下放置的每個標記處的時間值並減去它們以計算兩個標記之間的時間差。
b。刪除訊號視窗中的標記

使用者可以進入選單→標記→收集命名標記。這將刪除放置在訊號視窗中的最後一個標記。使用者可以透過選單 → 標記 → 收集所有命名標記來刪除所有命名標記(圖 12)。
選單選項

在圖 13 中,我們可以看到訊號顏色是如何改變的。您可以觀察新增到訊號視窗中的空白訊號以及註釋 - 空白訊號。
另請注意 6 個命名標記 (A – E) 的存在以及這些標記之間的時間值(以 ps 為單位)的計算。
選單選項

View

這 View 子選單用於控制處理狀態項目的圖形呈現以及訊號子視窗中的值的各種屬性。從此選單中,您可以將訊號視窗轉換為黑白或彩色。這 View 子選單還允許您更改時間維度,範圍從秒 (secs) 到菲秒 (fs)。用戶可以找到這個選項 View → 縮放至時間維度 → fs。

幫助

幫助子選單包含啟用線上說明以及顯示程式版本資訊的選項。

結論

創建本文檔的目的是幫助使用者成功模擬其設計並透過修正所需測試平台的草圖並使用 Icarus Verilog 和 GTKWave 顯示波形並觀察結果來驗證功能。

修訂歷史

修訂 日期 描述
1.00 20 年 2024 月 XNUMX 日 初次發布。

R19US0011EU0100 Rev.1.0
20 年 2024 月 XNUMX 日
© 2024 瑞薩電子
標識

文件/資源

RENESAS ForgeFPGA 軟體仿真 [pdf] 使用者指南
REN_r19us0011eu0100、ForgeFPGA 軟體模擬、ForgeFPGA 軟體、ForgeFPGA、ForgeFPGA 模擬、軟體模擬、模擬、軟體

參考

發表評論

您的電子郵件地址不會被公開。 必填欄位已標記 *