Verilog - Verilog

Verilog
Paradigma Strukturované
Poprvé se objevil 1984  ( 1984 )
Stabilní uvolnění
IEEE 1364-2005 / 9. listopadu 2005 ; před 15 lety  ( 09.11.2005 )
Psací disciplína Statický , slabý
Přípony názvu souboru .v, .vh
Dialekty
Verilog-AMS
Ovlivněno
Pascal , Ada , C , Fortran
Ovlivněno
SystemVerilog

Verilog , standardizovaný jako IEEE 1364 , je jazyk pro popis hardwaru (HDL) používaný k modelování elektronických systémů . To je nejvíce běžně používané v designu a ověřování číslicových obvodů na úrovni registr pro přenos z abstrakce . Používá se také při ověřování analogových obvodů a obvodů se smíšeným signálem , jakož i při navrhování genetických obvodů . V roce 2009 byl standard Verilog (IEEE 1364-2005) sloučen do standardu SystemVerilog , čímž byl vytvořen IEEE Standard 1800-2009. Od té doby je Verilog oficiálně součástí jazyka SystemVerilog. Aktuální verze je IEEE standard 1800-2017.

Přehled

Jazyky pro popis hardwaru, jako je Verilog, jsou podobné softwarovým programovacím jazykům, protože obsahují způsoby, jak popsat dobu šíření a sílu signálu (citlivost). Existují dva typy operátorů přiřazení ; blokující přiřazení (=) a neblokující (<=) přiřazení. Neblokující přiřazení umožňuje návrhářům popsat aktualizaci stavového stroje bez nutnosti deklarovat a používat dočasné proměnné úložiště . Jelikož tyto koncepty jsou součástí jazykové sémantiky Verilogu, návrháři mohli rychle psát popisy velkých obvodů v relativně kompaktní a stručné podobě. V době uvedení Verilogu (1984) představoval Verilog ohromné ​​zvýšení produktivity pro návrháře obvodů, kteří již k dokumentaci a simulaci elektronických obvodů používali software pro grafické schematické snímání a speciálně napsané softwarové programy .

Konstruktéři Verilogu chtěli jazyk se syntaxí podobný programovacímu jazyku C , který byl již široce používán při vývoji softwarového inženýrství . Stejně jako C i Verilog rozlišuje velká a malá písmena a má základní preprocesor (i když méně propracovaný než ANSI C / C ++). Jeho klíčová slova toku řízení (if / else, for, while, case atd.) Jsou ekvivalentní a jeho priorita operátorů je kompatibilní s C. Syntaktické rozdíly zahrnují: požadované bitové šířky pro deklarace proměnných, vymezení procedurálních bloků (použití Verilogu začínají / end místo složených závorek {}) a mnoho dalších drobných rozdílů. Verilog vyžaduje, aby proměnné dostaly určitou velikost. V C jsou tyto velikosti odvozeny z „typu“ proměnné (například celočíselný typ může být 8 bitů).

Návrh Verilog se skládá z hierarchie modulů . Moduly zapouzdřují hierarchii návrhu a komunikují s ostatními moduly prostřednictvím sady deklarovaných vstupů, výstupů a obousměrných portů . Modul může interně obsahovat libovolnou kombinaci následujících položek: deklarace čisté / proměnné (drát, reg, celé číslo atd.), Souběžné a sekvenční bloky příkazů a instance dalších modulů (podhierarchie). Sekvenční příkazy jsou umístěny uvnitř bloku začátku / konce a jsou prováděny v pořadí v bloku. Samotné bloky se však provádějí souběžně, což z Verilogu dělá jazyk toku dat .

Koncept „drátu“ Verilogu se skládá jak z hodnot signálu (4-stavový: „1, 0, plovoucí, nedefinovaný“), tak ze síly signálu (silný, slabý atd.). Tento systém umožňuje abstraktní modelování sdílených signálních vedení, kde více zdrojů pohání společnou síť. Pokud má vodič více ovladačů, jeho hodnota (čitelná) je vyřešena funkcí zdrojových ovladačů a jejich silných stránek.

Podmnožinu příkazů v jazyce Verilog lze syntetizovat . Moduly Verilog, které odpovídají syntetizovatelnému stylu kódování, známému jako RTL ( úroveň přenosu registru ), lze fyzicky realizovat syntézním softwarem. Software pro syntézu algoritmicky transformuje (abstraktní) zdroj Verilog na netlist , logicky ekvivalentní popis skládající se pouze z elementárních logických primitiv (AND, OR, NOT, klopných obvodů atd.), Které jsou k dispozici v konkrétní technologii FPGA nebo VLSI . Další manipulace se seznamem netlistů nakonec vedou k plánu výroby obvodů (jako je například fotografická maska ​​nastavená pro ASIC nebo bitový soubor pro FPGA ).

Dějiny

Začátek

Verilog vytvořili Prabhu Goel , Phil Moorby , Chi-Lai Huang a Douglas Warmke mezi koncem roku 1983 a začátkem roku 1984. Chi-Lai Huang dříve pracoval pro popis hardwaru LALSD, jazyk vyvinutý profesorem SYH Su, pro jeho doktorskou práci . Držitelem práv pro tento proces, v té době proprietární, byl „Automated Integrated Design Systems“ (později přejmenovaný na Gateway Design Automation v roce 1985). Gateway Design Automation zakoupila společnost Cadence Design Systems v roce 1990. Cadence má nyní úplná vlastnická práva k Gateway Verilog a Verilog-XL, HDL-simulátoru, který by se stal de facto standardem ( logických simulátorů Verilog ) pro příští desetiletí. Verilog měl původně sloužit pouze k popisu a umožnění simulace; automatizovaná syntéza podmnožin jazyka na fyzicky realizovatelné struktury (brány atd.) byla vyvinuta poté, co jazyk dosáhl širokého využití.

Verilog je portrétem slov „ověření“ a „logika“.

Verilog-95

S rostoucím úspěchem VHDL v té době se společnost Cadence rozhodla zpřístupnit jazyk pro otevřenou standardizaci . Cadence převedla Verilog do veřejné sféry v rámci organizace Open Verilog International (OVI) (nyní známá jako Accellera ). Verilog byl později předložen IEEE a stal se IEEE Standardem 1364-1995, běžně označovaným jako Verilog-95.

Ve stejném časovém rámci Cadence iniciovalo vytvoření Verilog-A, aby za svým analogovým simulátorem Spectre postavila podporu standardů . Verilog-A nikdy nebyl zamýšlen jako samostatný jazyk a je podmnožinou Verilog-AMS, která zahrnovala Verilog-95.

Verilog 2001

Rozšíření Verilog-95 byla odeslána zpět IEEE, aby pokryla nedostatky, které uživatelé našli v původním standardu Verilog. Tato rozšíření se stala standardem IEEE 1364-2001 známým jako Verilog-2001.

Verilog-2001 je významný upgrade z Verilog-95. Nejprve přidává explicitní podporu pro (2 doplněk) podepsané sítě a proměnné. Dříve museli autoři kódu provádět podepsané operace pomocí nepříjemných manipulací na úrovni bitů (například vynášecí bit jednoduchého 8bitového přidání vyžadoval explicitní popis booleovské algebry k určení jeho správné hodnoty). Stejnou funkci v rámci Verilog-2001 může stručněji popsat jeden z předdefinovaných operátorů: +, -, /, *, >>>. Konstrukce generate / endgenerate (podobná generování / endgenerate VHDL) umožňuje Verilog-2001 řídit instanci instance a příkazu prostřednictvím běžných operátorů rozhodování (case / if / else). Pomocí generování / endgenerace může Verilog-2001 vytvořit instanci řady instancí s kontrolou nad konektivitou jednotlivých instancí. Soubor I / O byl vylepšen několika novými systémovými úkoly. A nakonec bylo zavedeno několik doplňků syntaxe, aby se zlepšila čitelnost kódu (např. Vždy @ *, přepsání pojmenovaného parametru, deklarace funkce / úlohy / modulu ve stylu C).

Verilog-2001 je verze Verilogu podporovaná většinou komerčních softwarových balíků EDA .

Verilog 2005

Nesmí být zaměňována s SystemVerilog , Verilog 2005 ( IEEE Standard 1364-2005) se skládá z drobných oprav, vysvětlení specifikace a několik nových jazykových funkcí (například klíčové slovo uwire).

Samostatná část standardu Verilog, Verilog-AMS , se pokouší integrovat modelování analogového a smíšeného signálu s tradičním Verilogem.

SystemVerilog

Příchod jazyků pro ověřování hardwaru, jako je OpenVera a jazyk Verisity, podpořil vývoj Superlogu společností Co-Design Automation Inc (získanou společností Synopsys ). Základy Superlog a Vera byly věnovány společnosti Accellera , která se později stala standardem IEEE P1800-2005: SystemVerilog.

SystemVerilog je nadmnožinou Verilog-2005 s mnoha novými funkcemi a schopnostmi, které pomáhají při ověřování a modelování designu. Od roku 2009 byly jazykové standardy SystemVerilog a Verilog sloučeny do SystemVerilog 2009 (IEEE Standard 1800-2009). Aktuální verze je IEEE standard 1800-2017.

Příklad

Následuje jednoduchý příklad dvou žabek :

module toplevel(clock,reset);
  input clock;
  input reset;

  reg flop1;
  reg flop2;

  always @ (posedge reset or posedge clock)
    if (reset)
      begin
        flop1 <= 0;
        flop2 <= 1;
      end
    else
      begin
        flop1 <= flop2;
        flop2 <= flop1;
      end
endmodule

<= Operátor v Verilog je dalším aspektem jeho bytí popis hardware jazyk na rozdíl od normální procedurálním jazyku. Toto se označuje jako „neblokující“ úkol. Jeho akce se zaregistruje až po provedení vždy bloku. To znamená, že pořadí přiřazení je irelevantní a přinese stejný výsledek: flop1 a flop2 budou vyměňovat hodnoty každé hodiny.

Druhý operátor přiřazení = se označuje jako blokující přiřazení. Při použití = přiřazení se pro účely logiky cílová proměnná okamžitě aktualizuje. Ve výše uvedeném příkladu, kdyby příkazy používaly = operátor blokování místo <= , flop1 a flop2 by nebyly vyměněny. Místo toho, stejně jako v tradičním programování, by překladač pochopil, že jednoduše nastaví flop1 na flop2 (a následně bude ignorovat redundantní logiku, aby nastavil flop2 na flop1).

Následuje příklad počítadla obvodu:

module Div20x (rst, clk, cet, cep, count, tc);
// TITLE 'Divide-by-20 Counter with enables'
// enable CEP is a clock enable only
// enable CET is a clock enable and
// enables the TC output
// a counter using the Verilog language

parameter size = 5;
parameter length = 20;

input rst; // These inputs/outputs represent
input clk; // connections to the module.
input cet;
input cep;

output [size-1:0] count;
output tc;

reg [size-1:0] count; // Signals assigned
                      // within an always
                      // (or initial)block
                      // must be of type reg

wire tc; // Other signals are of type wire

// The always statement below is a parallel
// execution statement that
// executes any time the signals
// rst or clk transition from low to high

always @ (posedge clk or posedge rst)
  if (rst) // This causes reset of the cntr
    count <= {size{1'b0}};
  else
  if (cet && cep) // Enables both  true
    begin
      if (count == length-1)
        count <= {size{1'b0}};
      else
        count <= count + 1'b1;
    end

// the value of tc is continuously assigned
// the value of the expression
assign tc = (cet && (count == length-1));

endmodule

Příklad zpoždění:

...
reg a, b, c, d;
wire e;
...
always @(b or e)
  begin
    a = b & e;
    b = a | b;
    #5 c = b;
    d = #6 c ^ e;
  end

Výše uvedená klauzule always ilustruje jiný typ metody použití, tj. Provádí se vždy, když se kterákoli ze entit v seznamu ( b nebo e ) změní. Když jedna z těchto změn, okamžitě přiřazen novou hodnotu, a vzhledem k blokování úkolu, b je přiřazen novou hodnotu později (s přihlédnutím novou hodnotu ). Po zpoždění 5 časových jednotek je c přiřazena hodnota b a hodnota c ^ e je zastrčena v neviditelném úložišti. Potom po 6 dalších časových jednotkách je d přiřazena hodnota, která byla zastrčena.

Signály, které jsou generovány v rámci procesu (počáteční nebo vždy blokovaný), musí být typu reg . Signály, které jsou poháněny zvenčí procesu, musí být typu drátu . Klíčové slovo reg nemusí nutně znamenat hardwarový registr.

Definice konstant

Definice konstant ve Verilogu podporuje přidání parametru width. Základní syntaxe je:

< Šířka v bitech > '< základní písmeno > < číslo >

Příklady:

  • 12'h123 - hexadecimální 123 (s použitím 12 bitů)
  • 20'd44 - desetinné číslo 44 (použití 20 bitů - 0 rozšíření je automatické)
  • 4'b1010 - binární 1010 (pomocí 4 bitů)
  • 6'o77 - Octal 77 (pomocí 6 bitů)

Syntetizovatelné konstrukty

Verilog je široce považován za HDL (Hardware Description Language). Ve Verilogu existuje několik příkazů, které nemají v reálném hardwaru žádný analog, např. $ Display. Většinu jazyka proto nelze použít k popisu hardwaru. Zdá se, že to znamená, že samotná definice jazyka Verilog obecně musí být správně přeformulována. Zde uvedené příklady jsou však klasickou (a omezenou) podmnožinou jazyka, který má přímé mapování na skutečné brány.

// Mux examples — Three ways to do the same thing.

// The first example uses continuous assignment
wire out;
assign out = sel ? a : b;

// the second example uses a procedure
// to accomplish the same thing.

reg out;
always @(a or b or sel)
  begin
    case(sel)
      1'b0: out = b;
      1'b1: out = a;
    endcase
  end

// Finally — you can use if/else in a
// procedural structure.
reg out;
always @(a or b or sel)
  if (sel)
    out = a;
  else
    out = b;

Další zajímavou strukturou je průhledná západka ; předá vstup na výstup, když je signál brány nastaven na „pass-through“, a zachytí vstup a uloží jej při přechodu signálu brány na „hold“. Výstup je stabilní bez ohledu na vstupní signál, zatímco je brána nastavena na „hold“. V níže uvedeném příkladu by úroveň „pass-through“ brány byla, když by hodnota klauze if byla pravdivá, tj. Gate = 1. Čte se „pokud je brána true, din je přiváděn do latch_out nepřetržitě.“ Jakmile je klauzule if nepravdivá, poslední hodnota v latch_out zůstane a je nezávislá na hodnotě din.

// Transparent latch example

reg latch_out;
always @(gate or din)
  if(gate)
    latch_out = din; // Pass through state
    // Note that the else isn't required here. The variable
    // latch_out will follow the value of din while gate is
    // high. When gate goes low, latch_out will remain constant.

Flip-flop je dalším významným šablona; ve Verilogu je D-flop nejjednodušší a lze jej modelovat jako:

reg q;
always @(posedge clk)
  q <= d;

V tomto příkladu je důležité si všimnout použití neblokujícího přiřazení. Základním pravidlem je použití <=, když v klauzuli always existuje výraz posedge nebo negedge .

Varianta D-flopu je varianta s asynchronním resetem; existuje konvence, že stav reset bude v klauzuli if jako první v příkazu.

reg q;
always @(posedge clk or posedge reset)
  if(reset)
    q <= 0;
  else
    q <= d;

Další varianta zahrnuje jak asynchronní reset, tak podmínku asynchronní sady; opět vstupuje do hry konvence, tj. za resetovacím termínem následuje nastavený termín.

reg q;
always @(posedge clk or posedge reset or posedge set)
  if(reset)
    q <= 0;
  else
  if(set)
    q <= 1;
  else
    q <= d;

Poznámka: Pokud se tento model používá k modelování klopného obvodu Set / Reset, mohou vzniknout chyby simulace. Zvažte následující testovací posloupnost událostí. 1) reset je vysoký 2) clk jde vysoko 3) set jde vysoko 4) clk zase vysoko 5) reset jde nízko následovaný 6) set jde nízko. Nepředpokládejte žádné nastavení a pozastavte porušení.

V tomto příkladu se příkaz always @ nejprve provede, když dojde k náběžné hraně resetu, která by q umístila na hodnotu 0. Příště, kdy by se vždy provedl blok, by byla náběžná hrana clk, která by opět udržovala q na hodnotě 0. Blok vždy se provede, když je nastavena vysoká hodnota, protože protože reset je vysoká, q zůstane na 0. Tato podmínka může nebo nemusí být správná v závislosti na skutečném klopném obvodu. To však není hlavní problém tohoto modelu. Všimněte si, že když se reset sníží, tato sada je stále vysoká. Ve skutečném klopném obvodu to způsobí, že výstup přejde na 1. V tomto modelu se to však nestane, protože blok vždy je spuštěn vzestupnými hranami úrovní set a reset - ne. Pro nastavení / resetování klopných obvodů může být nutný jiný přístup.

Konečná základní varianta je ta, která implementuje D-flop s multiplexem napájejícím jeho vstup. Multiplexer má vstup d a zpětnou vazbu od samotného flopu. To umožňuje funkci hradlového zatížení.

// Basic structure with an EXPLICIT feedback path
always @(posedge clk)
  if(gate)
    q <= d;
  else
    q <= q; // explicit feedback path

// The more common structure ASSUMES the feedback is present
// This is a safe assumption since this is how the
// hardware compiler will interpret it. This structure
// looks much like a latch. The differences are the
// '''@(posedge clk)''' and the non-blocking '''<='''
//
always @(posedge clk)
  if(gate)
    q <= d; // the "else" mux is "implied"

Upozorňujeme, že v tomto popisu nejsou uvedeny žádné „počáteční“ bloky. U této struktury dochází k rozdělení nástrojů syntézy FPGA a ASIC. Nástroje FPGA umožňují počáteční bloky, kde jsou stanoveny hodnoty reg namísto použití signálu „reset“. Nástroje syntézy ASIC takové prohlášení nepodporují. Důvodem je, že počáteční stav FPGA je něco, co se stáhne do paměťových tabulek FPGA. ASIC je skutečná implementace hardwaru.

Počáteční a vždy

Existují dva samostatné způsoby deklarování procesu Verilog. Toto jsou vždy a počáteční klíčová slova. Vždy klíčové slovo označuje volně běžící proces. Počáteční klíčové slovo označuje proces, spustí právě jednou. Oba konstrukty začínají provádět v čase simulátoru 0 a oba se provádějí až do konce bloku. Jakmile vždy blok dosáhne svého konce, je znovu naplánován (znovu). Je běžnou mylnou představou, že počáteční blok bude spuštěn před vždy blokovaným. Ve skutečnosti je lepší uvažovat o počátečním -bloku jako o zvláštním případě vždy -bloku, který končí po jeho prvním dokončení.

//Examples:
initial
  begin
    a = 1; // Assign a value to reg a at time 0
    #1; // Wait 1 time unit
    b = a; // Assign the value of reg a to reg b
  end

always @(a or b) // Any time a or b CHANGE, run the process
begin
  if (a)
    c = b;
  else
    d = ~b;
end // Done with this block, now return to the top (i.e. the @ event-control)

always @(posedge a)// Run whenever reg a has a low to high change
  a <= b;

Jedná se o klasické použití těchto dvou klíčových slov, ale existují dvě významná další použití. Nejběžnějším z nich je vždy klíčové slovo bez seznamu citlivosti @ (...) . Je možné použít vždy, jak je znázorněno níže:

always
  begin // Always begins executing at time 0 and NEVER stops
    clk = 0; // Set clk to 0
    #1; // Wait for 1 time unit
    clk = 1; // Set clk to 1
    #1; // Wait 1 time unit
  end // Keeps executing — so continue back at the top of the begin

Vždy klíčového slova působí podobně jako v jazyce C konstruktu while (1) {..} v tom smyslu, že bude provádět navždy.

Další zajímavou výjimkou je použití počátečního klíčového slova s ​​přidáním klíčového slova forever .

Níže uvedený příklad je funkčně shodný s vždy příkladu výše.

initial forever // Start at time 0 and repeat the begin/end forever
  begin
    clk = 0; // Set clk to 0
    #1; // Wait for 1 time unit
    clk = 1; // Set clk to 1
    #1; // Wait 1 time unit
  end

Vidlice / spojení

Vidlice / připojit dvojici používají Verilog k vytvoření paralelních procesů. Všechny příkazy (nebo bloky) mezi párem fork / join začínají vykonávat současně, když tok výkonu zasáhne vidličku . Provádění pokračuje po spojení po dokončení nejdelšího spuštěného příkazu nebo bloku mezi vidličkou a spojením .

initial
  fork
    $write("A"); // Print char A
    $write("B"); // Print char B
    begin
      #1; // Wait 1 time unit
      $write("C"); // Print char C
    end
  join

Způsob, jakým je psáno výše, je možné vytisknout sekvence „ABC“ nebo „BAC“. Pořadí simulace mezi prvním $ write a druhým $ write závisí na implementaci simulátoru a může být cíleně náhodně simulátorem. To umožňuje simulaci obsahovat jak náhodné rasové podmínky, tak i úmyslné nedeterministické chování.

Všimněte si, že VHDL nemůže dynamicky plodit více procesů, jako je Verilog.

Podmínky závodu

Pořadí provedení není ve Verilogu vždy zaručeno. To lze nejlépe ilustrovat na klasickém příkladu. Zvažte fragment kódu níže:

initial
  a = 0;

initial
  b = a;

initial
  begin
    #1;
    $display("Value a=%d Value of b=%d",a,b);
  end

Co se vytiskne pro hodnoty aab? V závislosti na pořadí provádění počátečních bloků to může být nula a nula, nebo střídavě nula a nějaká jiná libovolná neinicializovaná hodnota. Příkaz $ display se provede vždy po dokončení obou bloků přiřazení, kvůli zpoždění # 1.

Operátoři

Poznámka: Tyto subjekty jsou nejsou uvedeny v pořadí.

Typ operátora Symboly operátora Operace provedena
bitový ~ Bitový NOT (doplněk 1)
& Bitové AND
| Bitové NEBO
^ Bitový XOR
~ ^ nebo ^ ~ Bitový XNOR
Logický ! NE
&& A
|| NEBO
Snížení & Redukce A
~ & Redukce NAND
| Snížení NEBO
~ | Redukce NOR
^ Redukce XOR
~ ^ nebo ^ ~ Redukce XNOR
Aritmetický + Přidání
- Odčítání
- Doplněk 2
* Násobení
/ Divize
** Exponentiace (* Verilog-2001)
Relační > Větší než
< Méně než
> = Větší nebo rovno
<= Méně než nebo rovno
== Logická rovnost (bitová hodnota 1'bX je z porovnání odstraněna)
! = Logická nerovnost (bitová hodnota 1'bX je z porovnání odstraněna)
=== 4stavová logická rovnost (bitová hodnota 1'bX je brána jako doslovný)
! == 4stavová logická nerovnost (bitová hodnota 1'bX je brána jako doslovný)
Posun >> Logický posun doprava
<< Logický posun vlevo
>>> Aritmetický pravý posun (* Verilog-2001)
<<< Aritmetický posun vlevo (* Verilog-2001)
Zřetězení {,} Zřetězení
Replikace {n {m}} Replikujte hodnotu m nkrát
Podmiňovací způsob ? : Podmiňovací způsob

Logika se čtyřmi hodnotami

Standard IEEE 1364 definuje čtyřhodnotovou logiku se čtyřmi stavy: 0, 1, Z ( vysoká impedance ) a X (neznámá logická hodnota). Pro konkurenční VHDL existuje speciální standard pro vícehodnotovou logiku jako IEEE 1164 s devíti úrovněmi.

Úkoly systému

K dispozici jsou systémové úlohy pro zpracování jednoduchých vstupů a výstupů a různých návrhových měřicích funkcí během simulace. Všechny systémové úlohy mají předponu $, která je odlišuje od uživatelských úkolů a funkcí. Tato část představuje krátký seznam nejčastěji používaných úkolů. V žádném případě nejde o úplný seznam.

  • $ display - Tisk na obrazovku, po které následuje automatický nový řádek.
  • $ write - Tisk na obrazovku pro řádek bez nového řádku.
  • $ swrite - Tisk na variabilní řádek bez nového řádku.
  • $ sscanf - Číst z proměnné řetězec specifikovaný formátem. (* Verilog-2001)
  • $ fopen - Otevřít popisovač souboru (čtení nebo zápis)
  • $ fdisplay - Vytiskne řádek ze souboru následovaný automatickým novým řádkem.
  • $ fwrite - Tisk do souboru řádku bez nového řádku.
  • $ fscanf - Číst ze souboru řetězec specifikovaný formátem. (* Verilog-2001)
  • $ fclose - Zavřete a uvolněte otevřený popisovač souboru.
  • $ readmemh - načte obsah hexadecimálních souborů do paměťového pole.
  • $ readmemb - načte obsah binárního souboru do paměťového pole.
  • $ monitor - Vytiskne všechny uvedené proměnné, když dojde ke změně hodnoty.
  • $ time - hodnota aktuálního času simulace.
  • $ dumpfile - deklaruje název výstupního souboru formátu VCD ( Value Change Dump ).
  • $ dumpvars - Zapne a vypíše proměnné.
  • $ dumpports - Zapne a vypíše proměnné ve formátu Extended-VCD.
  • $ random - Vrátí náhodnou hodnotu.

Programovací jazykové rozhraní (PLI)

PLI poskytuje programátorovi mechanismus pro přenos řízení z Verilogu na programovou funkci napsanou v jazyce C. Je oficiálně zastaralý IEEE Std 1364-2005 ve prospěch novějšího Verilog procedurálního rozhraní , které zcela nahrazuje PLI.

PLI (nyní VPI) umožňuje Verilog spolupracovat s dalšími programy napsané v jazyce C, jako jsou testovací postroje , instrukční sada simulátory jednoho mikroprocesoru , debuggery , a tak dále. Například poskytuje funkce C tf_putlongp() a tf_getlongp() které se používají k zápisu a čtení argumentů aktuální úlohy nebo funkce Verilog.

Simulační software

Informace o simulátorech Verilog najdete v seznamu simulátorů Verilog .

Viz také

Dodatečný materiál

Podobné jazyky

Generátory Verilog

Reference

Poznámky

externí odkazy

Vývoj standardů

Jazyková rozšíření

  • Verilog AUTOs - meta-komentář s otevřeným zdrojovým kódem používaný průmyslovou IP ke zjednodušení údržby kódu Verilog.