SystemVerilog - SystemVerilog

SystemVerilog
SystemVerilog logo.png
Logo SystemVerilog
Paradygmat Zorganizowany (projekt)
Zorientowany obiektowo (weryfikacja)
Zaprojektowany przez Synopsys , później IEEE
Po raz pierwszy pojawiły się 2002 ; 19 lat temu ( 2002 )
Wersja stabilna
IEEE 1800-2017 / 22 lutego 2018 ; 3 lata temu ( 2018-02-22 )
Dyscyplina pisania Statyczny , słaby
Rozszerzenia nazw plików .sv, .svh
Wpływem
Projekt: Verilog , VHDL , C++ , Weryfikacja: OpenVera , Java

SystemVerilog , standaryzowany jako IEEE 1800 , jest językiem opisu sprzętu i weryfikacji sprzętu używanym do modelowania, projektowania , symulacji , testowania i wdrażania systemów elektronicznych. SystemVerilog jest oparty na Verilog i niektórych rozszerzeniach, a od 2008 roku Verilog jest teraz częścią tego samego standardu IEEE . Jest powszechnie stosowany w branży projektowania półprzewodników i elektroniki jako ewolucja Verilog.

Historia

SystemVerilog rozpoczął się od przekazania języka Superlog firmie Accellera w 2002 roku przez startującą firmę Co-Design Automation. Większość funkcji weryfikacji opiera się na języku OpenVera podarowanym przez Synopsys . W 2005 roku SystemVerilog został przyjęty jako standard IEEE 1800-2005. W 2009 roku standard został połączony z podstawowym standardem Verilog (IEEE 1364-2005), tworząc IEEE Standard 1800-2009. Obecna wersja to standard IEEE 1800-2017.

Zestaw funkcji SystemVerilog można podzielić na dwie odrębne role:

  1. SystemVerilog do projektowania poziomu transferu rejestru (RTL) jest rozszerzeniem Verilog-2005 ; wszystkie funkcje tego języka są dostępne w SystemVerilog. Dlatego Verilog jest podzbiorem SystemVerilog.
  2. SystemVerilog do weryfikacji wykorzystuje rozbudowane techniki programowania obiektowego i jest bardziej związany z Javą niż Verilog. Te konstrukty generalnie nie są zdolne do syntezy.

W dalszej części tego artykułu omówiono funkcje SystemVerilog nieobecne w Verilog-2005 .

Cechy konstrukcyjne

Żywotność danych

W SystemVerilog określono dwa typy czasu życia danych: statyczny i automatyczny . Zmienne automatyczne są tworzone w momencie, gdy wykonanie programu wchodzi w zakres zmiennej. Zmienne statyczne są tworzone na początku wykonywania programu i zachowują tę samą wartość przez cały okres życia programu, chyba że podczas wykonywania zostanie przypisana nowa wartość.

Każda zmienna zadeklarowana wewnątrz zadania lub funkcji bez określenia typu zostanie uznana za automatyczną. Aby określić, że zmienna jest statyczna, umieść słowo kluczowe " static" w deklaracji przed typem, np. " ". Słowo kluczowe „ ” jest używane w ten sam sposób. static int x;automatic

Nowe typy danych

Ulepszone typy zmiennych dodają nowe możliwości do typu „reg” Verilog:

logic [31:0] my_var;

Verilog-1995 i -2001 ograniczają zmienne reg do instrukcji behawioralnych, takich jak kod RTL . SystemVerilog rozszerza typ reg, dzięki czemu może być sterowany przez pojedynczy sterownik, taki jak brama lub moduł. SystemVerilog nazywa ten typ „logiką”, aby przypomnieć użytkownikom, że ma tę dodatkową możliwość i nie jest rejestrem sprzętu. Nazwy „logika” i „reg” są wymienne. Sygnał z więcej niż jednym sterownikiem (takim jak bufor trójstanowy dla wejścia/wyjścia ogólnego przeznaczenia ) musi być zadeklarowany jako typ sieci, taki jak „wire”, aby SystemVerilog mógł rozwiązać ostateczną wartość.

Wielowymiarowe spakowane tablice ujednolicają i rozszerzają pojęcie „rejestrów” i „pamięci” Veriloga:

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

Klasyczny Verilog zezwalał na zadeklarowanie tylko jednego wymiaru po lewej stronie nazwy zmiennej. SystemVerilog zezwala na dowolną liczbę takich „zapakowanych” wymiarów. Zmienna typu upakowanej tablicy odwzorowuje 1:1 na całkowitą liczbę arytmetyczną. W powyższym przykładzie każdy element my_packmoże być użyty w wyrażeniach jako sześciobitowa liczba całkowita. Wymiary po prawej stronie nazwy (w tym przypadku 32) są określane jako wymiary „rozpakowane”. Podobnie jak w Verilog-2001 , dozwolona jest dowolna liczba wymiarów bez opakowania.

Wyliczeniowe typy danych (enums) umożliwiają przypisywanie wartościom liczbowym znaczących nazw. Zmiennych zadeklarowanych jako typu wyliczeniowego nie można przypisać do zmiennych innego typu wyliczeniowego bez rzutowania . Nie dotyczy to parametrów, które były preferowaną techniką realizacji dla ilości wyliczanych w Verilog-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 pokazano powyżej, projektant może określić podstawowy typ arytmetyczny ( logic [2:0]w tym przypadku), który jest używany do reprezentowania wartości wyliczenia. Meta-wartości X i Z mogą być tutaj użyte, prawdopodobnie do reprezentowania stanów niedozwolonych. Funkcja wbudowana name()zwraca ciąg znaków ASCII dla bieżącej wartości wyliczanej, co jest przydatne podczas walidacji i testowania.

Nowe liczby całkowite : SystemVerilog definiuje byte, shortint, inti longintw dwu-stanowych podpisane integralne typy o 8, 16, 32 i 64 bitów, odpowiednio. bitTyp to typ dwustawna zmienną szerokość, która działa podobnie logic. Typy dwustanowe nie mają metawartości X i Z klasycznego Veriloga; praca z tymi typami może skutkować szybszą symulacją.

Struktury i związki działają podobnie jak robią w języku programowania C . Udoskonalenia SystemVerilog obejmująatrybut spakowany iatrybut oznaczony . taggedCecha umożliwia śledzenie wykonania, z których człon (y) do związków są w użyciu. packedCecha powoduje, że konstrukcja lub związków być odwzorowany w stosunku 1: 1, na kolumnę z wypełnieniem tablicy bitów. Zawartośćstructtypów danych zajmuje ciągły blok pamięci bez przerw, podobnie jak pola bitowe w C i C++:

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

FP     zero = 64'b0;

Jak pokazano w tym przykładzie, SystemVerilog obsługuje również typedefs , tak jak w C i C++.

Bloki proceduralne

SystemVerilog wprowadza trzy nowe bloki proceduralne przeznaczone do modelowania sprzętu : always_comb(do modelowania logiki kombinacyjnej ), always_ff(dla przerzutników ) i always_latch(dla zatrzasków ). Podczas gdy Verilog używał pojedynczego alwaysbloku ogólnego przeznaczenia do modelowania różnych typów struktur sprzętowych, każdy z nowych bloków SystemVerilog jest przeznaczony do modelowania określonego typu sprzętu poprzez nałożenie ograniczeń semantycznych, aby zapewnić, że sprzęt opisany przez bloki odpowiada zamierzonemu użyciu model. Kompilator HDL lub program weryfikujący może podjąć dodatkowe kroki, aby zapewnić, że wystąpi tylko zamierzony typ zachowania.

always_combModele blokowe kombinowanych logika . Symulator wnioskuje, że lista wrażliwości zawiera wszystkie zmienne z zawartych instrukcji:

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

An always_latchmodele blokowe poziom wrażliwe zatrzaski. Ponownie lista wrażliwości jest wywnioskowana z kodu:

always_latch
    if (en) q <= d;

always_ffWzory bloków synchroniczny układ logiczny (zwłaszcza krawędzi wrażliwych sekwencyjnego logiczny ):

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

Narzędzia do automatyzacji projektowania elektronicznego (EDA) mogą weryfikować intencje projektu, sprawdzając, czy model sprzętu nie narusza żadnej semantyki użycia bloków. Na przykład nowe bloki ograniczają przypisanie do zmiennej, zezwalając tylko na jedno źródło, podczas gdy alwaysblok Verilog zezwala na przypisanie z wielu źródeł proceduralnych.

Interfejsy

W przypadku małych projektów port Verilog zwięźle opisuje łączność modułu z otaczającym środowiskiem. Ale główne bloki w dużej hierarchii projektów zazwyczaj mają liczbę portów w tysiącach. SystemVerilog wprowadza koncepcję interfejsów zarówno w celu zmniejszenia redundancji deklaracji nazw portów między połączonymi modułami, jak i grupowania i abstrakcyjnych powiązanych sygnałów w pakiet zadeklarowany przez użytkownika. Dodatkową koncepcją jest modport, który pokazuje kierunek połączeń logicznych.

Przykład:

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

Funkcje weryfikacji

Poniższe funkcje weryfikacji zazwyczaj nie są możliwe do syntezy, co oznacza, że ​​nie można ich zaimplementować w sprzęcie opartym na kodzie HDL. Zamiast tego pomagają w tworzeniu rozszerzalnych, elastycznych stanowisk testowych .

Nowe typy danych

Typ stringdanych reprezentuje ciąg tekstowy o zmiennej długości . Na przykład:

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!"

Oprócz statycznej tablicy używanej w projektowaniu, SystemVerilog oferuje tablice dynamiczne , tablice asocjacyjne i kolejki :

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

Tablica dynamiczna działa podobnie jak tablica rozpakowana, ale ma tę zaletę, że jest dynamicznie alokowana w czasie wykonywania (jak pokazano powyżej). Podczas gdy rozmiar spakowanej tablicy musi być znany w czasie kompilacji (ze stałej lub wyrażenia stałych), tablica dynamiczna size można zainicjować z innej zmiennej środowiska uruchomieniowego, dzięki czemu tablica może być dowolnie zmieniana i zmieniana w razie potrzeby.

Tablicę asocjacyjną można traktować jako drzewo wyszukiwania binarnego z typem klucza określonym przez użytkownika i typem danych . Klucz implikuje uporządkowanie ; elementy tablicy asocjacyjnej można odczytać w porządku leksykograficznym. Wreszcie, kolejka zapewnia wiele funkcji typu deque C++ STL : elementy mogą być skutecznie dodawane i usuwane z obu końców. Te prymitywy umożliwiają tworzenie złożonych struktur danych wymaganych do tworzenia tablic wyników dużego projektu.

Klasy

SystemVerilog udostępnia model programowania zorientowanego obiektowo .

W SystemVerilog klasy obsługują model pojedynczego dziedziczenia , ale mogą implementować funkcjonalność podobną do dziedziczenia wielokrotnego poprzez użycie tak zwanych „klas interfejsu” (idealnie identyczne z interfacecechą Javy). Klasy mogą być parametryzowane według typu , zapewniając podstawową funkcję szablonów C++ . Jednak specjalizacja szablonów i szablony funkcji nie są obsługiwane.

Funkcje polimorfizmu SystemVerilog są podobne do tych z C++: programista może specjalnie napisać virtualfunkcję, aby mieć kontrolę nad wzmocnieniem funkcji przez klasę pochodną. Zobacz funkcję wirtualną, aby uzyskać więcej informacji.

Enkapsulacja i ukrywanie danych odbywa się za pomocą słów kluczowych locali protected, które należy zastosować do każdego elementu, który ma być ukryty. Domyślnie wszystkie właściwości klasy są public .

Instancje klas są tworzone dynamicznie za pomocą newsłowa kluczowego. Konstruktor oznaczona function newmoże być zdefiniowana. SystemVerilog posiada funkcję automatycznego wyrzucania elementów bezużytecznych , więc nie ma narzędzia językowego do jawnego niszczenia instancji utworzonych przez nowego operatora .

Przykład:

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

Ograniczone losowe generowanie

Ilościom całkowitym, zdefiniowanym w definicji klasy lub jako samodzielne zmienne w pewnym zakresie leksykalnym, można przypisać wartości losowe na podstawie zestawu ograniczeń. Ta funkcja jest przydatna do tworzenia losowych scenariuszy weryfikacji .

W definicjach klas modyfikatory randi randcsygnalizują zmienne, które mają zostać poddane randomizacji. randcokreśla randomizację opartą na permutacji , w której zmienna przyjmuje wszystkie możliwe wartości jeden raz, zanim jakakolwiek wartość zostanie powtórzona. Zmienne bez modyfikatorów nie są losowane.

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

W tym przykładzie fcspole nie jest losowe; w praktyce zostanie obliczony za pomocą generatora CRC, a fcs_corruptpole użyte do jego uszkodzenia w celu wstrzyknięcia błędów FCS. Przedstawione dwa ograniczenia dotyczą zgodnych ramek Ethernet . Ograniczenia mogą być włączane selektywnie; ta funkcja byłaby wymagana w powyższym przykładzie do generowania uszkodzonych ramek. Ograniczenia mogą być dowolnie złożone i obejmować wzajemne relacje między zmiennymi, implikacjami i iteracją. Narzędzie do rozwiązywania ograniczeń SystemVerilog jest wymagane do znalezienia rozwiązania, jeśli takie istnieje, ale nie daje żadnych gwarancji co do czasu, którego będzie to wymagało, ponieważ jest to ogólnie problem NP-trudny ( spełnialność logiczna ).

Metody randomizacji

W każdej klasie SystemVerilog istnieją 3 predefiniowane metody randomizacji: pre_randomize, randomize i post_randomize. Metoda randomize jest wywoływana przez użytkownika w celu randomizacji zmiennych klas. Metoda pre_randomize jest wywoływana przez metodę randomize przed randomizacją, a metoda post_randomize jest wywoływana przez metodę randomize po randomizacji.

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

Kontrolowanie ograniczeń

Do kontrolowania randomizacji używane są metody bound_mode() i random_mode(). bound_mode() służy do włączania i wyłączania określonego ograniczenia, a random_mode służy do włączania lub wyłączania randomizacji określonej zmiennej. Poniższy kod opisuje i proceduralnie testuje ramkę Ethernet :

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();

Twierdzenia

Asercje są przydatne do weryfikowania właściwości projektu, które pojawiają się po osiągnięciu określonego warunku lub stanu. SystemVerilog ma własny język specyfikacji potwierdzenia, podobny do języka specyfikacji właściwości . Podzbiór konstrukcji języka SystemVerilog, który obsługuje asercję, jest powszechnie nazywany SystemVerilog Assertion lub SVA.

Asercje SystemVerilog są budowane na podstawie sekwencji i właściwości . Właściwości są nadzbiorem sekwencji; dowolna sekwencja może być używana tak, jakby była właściwością, chociaż zazwyczaj nie jest to przydatne.

Sekwencje składają się z wyrażeń logicznych powiększonych o operatory temporalne . Najprostszym operatorem temporalnym jest ##operator wykonujący konkatenację:

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

Ta sekwencja pasuje, jeśli gntsygnał wzrośnie jeden cykl zegara po tym, jak reqwzrośnie. Zauważ, że wszystkie operacje sekwencyjne są zsynchronizowane z zegarem.

Inne operatory sekwencyjne obejmują operatory powtórzeń, a także różne spójniki. Operatory te umożliwiają projektantowi wyrażanie złożonych relacji między komponentami projektu.

Asercja działa poprzez ciągłe próby oceny sekwencji lub właściwości. Asercja kończy się niepowodzeniem, jeśli właściwość nie powiedzie się. Powyższa sekwencja nie powiedzie się, gdy reqbędzie niski. Aby dokładnie wyrazić wymagania, które gntnastępują reqpo właściwości, wymagane jest:

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

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

Ten przykład pokazuje operator implikacji|=> . Klauzula po lewej stronie implikacji nazywana jest poprzednikiem, a klauzula po prawej jest nazywana następnikiem . Ocena implikacji rozpoczyna się od wielokrotnych prób oceny poprzednika. Kiedy poprzednik się powiedzie , następuje próba użycia następnika, a powodzenie twierdzenia zależy od powodzenia następnika. W tym przykładzie następnik nie zostanie podjęty, dopóki nie osiągnie reqwysokiego poziomu, po czym właściwość zakończy się niepowodzeniem, jeśli gntnie będzie wysoki na następnym zegarze.

Oprócz asercji SystemVerilog obsługuje założenia i pokrycie właściwości. Założenie ustanawia warunek, że narzędzie dowodzące logiki formalnej musi zakładać, że jest prawdziwe . Asercja określa właściwość, która musi być potwierdzona jako prawdziwa. W symulacji zarówno twierdzenia, jak i założenia są weryfikowane względem bodźców testowych. Pokrycie własności pozwala inżynierowi weryfikacyjnemu zweryfikować, czy twierdzenia dokładnie monitorują projekt.

Pokrycie

Pokrycie stosowane do języków weryfikacji sprzętu odnosi się do gromadzenia statystyk na podstawie zdarzeń próbkowania w ramach symulacji. Pokrycie służy do określenia, kiedy testowane urządzenie (DUT) zostało wystawione na wystarczającą różnorodność bodźców, aby można było z dużym prawdopodobieństwem stwierdzić, że testowane urządzenie działa prawidłowo. Należy zauważyć, że różni się to od pokrycia kodu, które instrumentuje kod projektu w celu zapewnienia, że ​​wszystkie wiersze kodu w projekcie zostały wykonane. Pokrycie funkcjonalne zapewnia, że ​​wszystkie pożądane narożniki i krawędzie w przestrzeni projektowej zostały zbadane .

Grupa pokrycia SystemVerilog tworzy bazę danych „pojemników”, która przechowuje histogram wartości skojarzonej zmiennej. Można również zdefiniować pokrycie krzyżowe, co tworzy histogram reprezentujący iloczyn kartezjański wielu zmiennych.

A próbkowania steruje przypadku, gdy próbka jest pobierana. Pobierania zdarzenia może być zdarzenie Verilog wejście lub wyjście z bloku kodu lub wywołanie samplemetody grupy pokrycia. Należy zadbać o to, aby dane były pobierane tylko wtedy, gdy mają znaczenie.

Na przykład:

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

W tym przykładzie inżynier weryfikacji jest zainteresowany dystrybucją ramek broadcast i unicast, polem size/f_type i rozmiarem ładunku. Zakresy w punkcie pokrycia rozmiaru ładunku odzwierciedlają interesujące przypadki narożne, w tym ramy o minimalnym i maksymalnym rozmiarze.

Synchronizacja

Złożone środowisko testowe składa się z komponentów weryfikacji wielokrotnego użytku, które muszą się ze sobą komunikować. Prymityw Verilog „ zdarzenie ” pozwalał różnym blokom instrukcji proceduralnych na wzajemne wyzwalanie się, ale wymuszenie synchronizacji wątków zależało od (sprytnego) użycia programisty. SystemVerilog oferuje dwa prymitywy przeznaczone specjalnie do synchronizacji międzywątkowej: skrzynka pocztowa i semafor . Skrzynka pocztowa jest modelowana jako kolejka komunikatów FIFO . Ewentualnie FIFO może być typu programowane tak, że tylko obiekty określonego typu może przechodzić przez niego. Zazwyczaj obiekty są instancjami klas reprezentującymi transakcje : operacje elementarne (na przykład wysyłanie ramki), które są wykonywane przez komponenty weryfikacji. Semafor jest modelowany jako semafor zliczający .

Ogólne ulepszenia klasycznego Verilog

Oprócz powyższych nowych funkcji, SystemVerilog zwiększa użyteczność istniejących funkcji językowych Verilog. Oto niektóre z tych ulepszeń:

Poza tym SystemVerilog umożliwia wygodny interfejs do języków obcych (takich jak C/C++) przez SystemVerilog DPI (Interfejs programowania bezpośredniego).

Oprogramowanie do weryfikacji i syntezy

W roli weryfikacji projektu, SystemVerilog jest szeroko stosowany w branży projektowania chipów. Trzej najwięksi dostawcy EDA ( Cadence Design Systems , Mentor Graphics , Synopsys ) włączyli SystemVerilog do swoich mieszanych językowo symulatorów HDL . Chociaż żaden symulator nie może jeszcze zapewnić wsparcia dla całego SystemVerilog LRM , co sprawia, że interoperacyjność testbench jest wyzwaniem, trwają wysiłki na rzecz promowania kompatybilności między dostawcami. W 2008 r. Cadence i Mentor wydali Open Verification Methodology, bibliotekę klas o otwartym kodzie źródłowym i strukturę użytkowania, która ma ułatwić rozwój testbenchów wielokrotnego użytku i gotowych adresów IP weryfikacyjnych. Firma Synopsys, która jako pierwsza opublikowała bibliotekę klas SystemVerilog (VMM), odpowiedziała następnie, udostępniając swój zastrzeżony VMM dla ogółu społeczeństwa. Wielu dostawców zewnętrznych ogłosiło lub już wydało weryfikacyjny adres IP SystemVerilog.

W latach konstrukcja syntezy roli (przekształcenie opisu sprzętowo-projektowej w gate- netlist ), SystemVerilog przyjęcie jest powolny. Wiele zespołów projektowych korzysta z przepływów projektowych, które obejmują wiele narzędzi od różnych dostawców. Większość zespołów projektowych nie może migrować do SystemVerilog RTL-design, dopóki cały ich zestaw narzędzi front-end ( linters , weryfikacja formalna i generatory automatycznych struktur testowych ) nie obsługuje wspólnego podzbioru języków.

Zobacz też

Bibliografia

  • 1800-2005 — IEEE Standard for System Verilog — ujednolicony projekt sprzętu, specyfikacja i język weryfikacji . 2005. doi : 10.1109/IEEESTD.2005.97972 . Numer ISBN 978-0-7381-4810-6.
  • 1800-2009 — Standard IEEE dla SystemVerilog — ujednolicony projekt sprzętu, specyfikacja i język weryfikacji . 2009. doi : 10.1109/IEEESTD.2009.5354441 . Numer ISBN 978-0-7381-6130-3.
  • 1800-2012 — IEEE Standard for SystemVerilog — ujednolicone projektowanie sprzętu, specyfikacja i język weryfikacji . 2013. doi : 10.1109/IEEESTD.2013.6469140 . Numer ISBN 978-0-7381-8110-3.
  • 1800-2017 — IEEE Standard for SystemVerilog — ujednolicony projekt sprzętu, specyfikacja i język weryfikacji . 2017. doi : 10.1109/IEEESTD.2018.8299595 . Numer ISBN 978-1-5044-4509-2.
  • McGrath, Dylan (2005-11-09). „IEEE zatwierdza SystemVerilog, wersję Verilog” . Czasy EE . Źródło 2007-01-31 .
  • Puneeta Kumara (2005-11-09). „Samouczek systemu Verilog” .
  • Gopi Kryszna (2005-11-09). "Samouczki SystemVerilog, SVA, SV DPI" .
  • HDVL. "Więcej linków do systemu Verilog" .
  • Spear, Chris, „SystemVerilog for Verification” Springer, Nowy Jork, NY. ISBN  0-387-76529-8
  • Stuart Sutherland, Simon Davidmann, Peter Flake, „SystemVerilog for Design Second Edition: Przewodnik po użyciu SystemVerilog do projektowania i modelowania sprzętu” Springer, New York City, NY. ISBN  0-387-33399-1
  • Ben Cohen, Srinivasan Venkataramanan, Ajeetha Kumari i Lisa Piper [1] Podręcznik SystemVerilog Assertions, wydanie 4, 2016- http://SystemVerilog.us
  • Ben Cohen Srinivasan Venkataramanan i Ajeetha Kumari [2] Pragmatyczne podejście do adopcji VMM, - http://SystemVerilog.us
  • Erik Seligman i Tom Schubert [3] Weryfikacja formalna: niezbędny zestaw narzędzi do nowoczesnego projektowania VLSI, 24 lipca 2015 r.,

Linki zewnętrzne

Odniesienie do standardu IEEE

Najnowsze dokumenty w standardzie SystemVerilog są dostępne bezpłatnie w IEEExplore .

Poradniki
Rozwój standardów
Rozszerzenia językowe
Narzędzia online
  • EDA Playground – Uruchom SystemVerilog z przeglądarki internetowej (bezpłatne IDE online)
  • SVeN — SystemVerilog BNF Navigator (aktualny zgodnie z IEEE 1800-2012)
Inne narzędzia
  • SVUnit – framework testów jednostkowych dla programistów piszących kod w SystemVerilog. Zweryfikuj moduły, klasy i interfejsy SystemVerilog w izolacji.
  • sv2v - konwerter open-source z SystemVerilog do Verilog