Verilator

Z Wikipedii, wolnej encyklopedii
Verilator
Autor Wilson Snyder
Aktualna wersja stabilna 5.024
(5 kwietnia 2024) [±]
Język programowania C++
System operacyjny Linux, FreeBSD, Microsoft Windows
Rodzaj Symulator
Licencja GNU Lesser General Public License i Licencja Artystyczna
Strona internetowa

Verilator – darmowy, otwarty symulator języka SystemVerilog (język opisu sprzętu). Obecnie jest używany w badaniach akademickich, projektach komercyjnych i jako część innych pakietów otwartego oprogramowania.

Verilator nie wykonuje symulacji bezpośrednio. Zamiast tego przekłada opis danego układu cyfrowego w SystemVerilogu na opis jego symulatora w C++ lub SystemC. W odróżnieniu od standardowych symulatorów, które dokładnie modelują zdarzenia zachodzące podczas pojedynczego cyklu zegara, wygenerowane przez Verilatora modele działają tylko z dokładnością do całego cyklu zegarowego i operują w logice dwustanowej, ale dzięki temu mogą osiągnąć wyższą wydajność[1].

Historia[edytuj | edytuj kod]

Narzędzie powstało w 1994 roku w zespole kierowanym przez Paula Wassona z Core Logic Group w Digital Equipment Corporation (DEC). Zostało użyte do przekładu kodu w języku Verilog na C, co miało umożliwić wykorzystanie go w symulacji napisanego w C modelu procesora Alpha. W połowie lat 90., narzędzie zaczęło być wykorzystywane przez inne grupy wewnątrz DEC, a odpowiedzialność za jego rozwój przejął Duane Galbi. W 1998 DEC opublikował kod źródłowy[2].

Od 2001 roku narzędzie było rozwijane głównie przez Wilsona Snydera w ramach otwartoźródłowego projektu Veripool. Dodano możliwość generacji SystemC, a narzędzie przepisano od podstaw w C++, co doprowadziło do wzrostu jego wydajności. W 2009 roku Verilator zaczął częściowo wspierać SystemVerilog. W 2018 roku dodano możliwość generacji modeli działających współbieżnie. Od 2022 roku, Verilator w wersji 5 wykorzystuje algorytm planisty zgodny ze standardem IEEE oraz wsparcie dla modelowania opóźnień, co usuwa wcześniejsze ograniczenia, przez które wszystkie opóźnienia były ignorowane[2].

Działanie[edytuj | edytuj kod]

Verilator wspiera większość funkcjonalności języka Verilog oraz SystemVerilog[3]. Podejście stosowane w Verilatorze jest bliższe syntezie układu niż jego symulacji[1].

Podczas konwersji, zawartości modułów są osadzane w miejsach ich użycia, aby utworzyć jeden moduł. Wykonywana jest też analiza statyczna projektu w celu eliminacji nadmiarowych przewodów i odgórnego zaplanowania kolejności wykonywania opisanych w nim procesów. Ostatecznie tworzona jest klasa w języku C++ zawierająca pola, którym można przypisywać wartości dla portów wejściowych modelowanego układu, a także metody wykonujące pojedynczy krok symulacji. W efekcie wykonania kroku symulacji, wartości portów wejściowych są odpowiednio przekształcane i zapisywane w polach zawirające wartości portów wyjściowych.

Verilator posiada opcję statycznego podziału projektu na kilka równoległych wątków, co potencjalnie może poprawić wydajność symulowacji.

Dzięki temu, że SystemC jest zestawem klas C++, wsparcie dla niego jest zapewnione przez odpowiednio wygenerowaną klasę zapewniającą warstwę kompatybilności między SystemC a zawartym w niej modelem C++.

Zobacz też[edytuj | edytuj kod]

Przypisy[edytuj | edytuj kod]

  1. a b Wilson Snyder, Verilator 5.012 [online], Veripool, 13 czerwca 2023, s. 42 [dostęp 2023-07-30] (ang.).
  2. a b Wilson Snyder, Verilator 5.012 [online], Veripool, 13 czerwca 2023, s. 126 [dostęp 2023-07-30] (ang.).
  3. Wilson Snyder, Verilator 5.012 [online], Veripool, 13 czerwca 2023, s. 49 [dostęp 2023-07-30] (ang.).