Verilator
Autor | Wilson Snyder |
---|---|
Aktualna wersja stabilna | 5.026 (15 czerwca 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
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
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 miejscach 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 zawierają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ść symulacji.
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ż
Przypisy
- ↑ a b WilsonW. Snyder WilsonW., Verilator 5.012 [online], Veripool, 13 czerwca 2023, s. 42 [dostęp 2023-07-30] (ang.).
- ↑ a b WilsonW. Snyder WilsonW., Verilator 5.012 [online], Veripool, 13 czerwca 2023, s. 126 [dostęp 2023-07-30] (ang.).
- ↑ WilsonW. Snyder WilsonW., Verilator 5.012 [online], Veripool, 13 czerwca 2023, s. 49 [dostęp 2023-07-30] (ang.).