Softwarová simulace RENESAS ForgeFPGA

Softwarová simulace RENESAS ForgeFPGA

Důležité informace

Simulace je technika aplikace různých vstupních podnětů na design v různých časech, aby se ověřilo, zda se RTL kód chová zamýšleným způsobem. Slouží k ověření robustnosti konstrukce. Simulace umožňuje uživateli view časový diagram souvisejících signálů, abyste pochopili, jak je popis návrhu v návrhu file se chová.

Testbenches jsou části kódu, které se používají pro simulaci. Jednoduchý testbench vytvoří instanci Unit Under Test (UUT) a řídí vstup. Software Go Configure používá Icarus Verilog (iVerilog) a GTKWave k pozorování simulačních křivek pomocí stimulů poskytnutých v testovacím prostředí.

Tento dokument popisuje kroky, které je třeba provést při instalaci Icarus na váš systém, a jak spustit úspěšnou simulaci.

Instalace Icarus Verilog

a. Nainstalujte nejnovější verzi Icarus Verilog (IVerilog) z https://bleyer.org/icarus/
b. Nezapomeňte přidat IVerilog do PATH a nechat jej nainstalovat GTKWave (viz obrázek 1)
Instalace Icarus Verilog

c. Otevřete Go Configure Software a vyberte součást: SLG47910 (Rev BB) pro otevření Forge Workshop (viz obrázek 2).
Instalace Icarus Verilog

d. Klikněte na FPGA Editor uprostřed lišty nahoře nebo může uživatel také dvakrát kliknout na strukturu FPGA Core uprostřed okna.
Instalace Icarus Verilog

e. Otevře se nové okno s názvem Forge Workshop. V horní liště nabídky klikněte na Možnosti → Nastavení. V dialogovém okně Nastavení přejděte na kartu Nastavení uživatele na Nástroje. Zrušte zaškrtnutí políčka Použít „systémové prostředí“ pro Icarus Verilog i GTKWave. Přidejte cestu k Iverilog a GTKWave uloženým ve vašem systému do daného prostoru (viz obrázek 4).
Instalace Icarus Verilog

Všichni jste připraveni simulovat testovací plochu a výše uvedené kroky zajistí, že se GTKWave spustí automaticky při simulaci testovací plochy v softwaru Go Configure.

Testbench

Nejdůležitějším krokem úspěšné implementace jakéhokoli systému je ověření návrhu a jeho funkčnosti. Ověření složitého systému po implementaci hardwaru není moudrá volba. Je to neefektivní z hlediska peněz, času a zdrojů. V případě FPGA se tedy k testování zdrojového kódu Verilog používá testbench.

Předpokládejme, že máme vstup, který má 11 bitů, a chceme zařízení otestovat na všechny možné hodnoty kombinací vstupů, tj. (211). Vzhledem k tomu, že se jedná o velmi velké množství kombinací, není možné to ručně otestovat. V takových případech jsou testbenches velmi užitečné, protože můžete testovat návrh automaticky na všechny možné hodnoty, a tak potvrdit spolehlivost návrhu testu. Verilog Testbenches se používají k simulaci a analýze návrhů bez potřeby jakéhokoli fyzického hardwarového zařízení.

Testovaný design, zkráceně DUT, je syntetizovatelný modul funkčnosti, kterou chceme testovat. Jinými slovy, je to návrh obvodu, který bychom chtěli otestovat. Naše DUT můžeme popsat pomocí jednoho ze tří stylů modelování ve Verilog – Gate-level, Dataflow nebo Behavioral.

Testbench není syntetizovatelný, proto se používá pouze pro účely simulace. To umožňuje uživateli používat celou řadu konstrukcí Verilog, např. klíčová slova jako „for“, „$display“ a „$monitor“ atd. pro psaní testovacích stolů. Jednoduchý testbench vytvoří instanci Unit Under Test (UUT) nebo Device Under Test (DUT) a vstupy měniče.

Pochopení Testbench

Pochopení Testbench

Definice časové osy v Testbench

Při simulaci potřebuje software vědět, jak byl definován čas. Jednotka zpoždění se určuje pomocí direktivy `timescale, která určuje jednotku času a přesnost pro moduly, které ji následují. Časová osa pomáhá určit, co znamená číslo 1 z hlediska času. # se používá k definování zpoždění, které má být zavedeno do systému v souladu s časovou jednotkou specifikovanou v časovém měřítku. Takže #1 znamená zpoždění 1 ns, pokud je time_unit v ns.

Syntax:
`časová osa / /

time_unit je množství času, které představuje zpoždění #1. Základ time_precision představuje, kolik desetinných míst přesnosti použít vzhledem k časovým jednotkám. (Viz řádek 23 na obrázku 5)

Můžeme použít konstrukce časové osy k použití různých časových jednotek ve stejném designu. Uživatel si musí pamatovat, že specifikace zpoždění nelze syntetizovat a nelze je převést na hardwarovou logiku. Funkce zpoždění jsou výhradně pro účely simulace. $čas a $v reálném čase systémové funkce vracejí aktuální čas a výchozí formát hlášení lze změnit pomocí jiné systémové úlohy $timeformat .

Exampten: 

`časové měřítko 10us/100ns
`časové měřítko 1ns/1ps
#10 reset = 1; // zpozdí signál o 10 ns
#0.49 $display( “T = %0t v čase #0.49”, $realtime) ;

Zadané zpoždění je #0.49, což je méně než polovina času. Přesnost času je však specifikována na 1ps, a proto simulátor nemůže být menší než 1ns, což znamená, že zaokrouhluje dané zpoždění a dává 0ns. Toto prohlášení tedy neposkytuje žádné zpoždění.

Záznam simulace: 

T = 1 v čase #0.49

Prohlášení modulu

Deklarace modulu v jakémkoli testbench je na rozdíl od hlavního kódu Verilog. V testbench je modul deklarován bez jakýchkoliv terminálových portů spolu s ním. (Viz řádek 25 na obrázku 5)

Syntax: 

modul ;

Po deklaraci modulu následuje definice vstupních a výstupních signálů definovaných dříve v hlavním návrhu file.
Pro řízení a sledování signálů během simulace používáme dva typy signálů. Datový typ reg bude držet hodnotu, dokud mu nebude přiřazena nová hodnota. Tomuto datovému typu lze přiřadit hodnotu pouze ve vždy nebo v počátečním bloku.
Datový typ drátu je jako u fyzického připojení. Bude obsahovat hodnotu, která je řízena portem, příkazem assign nebo reg. Tento datový typ nelze použít v počátečním nebo vždy bloku. V této sekci se také provádí deklarace jakýchkoli parametrů a celých čísel.

Exampten:
Reg a,b; // vstup v kódu HDL je v testbench definován jako reg
Drát y; // výstupní signál v HDL je definován jako drát v testbench

DUT Instanciation

Účelem testovacího stolu je ověřit, zda náš modul DUT funguje. Proto musíme vytvořit instanci našeho konstrukčního modulu pro testovací modul.

Syntax: 

(. (signál1), . signál1>(signál2));

Exampten:

ALU d0 (.a(a), // signál „a“ v ALU by měl být připojen k „a“ v modulu ALU_tb
.b(b), // signál „b“ v ALU by měl být připojen k „b“ v modulu ALU_tb
.c(c)) ;// signál „c“ v ALU by měl být připojen k „c“ v modulu ALU_tb

Vytvořili jsme instanci modulu DUT ALU do testovacího modulu. Název instance (d0) je volbou uživatele. Signály s tečkou „.“ před nimi jsou názvy signálů uvnitř ALU modulu, zatímco vodič nebo reg, ke kterému se připojují na zkušební stolici, je vedle signálu v závorce (). Doporučuje se kódovat každé připojení portu na samostatném řádku, aby jakákoli chybová zpráva kompilace správně ukazovala na číslo řádku, kde k chybě došlo. Protože jsou tato spojení vytvořena podle názvu, pořadí, ve kterém se objevují, je irelevantní.

Instanci DUT lze také provést pro moduly, kde má modul testbench různé názvy signálů. Při vytváření instance je důležité správné mapování signálů.

Example: 

ALU d0 (.a(A), // signál „a“ v ALU by měl být připojen k „A“ v modulu ALU_tb
.clk(clock), // signál „clk“ v ALU by měl být připojen k modulu „clock“ ALU_tb
.out(OUT)) ; // signál „out“ v ALU by měl být připojen k „OUT“ v modulu ALU_tb

Vždy a počáteční blok v Testbench

Verilog má dva sekvenční bloky, počáteční a vždy. Právě v těchto blocích aplikujeme podnět.

Počáteční blok

Počáteční blok, který se provede pouze jednou a skončí, když se provede poslední řádek bloku. Podnět se zapíše do úvodního bloku. (Viz řádek 54-72 na obrázku 5)

Syntax:
..
počáteční začátek
$dumpfile();
$dumpvars();
..(zadejte podnět)
konec

počáteční blok začíná své provádění na začátku simulace v čase t = 0. Počínaje prvním řádkem mezi začátkem a koncem se každý řádek provádí shora dolů, dokud není dosaženo zpoždění. Když je dosaženo zpoždění, provedení tohoto bloku čeká, dokud neuplyne doba zpoždění (10 časových jednotek), a poté se znovu spustí.
Uživatel může definovat stimuly pomocí smyček (for, while, if-else) i uvnitř tohoto počátečního bloku namísto ručního zadávání všech kombinací.
Počáteční blok

 

Example:
Počáteční začátek
A = 0; b = 0; // spuštění provádění
#10 a = 0; b = 1; // provedení je v t = 10-jednotkový čas
#10 a = 1; b = 0; // provedení je v t = 20-jednotkový čas
konec

Skládka Files

Další věc, kterou je třeba mít na paměti, je deklarace $skládkafiles a $dumpvars uvnitř počátečního bloku (viz řádek 55-56 na obrázku 5). $skládkafile se používá k výpisu změn hodnot sítí a registrů v a file který je pojmenován jako jeho argument.

Napřampten:

$skládkafile(„alu_tb.vcd“);

vypíše změny v a file s názvem alu_tb.vcd. Změny jsou zaznamenány v a file s názvem VCD file což znamená výpis změny hodnoty. VCD (value change dump) ukládá všechny informace o změnách hodnot. Nemůžeme mít více než jeden $dumpfile příkazy v simulaci Verilog.

$dumpvars se používá k určení, které proměnné mají být vypsány (v file zmínil $dumpfile). Nejjednodušší způsob použití je bez jakéhokoli argumentu. Obecná syntaxe $dumpvars je

$dumpvars ( <, >);

V podstatě můžeme specifikovat, které moduly a které proměnné v modulech budou vypisovány. Nejjednodušší způsob, jak to použít, je nastavit úroveň na 0 a název modulu jako nejvyšší modul (obvykle nejvyšší modul testbench).

$dumpvars(0, alu_tb);

Když je úroveň nastavena na 0 a je zadán pouze název modulu, vypíše VŠECHNY proměnné tohoto modulu a všechny proměnné ve VŠECH modulech nižší úrovně vytvořených tímto nejvyšším modulem. Pokud některý modul není vytvořen tímto horním modulem, jeho proměnná nebude pokryta. Ještě jedna věc, deklarace $skládkafile musí přijít před $dumpvars nebo jiné systémové úlohy, které specifikují výpis. Tyto skládky files musí být deklarováno před stimulačními vstupy, jinak se do těchto výpisů neuloží žádná hodnota files.

Vždy zablokovat

Na rozdíl od počátečních příkazů se blok vždy opakovaně provádí, ačkoli provádění začíná v čase t = 0. Např.ample, je hodinový signál nezbytný pro činnost sekvenčních obvodů, jako jsou klopné obvody. Je potřeba ho dodávat průběžně. Můžeme tedy napsat kód pro provoz hodin v testovacím prostředí jako (viz řádek 52 na obrázku 5):

vždy
#10 clk = ~clk;
koncový modul

Výše uvedený příkaz se provede po 10 ns počínaje t = 0. Hodnota clk bude invertována po 10 ns od předchozí hodnoty. Tím se generuje hodinový signál o šířce pulsu 20 ns. Proto toto prohlášení generuje signál o frekvenci 50 MHz. Je důležité si uvědomit, že inicializace signálu se provádí před vždy blokem. Pokud neprovedeme inicializační část, signál clk bude x od t – 0 a po 10 ns bude invertován na jiné x.

Self-Checking Testbench

Samokontrolní testbench obsahuje příkaz ke kontrole aktuálního stavu.

  • $zobrazit systémové úlohy se používají hlavně k zobrazení ladicích zpráv pro sledování průběhu simulace

počáteční začátek
A = 0; b = 0; c = 0; #10; // použít vstup, počkat
if( y ! == 1) začít
$display( “000 selhalo”) ; //kontrola
c = 1; #10; //použijte vstup, počkejte
konec
else if ( y ! == 0) začít
$display(“001 selhalo”) // kontrola
b = 1; c = 0; #10; konec
jinak if(y!==0)
$display (“ 010 se nezdařilo”); //kontrola
konec
koncový modul

$zobrazit se používá pro zobrazení hodnot proměnných, řetězců nebo výrazů. Z výše uvedeného example, kdykoli je splněna jakákoli smyčka if-else, pak protokol simulátoru zobrazí příslušné $zobrazit prohlášení. Na konci řetězců je standardně nový řádek.

$zobrazit („čas = %t, A = %b, B = %b, C = % b“, $čas, A, B, C);

Znaky uvedené v uvozovkách budou vytištěny tak, jak jsou. Písmeno spolu s % označuje formát řetězce. Pro reprezentaci binárních dat používáme %b. Můžeme použít %d, %h, %o pro reprezentaci desítkové, šestnáctkové a osmičkové soustavy. %g se používá pro vyjádření reálných čísel. Ty budou nahrazeny hodnotami mimo nabídku v uvedeném pořadí. Napřample, výše uvedený příkaz se zobrazí v protokolu simulace jako: čas = 20, A = 0, B =1, C = 0

Tabulka 1. Formáty tabulky Verilog

Argument Popis
%h, %H Zobrazení v hexadecimálním formátu
%d, %D Zobrazení v desítkovém tvaru
%b, %B Zobrazení v binárním formátu
%m, %M Zobrazit hierarchický název
%s, %S Zobrazit jako řetězec
%t, %T Zobrazení ve formátu času
%f, %F Zobrazit 'skutečný' v desítkovém formátu
%e, %E Zobrazte „skutečný“ v exponenciálním formátu

$zobrazit hlavně tiskne data nebo proměnnou tak, jak jsou v tom okamžiku té doby jako printf v C. Musíme zmínit $zobrazit pro jakýkoli text, který musíme view v protokolu simulace.

  • $čas

$čas je systémová úloha, která vrátí aktuální čas simulace.

  • $monitor

$monitor bude sledovat data nebo proměnnou, pro kterou je zapsána a kdykoli se proměnná změní, vytiskne
změněnou hodnotu. Dosahuje podobného efektu volání $display po každém obdržení některého z jeho argumentů
aktualizováno. $monitor je jako úloha, která se spustí na pozadí hlavního vlákna, které monitoruje a
zobrazuje změny hodnot svých proměnných argumentů. $monitor má stejnou syntaxi jako $zobrazit.

$monitor(„čas = %t, A = %b, B = %b, C = %b“, $čas, A, B, C);
Self-Checking Testbench

Z obrázku 7 můžete pozorovat, že byly přidány nové řádky kódů pro sebehodnocení testbench. Umístění $zobrazit a $monitor příkazy v různých částech testbench poskytnou různé výsledky (viz obrázek 8). $čas uvedené v těchto výpisech vytiskne čas, pro který se hodnota tiskne. Ve stejné časové jednotce, řekněme 170000 XNUMX, můžeme vidět, jaký je rozdíl v hodnotě pro A a B kvůli $zobrazit a $monitor prohlášení.
Self-Checking Testbench

Software GTKWave

GTKWave je plně funkční vlna GTK+ viewpro Unix, Win32 a Mac OSX, který čte LXT, LXT2, VZT, FST a GHW files stejně jako standardní VCD/EVCD files a umožňuje jejich viewIng. Jeho oficiální webmísto je na http://gtkwave.sourceforge.net/ . Doporučuje se GTKWave viewer simulačním nástrojem Icarus Verilog.

Jakmile uživatel úspěšně vytvoří testovací plochu pro testování funkčnosti návrhu, může nyní používat software GTKWave k view průběhy.

Chcete-li spustit software GTKWave view křivek, uživatel musí kliknout na tlačítko Simulate Testbench v horní části panelu nástrojů nebo z hlavní nabídky Tools→ Simulation→ Simulate Testbench. Pokud se nevyskytují žádné syntaktické chyby, pak by se v závislosti na návrhu měla GTKWave spustit automaticky nebo se výsledky stimulů v testovacím prostředí zobrazí v části okna Logger.

Software GTKWave otevře výpis formátu .vcdfile automaticky. Okno GTKWave nezobrazuje tvar vlny, když se otevře. To dává uživateli příležitost vybrat si, které signály chce view a pozorovat. Pro výběr signálu musí uživatel zobrazit, uživatel musí kliknout na název svého modulu/instance na levé straně okna pod záložkou SST. Kliknutím na + u každé instance uvidíte ve spodní části signály, které s danou instancí souvisejí. Poté můžete přetáhnout požadovaný signál nebo na něj dvakrát kliknout, aby se zobrazil v okně Signály. Můžete také vybrat všechny (CTRL + A) a vložit je do okna signálů (viz obrázek 9).
Software GTKWave

Signály jsou nyní přidány do signálového okna, ale ještě je třeba je simulovat. Po přidání požadovaných signálů do okna signálu klikněte naSymbol aby se signály přizpůsobily aktuální šířce okna a poté znovu načetly signály z opětovného načteníSymbol symbol na panelu nástrojů. Nyní můžete vidět signály s jejich příslušnými hodnotami.

Hodnoty signálu

Standardně jsou hodnoty signálů v hexadecimálním formátu a všechny vlny jsou zbarveny zeleně (pokud správně běží).

Uživatel může změnit vlastnosti těchto signálů kliknutím pravým tlačítkem na signál a výběrem Data Format nebo Color Format. Uživatel může také vložit prázdný signál pro vytvoření sekcí mezi skupinami signálů. Až budete mít požadovaný optický výsledek, můžete své konfigurace uložit File → Napište Uložit File.

Panel nástrojů GTKWave

Panel nástrojů (viz obrázek 10) umožňuje uživateli provádět základní funkce pro signál. Pojďme diskutovat o každé možnosti na panelu nástrojů zleva doprava.
Panel nástrojů GTKWave

  1. Možnosti nabídky: V rámci této možnosti můžeme view všechny různé funkce softwaru, které lze použít k hraní si se softwarem. Podrobnosti v této možnosti nabídky jsou uvedeny v části 8 této uživatelské příručky.
  2. Cut Stops: Používá se k vymazání/odříznutí signálu výběru z okna signálu
  3. Kopírovat stopy: Používá se ke kopírování zvoleného signálu z okna signálu
  4. Vložit stopy: Zkopírovanou/vyříznutou stopu lze vložit na jiné místo v okně signálu
  5. Zoom Fit: Používá se k přizpůsobení signálů velikosti okna, které se uživatel rozhodne zobrazit
  6. Přiblížit: Používá se k přiblížení okna signálu
  7. Oddálit: Používá se k oddálení okna signálu
  8. Přiblížení Zpět: používá se ke zrušení přiblížení/oddálení v okně signálu
  9. Přiblížením na začátek: toto přiblíží okno signálu a zobrazí čas začátku signálů.
  10. Přiblížit na konec: toto přiblíží okno signálu zobrazující čas ukončení signálů
  11. Najít předchozí hranu: Toto posune značku na levou stranu označující předchozí okraj
  12. Najděte další hranu: Toto posune značku doprava označující další hranu
  13. Posun dolní/horní vazba: pomocí tohoto můžeme nastavit časový rámec, ve kterém chce uživatel zobrazovat. Napřample, můžeme nastavit časový rámec na 0 sekund až 500 ns, zobrazí se signály pouze po tuto dobu.
  14. Znovu načíst: Znovu načíst je stisknuto vždy, když dojde ke změně zobrazeného signálu. Znovu načte a zobrazí signál podle nových parametrů. Napřample, po změně časového rámce signálu musíme znovu načíst signál, aby se signál zobrazil v novém nastaveném časovém rámci.

Možnosti nabídky

Z levého horního rohu softwaru GTKWave má uživatel přístup k možnostem nabídky kliknutím na tři svislé čáry (viz obrázek 11). V možnostech nabídky může uživatel najít následující možnosti:
Možnosti nabídky

File

The File podnabídka obsahuje různé položky související s přístupem files, import-export VCD files, tisk a čtení/psaní files a končí.

Upravit

Podnabídka Edit se používá k provádění různých pomocných funkcí, jako je změna reprezentace dat hodnot v podokně wave. Pomocí voleb v podnabídce Upravit může uživatel změnit datový formát signálů, přeskupit je, posouvat, ořezávat, zvýraznit, seskupovat signály, komentovat signály, měnit barvu signálů atd.

Hledat

Podnabídka Hledat se používá k vyhledávání síťových názvů a hodnot. Pomáhá provádět funkce na různých úrovních hierarchie signálů a instancí na VCD file.

Čas

Podnabídka času obsahuje nadmnožinu funkcí prováděných tlačítky Navigace a Stavový panel.
Umožňuje jednoduché funkce související s časem, jako je zoomování, přesun do určitého časového bodu, posun signálu v určitém směru atd.

Marker

Podnabídka značky se používá k provádění různých manipulací se značkou a také k ovládání rolování mimo obrazovku.
Umožňuje funkci přidávání mnoha značek do okna signálu. Je povoleno maximálně 26 značek jmen a časy pro všechny se musí lišit.

a. Chcete-li přidat značky v okně signálu
Klikněte levým tlačítkem na požadované místo, kam chcete značku umístit, a stiskněte ALT + N. Tím se na požadované místo umístí pojmenovaná značka (A, B, C atd.). Uživatel v tom může pokračovat pro 26 různých časových míst.
Chcete-li porovnat hodnotu času na všech značkách míst, vyberte Nabídka → Značky → Zobrazit data změny značek.
Tím se otevře okno s časovou hodnotou u každé značky. Uživatel si může ručně poznamenat hodnotu času na každé umístěné značce a odečíst ji, aby vypočítal časový rozdíl mezi 2 značkami.
b. Chcete-li odstranit značku v okně signálu

Uživatel může přejít do Menu → Markers → Collect Named Marker. Tím se odstraní posledně jmenovaná značka umístěná v okně signálu. Uživatel může odstranit všechny pojmenované značky tak, že přejde do Menu → Markers → Collect All Named Marker (Obrázek 12).
Možnosti nabídky

Na obrázku 13 můžeme vidět, jak se změnily barvy signálu. Prázdný signál přidaný do signálního okna můžete pozorovat také s komentářem – Prázdný signál.
Všimněte si také přítomnosti 6 pojmenovaných markerů (A – E) a výpočtu časové hodnoty mezi těmito markery v ps.
Možnosti nabídky

View

The View submenu se používá k ovládání různých atributů zabývajících se grafickým vykreslováním stavových položek i hodnot v podokně signálu. Z této nabídky můžete převést okno signálu na černobílé nebo barevné. The View submenu také umožňuje změnit časový rozměr v rozsahu od sekund (sekundy) po fikosekundy (fs). Tuto možnost může uživatel najít View → Měřítko na časovou dimenzi → fs.

Pomoc

Podnabídka nápovědy obsahuje možnosti pro povolení on-line nápovědy a také zobrazení informací o verzi programu.

Závěr

Tento dokument byl vytvořen, aby pomohl uživateli při úspěšné simulaci jejich návrhu a ověření funkčnosti opravou návrhu potřebného testovacího stolu a použitím Icarus Verilog spolu s GTKWave k zobrazení křivek a pozorování výsledků.

Historie revizí

Revize Datum Popis
1.00 20. května 2024 Počáteční vydání.

R19US0011EU0100 Rev.1.0
20. května 2024
© 2024 Renesas Electronics
Logo

Dokumenty / zdroje

Softwarová simulace RENESAS ForgeFPGA [pdfUživatelská příručka
REN_r19us0011eu0100, Simulace softwaru ForgeFPGA, Software ForgeFPGA, ForgeFPGA, Simulace ForgeFPGA, Softwarová simulace, Simulace, Software

Reference

Zanechte komentář

Vaše emailová adresa nebude zveřejněna. Povinná pole jsou označena *