SystemVerilog - SystemVerilog

SystemVerilog
SystemVerilog logo.png
Logo SystemVerilog
Paradigma Strukturovaný (design)
Objektově orientovaný (ověření)
Navrhl Synopsys , později IEEE
Poprvé se objevil 2002 ; Před 19 lety ( 2002 )
Stabilní uvolnění
IEEE 1800-2017 / 22. února 2018 ; před 3 lety ( 2018-02-22 )
Psací disciplína Statický , slabý
Přípony názvu souboru .sv, .svh
Ovlivněno
Design: Verilog , VHDL , C ++ , Ověření: OpenVera , Java

SystemVerilog , standardizovaný jako IEEE 1800 , je jazyk popisu hardwaru a ověřování hardwaru používaný k modelování, navrhování , simulaci , testování a implementaci elektronických systémů. SystemVerilog je založen na Verilogu a některých rozšířeních a od roku 2008 je Verilog nyní součástí stejného standardu IEEE . Běžně se používá v průmyslu polovodičů a elektronického designu jako vývoj Verilogu.

Dějiny

SystemVerilog začal s darováním jazyka Superlog společnosti Accellera v roce 2002 startupovou společností Co-Design Automation. Převážná část ověřovacích funkcí je založena na jazyce OpenVera darovaném společností Synopsys . V roce 2005 byl SystemVerilog přijat jako IEEE Standard 1800-2005. V roce 2009 byl standard sloučen se základním standardem Verilog (IEEE 1364-2005), čímž vznikl standard IEEE 1800-2009. Aktuální verze je IEEE standard 1800-2017.

Sada funkcí SystemVerilog může být rozdělena do dvou odlišných rolí:

  1. SystemVerilog for design -transfer level (RTL) design is an extension of Verilog-2005 ; všechny funkce tohoto jazyka jsou k dispozici v SystemVerilog. Proto je Verilog podmnožinou SystemVerilog.
  2. SystemVerilog pro ověření používá rozsáhlé objektově orientované programovací techniky a je více spojen s Java než Verilog. Tyto konstrukty obecně nejsou syntetizovatelné.

Zbývající část tohoto článku pojednává o vlastnostech SystemVerilog, které nejsou k dispozici ve Verilog-2005 .

Designové vlastnosti

Životnost dat

V SystemVerilog jsou specifikovány dva typy životnosti dat: statické a automatické . Automatické proměnné se vytvářejí v okamžiku, kdy provádění programu přijde do rozsahu proměnné. Statické proměnné se vytvářejí na začátku provádění programu a zachovávají stejnou hodnotu po celou dobu životnosti celého programu, pokud během provádění není přiřazena nová hodnota.

Jakákoli proměnná, která je deklarována uvnitř úlohy nebo funkce bez zadání typu, bude považována za automatickou. Chcete-li určit, že proměnná je statická, vložte do deklarace klíčové slovostatic“ před typ, např. „ “. Klíčové slovo „ “ se používá stejným způsobem. static int x;automatic

Nové datové typy

Vylepšené typy proměnných přidávají nové možnosti typu „reg“ společnosti Verilog:

logic [31:0] my_var;

Verilog-1995 a -2001 omezují proměnné reg na příkazy chování, jako je kód RTL . SystemVerilog rozšiřuje typ reg, takže jej lze řídit jediným ovladačem, jako je brána nebo modul. SystemVerilog pojmenuje tento typ „logika“, aby uživatelům připomněl, že má tuto zvláštní funkci a nejedná se o hardwarový registr. Názvy „logika“ a „reg“ jsou zaměnitelné. Signál s více než jedním ovladačem (například třístavový buffer pro univerzální vstup / výstup ) musí být deklarován jako čistý typ, například „drát“, aby mohl SystemVerilog vyřešit konečnou hodnotu.

Vícerozměrná zabalená pole sjednocují a rozšiřují představu Verilogu o „registrech“ a „pamětí“:

logic [1:0][2:0] my_pack[32];

Klasický Verilog povolil deklarovat pouze jednu dimenzi nalevo od názvu proměnné. SystemVerilog umožňuje libovolný počet takových „zabalených“ rozměrů. Proměnná typu sbaleného pole mapuje 1: 1 na celočíselnou aritmetickou veličinu. Ve výše uvedeném příkladu my_packmůže být každý prvek použit ve výrazech jako šestibitové celé číslo. Rozměry napravo od jména (v tomto případě 32) se označují jako „rozbalené“ rozměry. Stejně jako ve Verilogu-2001 je povolen libovolný počet rozbalených rozměrů.

Vyčtené datové typy (enums) umožňují číselným veličinám přiřadit smysluplné názvy. Proměnné deklarované jako výčtový typ nelze bez přetypování přiřadit k proměnným jiného výčtového typu. To neplatí pro parametry, které byly upřednostňovanou technikou implementace pro vyjmenované veličiny ve Verilogu-2005:

typedef enum logic [2:0] {
   RED, GREEN, BLUE, CYAN, MAGENTA, YELLOW
} color_t;

color_t   my_color = GREEN;
initial $display("The color is %s", my_color.name());

Jak je uvedeno výše, návrhář může určit základní aritmetický typ ( logic [2:0]v tomto případě), který se používá k reprezentaci hodnoty výčtu. Zde lze použít meta-hodnoty X a Z, které mohou představovat nelegální stavy. Integrovaná funkce name()vrací řetězec ASCII pro aktuální výčtovou hodnotu, což je užitečné při ověřování a testování.

Nové typy celočíselné : SystemVerilog definuje byte, shortint, inta longintjako dvoustavové podepsané integrální typy s 8, 16, 32, a 64 bitů, resp. bitTyp je typ dvoustátní proměnlivou šířkou, která funguje podobně jako logic. Dvoustavovým typům chybí metavalu X a Z klasického Verilogu; práce s těmito typy může vést k rychlejší simulaci.

Struktury a odbory pracují podobně jako to dělají v C programovací jazyk . Vylepšení SystemVerilog zahrnují zabalený atribut a tagovaný atribut. taggedAtribut umožňuje runtime sledování, jehož člen (y) z unie jsou v současné době v provozu. packedAtribut způsobí, že struktura nebo unie pro mapování 1: 1 na plněnou pole bitů. Obsahstructdatových typů zabírá souvislý blok paměti bez mezer, podobně jako bitová pole v C a C ++:

typedef struct packed {
    bit [10:0]  expo;
    bit         sign;
    bit [51:0]  mant;
} FP;

FP     zero = 64'b0;

Jak je znázorněno v tomto příkladu, SystemVerilog také podporuje typedefs , jako v C a C ++.

Procedurální bloky

SystemVerilog představuje tři nové procedurální bloky určené k modelování hardwaru : always_comb(pro modelování kombinační logiky ), always_ff(pro klopné obvody ) a always_latch(pro západky ). Zatímco Verilog použil alwaysk modelování různých typů hardwarových struktur jeden univerzální blok, každý z nových bloků SystemVerilog je určen k modelování konkrétního typu hardwaru zavedením sémantických omezení, aby se zajistilo, že hardware popsaný v blocích odpovídá zamýšlenému použití model. Kompilátor HDL nebo ověřovací program může podniknout další kroky, aby zajistil, že dojde pouze k zamýšlenému typu chování.

always_combBlokové modely kombinační logiky . Simulátor odvozuje ze seznamu citlivosti všechny proměnné z obsažených příkazů:

always_comb begin
    tmp = b * b - 4 * a * c;
    no_root = (tmp < 0);
end

An always_latchmodely blokové úrovňově citlivého západky. Seznam citlivosti je opět odvozen z kódu:

always_latch
    if (en) q <= d;

always_ffBlokové modely synchronní logika (zejména okraj citlivé sekvenční logika ):

always_ff @(posedge clk)
    count <= count + 1;

Nástroje pro automatizaci elektronického návrhu (EDA) mohou ověřit záměr návrhu kontrolou, zda hardwarový model neporušuje žádnou sémantiku využití bloku. Například nové bloky omezují přiřazení k proměnné povolením pouze jednoho zdroje, zatímco alwaysblok Verilogu povolil přiřazení z více procedurálních zdrojů.

Rozhraní

U malých návrhů port Verilog kompaktně popisuje konektivitu modulu s okolním prostředím. Ale hlavní bloky ve velké designové hierarchii mají obvykle počty portů v tisících. SystemVerilog zavádí koncept rozhraní jak ke snížení redundance deklarací názvů portů mezi připojenými moduly, tak i skupinových a abstraktních souvisejících signálů do uživatelem deklarovaného balíčku. Dalším konceptem je modport, který ukazuje směr logických spojení.

Příklad:

interface intf;
  logic a;
  logic b;
  modport in (input a, output b);
  modport out (input b, output a); 
endinterface

module top;
  intf i ();
  u_a m1 (.i1(i.in));
  u_b m2 (.i2(i.out));
endmodule

module u_a (intf.in i1);
endmodule

module u_b (intf.out i2);
endmodule

Funkce ověření

Následující ověřovací funkce obvykle nejsou syntetizovatelné, což znamená, že je nelze implementovat do hardwaru založeného na kódu HDL. Místo toho pomáhají při vytváření rozšiřitelných flexibilních zkušebních stolů .

Nové datové typy

stringDatový typ představuje proměnnou délkou textového řetězce . Například:

string s1 = "Hello";
string s2 = "world";
string p = ".?!";
string s3 = {s1, ", ", s2, p[2]}; // string concatenation
$display("[%d] %s", s3.len(), s3); // simulation will print: "[13] Hello, world!"

Kromě statického pole použitého v designu nabízí SystemVerilog dynamická pole , asociativní pole a fronty :

int cmdline_elements; // # elements for dynamic array
int da[];             // dynamic array
int ai[int];          // associative array, indexed by int
int as[string];       // associative array, indexed by string
int qa[$];            // queue, indexed as an array, or by built-in methods

initial begin
    cmdline_elements = 16;
    da = new[ cmdline_elements ]; // Allocate array with 16 elements
end

Dynamické pole funguje podobně jako rozbalené pole, ale nabízí tu výhodu, že je dynamicky alokováno za běhu (jak je uvedeno výše.) Zatímco velikost zabaleného pole musí být známa v době kompilace (z konstanty nebo výrazu konstanty), dynamické pole size can be initialized from another runtime variable, allowing the array to be sized and resize arbitriously as needed.

Asociativní pole lze považovat za binární vyhledávací strom s uživatelem zadaným typem klíče a datovým typem . Klíč znamená objednání ; prvky asociativního pole lze číst v lexikografickém pořadí. Nakonec fronta poskytuje většinu funkcí deque typu C ++ STL : prvky lze efektivně přidat a odebrat z obou konců. Tito primitivové umožňují vytvoření komplexních datových struktur potřebných pro skórování velkých návrhů.

Třídy

SystemVerilog poskytuje objektově orientovaný programovací model.

V SystemVerilog podporují třídy model jedné dědičnosti , ale mohou implementovat funkce podobné vícečetné dědičnosti pomocí takzvaných „tříd rozhraní“ (v pojetí identických s interfacefunkcí Java). Třídy lze parametrizovat podle typu , což poskytuje základní funkci šablon C ++ . Nicméně, šablony specializace a funkční šablony nejsou podporovány.

Vlastnosti polymorfismu SystemVerilog jsou podobné těm v C ++: programátor může konkrétně napsat virtualfunkci, aby měl odvozenou kontrolu třídy nad funkcí. Další informace najdete ve virtuální funkci .

Zapouzdření a skrytí dat se provádí pomocí klíčových slov locala protected, která musí být použita na jakoukoli položku, která má být skryta. Ve výchozím nastavení jsou všechny vlastnosti třídy veřejné .

Instance třídy se dynamicky vytvářejí pomocí newklíčového slova. Konstruktor označován function newmůže být definována. SystemVerilog má automatický sběr odpadků , takže neexistuje žádné jazykové zařízení, které by výslovně zničilo instance vytvořené novým operátorem .

Příklad:

virtual class Memory;
    virtual function bit [31:0] read(bit [31:0] addr); endfunction
    virtual function void write(bit [31:0] addr, bit [31:0] data); endfunction
endclass

class SRAM #(parameter AWIDTH=10) extends Memory;
    bit [31:0] mem [1<<AWIDTH];

    virtual function bit [31:0] read(bit [31:0] addr);
        return mem[addr];
    endfunction

    virtual function void write(bit [31:0] addr, bit [31:0] data);
        mem[addr] = data;
    endfunction
endclass

Omezené náhodné generování

Celočíselné veličiny, definované v definici třídy nebo jako samostatné proměnné v nějakém lexikálním rozsahu, lze přiřadit náhodné hodnoty na základě množiny omezení. Tato funkce je užitečná pro vytváření náhodných scénářů pro ověření .

V rámci definic třídy randa a randcmodifikátory signalizují proměnné, které mají podstoupit randomizaci. randcUrčuje randomizaci na základě permutace , kde proměnná jednou převezme všechny možné hodnoty, než se libovolná hodnota opakuje. Proměnné bez modifikátorů nejsou randomizovány.

class eth_frame;
    rand bit [47:0] dest;
    rand bit [47:0] src;
    rand bit [15:0] f_type;
    rand byte       payload[];
    bit [31:0]      fcs;
    rand bit [31:0] fcs_corrupt;

    constraint basic {
        payload.size inside {[46:1500]};
    }

    constraint good_fr {
        fcs_corrupt == 0;
    }
endclass

V tomto příkladu není fcspole náhodné; v praxi to bude počítáno s generátorem CRC a fcs_corruptpole bude použito k jeho poškození, aby se vnesly chyby FCS. Dvě uvedená omezení platí pro vyhovující ethernetové rámce . Omezení mohou být selektivně povolena; tato funkce by byla vyžadována ve výše uvedeném příkladu ke generování poškozených rámců. Omezení mohou být libovolně složitá a zahrnují vzájemné vztahy mezi proměnnými, implikacemi a iterací. Řešitel omezení SystemVerilog je povinen najít řešení, pokud existuje, ale neposkytuje žádné záruky, pokud jde o čas, který k tomu bude potřebovat, protože se obecně jedná o NP-těžký problém ( boolean uspokojivost ).

Metody randomizace

V každé třídě SystemVerilog existují 3 předdefinované metody pro randomizaci: pre_randomize, randomize a post_randomize. Metodu randomize volá uživatel pro randomizaci proměnných třídy. Metoda pre_randomize je volána metodou randomize před randomizací a metoda post_randomize je volána metodou randomize po randomizaci.

class eth_frame;
    rand bit [47:0] dest;
    rand bit [47:0] src;
    rand bit [15:0] f_type;
    rand byte       payload[];
    bit [31:0]      fcs;
    rand bit        corrupted_frame;

    constraint basic {
        payload.size inside {[46:1500]};
    }
    
    function void post_randomize()
      this.calculate_fcs(); // update the fcs field according to the randomized frame
      if (corrupted_frame)  // if this frame should be corrupted 
        this.corrupt_fcs(); // corrupt the fcs
    endfunction
endclass

Kontrolní omezení

K řízení randomizace se používají metody constraint_mode () a random_mode (). constraint_mode () se používá k zapnutí a vypnutí konkrétního omezení a random_mode se používá k zapnutí nebo vypnutí randomizace konkrétní proměnné. Níže uvedený kód popisuje a procedurálně testuje ethernetový rámec :

class eth_frame;
    rand bit [47:0] dest;
    rand bit [47:0] src;
    rand bit [15:0] f_type;
    rand byte       payload[];
    bit [31:0]      fcs;
    rand bit        corrupted_frame;

    constraint basic {
        payload.size inside {[46:1500]};
    }
   
    constraint one_src_cst {
        src == 48'h1f00
    }

    constraint dist_to_fcs {
        fcs dist {0:/30,[1:2500]:/50};  // 30, and 50 are the weights (30/80 or  50/80, in this example) 
    }

endclass
.
.
.
eth_frame my_frame;

my_frame.one_src_cst.constraint_mode(0); // the constraint one_src_cst will not be taken into account
my_frame.f_type.random_mode(0);        // the f_type variable will not be randomized for this frame instance.
my_frame.randomize();

Tvrzení

Tvrzení jsou užitečná pro ověření vlastností návrhu, které se projeví po dosažení konkrétní podmínky nebo stavu. SystemVerilog má svůj vlastní specifikační jazyk tvrzení, podobně jako Language Specification Language . Podmnožina jazykových konstruktů SystemVerilog, která slouží pro tvrzení, se běžně nazývá SystemVerilog Assertion nebo SVA.

SystemVerilog tvrzení jsou vytvořena ze sekvencí a vlastností . Vlastnosti jsou nadmnožinou sekvencí; lze použít jakoukoli sekvenci, jako by to byla vlastnost, i když to obvykle není užitečné.

Sekvence se skládají z logických výrazů rozšířených o časové operátory . Nejjednodušší dočasný operátor je ##operátor, který provádí zřetězení:

sequence S1;
    @(posedge clk) req ##1 gnt;
endsequence

Tato sekvence se shoduje, pokud gntsignál jde vysoko jeden hodinový cyklus poté, co reqjde vysoko. Všimněte si, že všechny sekvenční operace jsou synchronní s hodinami.

Mezi další sekvenční operátory patří operátory opakování i různé spojky. Tito operátoři umožňují návrháři vyjádřit složité vztahy mezi konstrukčními komponenty.

Tvrzení funguje tak, že se neustále pokoušíte vyhodnotit sekvenci nebo vlastnost. Pokud selže vlastnost, tvrzení selže. Sekvence výše selže, kdykoli reqje nízká. K přesnému vyjádření požadavku, který gntnásleduje, reqje vyžadována vlastnost:

property req_gnt;
    @(posedge clk) req |=> gnt;
endproperty

assert_req_gnt: assert property (req_gnt) else $error("req not followed by gnt.");

Tento příklad ukazuje operátor implikace|=> . Klauzule nalevo od implikace se nazývá předchůdce a klauzule napravo se nazývá následnice . Hodnocení implikace začíná opakovanými pokusy o vyhodnocení předchůdce. Když předchůdce uspěje , pokusí se o důsledek a úspěch tvrzení závisí na úspěchu následníka. V tomto příkladu se o následek nepokusí, dokud nedosáhne reqvysoké hodnoty, po které vlastnost selže, pokud gntnení vysoká na následujících hodinách.

Kromě tvrzení SystemVerilog podporuje předpoklady a pokrytí vlastností. Předpoklad stanoví podmínku, kterou musí formální nástroj prokazující logiku předpokládat jako pravdivý . Tvrzení určuje vlastnost, která musí být prokázána jako pravdivá. V simulaci se ověřují jak tvrzení, tak předpoklady proti testovacím stimulům. Pokrytí vlastností umožňuje ověřovacímu technikovi ověřit, že tvrzení přesně monitorují návrh.

Dosah

Pokrytí aplikované na jazyky ověřování hardwaru odkazuje na shromažďování statistik na základě událostí vzorkování v rámci simulace. Pokrytí se používá k určení, kdy bylo testované zařízení (DUT) vystaveno dostatečné paletě podnětů, takže existuje vysoká jistota, že DUT funguje správně. Všimněte si, že se to liší od pokrytí kódu, které používá návrhový kód, aby bylo zajištěno, že byly provedeny všechny řádky kódu v návrhu. Funkční pokrytí zajišťuje, žebyly prozkoumány všechny požadované případy rohů a hran v návrhovém prostoru .

Skupina pokrytí SystemVerilog vytvoří databázi "zásobníků", které ukládají histogram hodnot přidružené proměnné. Lze také definovat křížové pokrytí, které vytvoří histogram představující kartézský součin více proměnných.

A namátkové kontroly událost, kdy se odebere vzorek. Vzorkování událost může být Verilog událost, vstup nebo výstup z bloku kódu nebo volání samplemetody skupiny pokrytí. Je třeba dbát na to, aby se údaje odebíraly pouze v případě, že to má smysl.

Například:

class eth_frame;
   // Definitions as above
   covergroup cov;
      coverpoint dest {
          bins bcast[1] = {48'hFFFFFFFFFFFF};
          bins ucast[1] = default;
      }
      coverpoint f_type {
          bins length[16] = { [0:1535] };
          bins typed[16] = { [1536:32767] };
          bins other[1] = default;
      }
      psize: coverpoint payload.size {
          bins size[] = { 46, [47:63], 64, [65:511], [512:1023], [1024:1499], 1500 };
      }

      sz_x_t: cross f_type, psize;
   endgroup
endclass

V tomto příkladu se ověřovací inženýr zajímá o distribuci rámců vysílání a jednosměrového vysílání, pole size / f_type a velikost užitečného zatížení. Rozsahy v krycím bodě velikosti užitečného zatížení odrážejí zajímavé rohové případy, včetně rámců minimální a maximální velikosti.

Synchronizace

Komplexní testovací prostředí se skládá z opakovaně použitelných ověřovacích komponent, které musí spolu komunikovat. Primitiv „ události “ Verilogu umožňoval různé bloky procedurálních příkazů navzájem se spouštět, ale vynucení synchronizace vláken bylo na (chytrém) použití programátora. SystemVerilog nabízí dvě primitiva speciálně pro synchronizaci mezi vlákny: schránku a semafor . Poštovní schránka je modelována jako fronta zpráv FIFO . FIFO lze volitelně typově parametrizovat, takže přes něj lze procházet pouze objekty zadaného typu . Objekty jsou obvykle instance třídy představující transakce : základní operace (například odeslání rámce), které jsou prováděny ověřovacími komponenty. Semafor je modelován jako počítací semafor .

Obecná vylepšení klasického Verilogu

Kromě výše uvedených nových funkcí zvyšuje SystemVerilog použitelnost stávajících jazykových funkcí Verilogu. Níže jsou uvedena některá z těchto vylepšení:

Kromě toho SystemVerilog umožňuje pohodlné rozhraní k cizím jazykům (například C / C ++), a to pomocí SystemVerilog DPI (Direct Programming Interface).

Software pro ověřování a syntézu

V roli ověřování designu je SystemVerilog široce používán v průmyslu návrhů čipů. Tři největší prodejci EDA ( Cadence Design Systems , Mentor Graphics , Synopsys ) začlenili SystemVerilog do svých simulátorů HDL ve více jazycích . Přestože zatím žádný simulátor nemůže nárokovat podporu pro celý SystemVerilog LRM , což z interoperability testbench dělá výzvu, probíhají snahy o podporu kompatibility mezi dodavateli. V roce 2008 Cadence a Mentor vydali Open Verification Methodology, otevřenou knihovnu tříd a uživatelský rámec pro usnadnění vývoje opakovaně použitelných testovacích stolů a konzervovaných ověřovacích IP. Společnost Synopsys, která jako první publikovala knihovnu tříd SystemVerilog (VMM), následně reagovala otevřením svého vlastního VMM široké veřejnosti. Mnoho poskytovatelů třetích stran oznámilo nebo již vydalo ověřovací IP adresu SystemVerilog.

V roli syntézy designu (transformace popisu hardwarového designu do seznamu bran- net ) bylo přijetí SystemVerilog pomalé. Mnoho návrhových týmů používá návrhové toky, které zahrnují více nástrojů od různých dodavatelů. Většina designérských týmů nemůže migrovat na SystemVerilog RTL-design, dokud jejich celá sada nástrojů front-end ( linters , formální ověření a generátory automatických testovacích struktur ) nepodporuje podmnožinu společného jazyka.

Viz také

Reference

  • 1800-2005 - Standard IEEE pro systém Verilog — Unified Hardware Design, Specification and Verification Language . 2005. doi : 10,1109 / IEEESTD.2005.97972 . ISBN 978-0-7381-4810-6.
  • 1800-2009 - IEEE Standard for SystemVerilog — Unified Hardware Design, Specification, and Verification Language . 2009. doi : 10,1109 / IEEESTD.2009.5354441 . ISBN 978-0-7381-6130-3.
  • 1800–2012 - IEEE Standard for SystemVerilog — Unified Hardware Design, Specification, and Verification Language . 2013. doi : 10.1109 / IEEESTD.2013.6469140 . ISBN 978-0-7381-8110-3.
  • 1800–2017 - Standard IEEE pro SystemVerilog — Unified Hardware Design, Specification and Verification Language . 2017. doi : 10.1109 / IEEESTD.2018.8299595 . ISBN 978-1-5044-4509-2.
  • McGrath, Dylan (09.11.2005). "IEEE schvaluje SystemVerilog, revize Verilogu" . EE Times . Citováno 2007-01-31 .
  • Puneet Kumar (09.11.2005). "Výukový program systému Verilog" .
  • Gopi Krishna (09.11.2005). „SystemVerilog, SVA, SV DPI Tutorials“ .
  • HDVL. "Více systémových odkazů SystemVerilog" .
  • Spear, Chris, „SystemVerilog for Verification“ Springer, New York City, NY. ISBN  0-387-76529-8
  • Stuart Sutherland, Simon Davidmann, Peter Flake, „SystemVerilog for Design Second Edition: A Guide to Using SystemVerilog for Hardware Design and Modeling“ Springer, New York City, NY. ISBN  0-387-33399-1
  • Ben Cohen, Srinivasan Venkataramanan, Ajeetha Kumari a Lisa Piper [1] SystemVerilog Assertions Handbook, 4. vydání, 2016- http://SystemVerilog.us
  • Ben Cohen Srinivasan Venkataramanan a Ajeetha Kumari [2] Pragmatický přístup k přijetí VMM, - http://SystemVerilog.us
  • Erik Seligman a Tom Schubert [3] Formální ověření: Základní sada nástrojů pro moderní design VLSI, 24. července 2015,

externí odkazy

Standardní reference IEEE

Nejnovější standardní dokumenty SystemVerilog jsou k dispozici bezplatně z IEEExplore .

Návody
Vývoj standardů
Jazyková rozšíření
  • Verilog AUTOs - otevřený zdrojový meta-komentářový systém ke zjednodušení údržby kódu Verilog
Online nástroje
  • EDA Playground - spusťte SystemVerilog z webového prohlížeče (online IDE zdarma)
  • SVeN - SystemVerilog BNF Navigator (aktuální pro IEEE 1800-2012)
Další nástroje
  • SVUnit - framework pro testování jednotek pro vývojáře, kteří píší kód v SystemVerilog. Ověřte izolaci modulů, tříd a rozhraní SystemVerilog.
  • sv2v - open-source převodník z SystemVerilog na Verilog