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ść.

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.

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.

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

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ż SystemVerilog Verilog

Przypisy

Kategoria:Symulacja układów elektronicznych Kategoria:Kompilatory