Jest to weryfikator poleceń, który można uruchomić u dostawcy bezpłatnego hostingu OnWorks przy użyciu jednej z naszych wielu bezpłatnych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online systemu Windows lub emulator online systemu Mac OS
PROGRAM:
IMIĘ
Verilator — Konwertuj kod Verilog na C++/SystemC
STRESZCZENIE
werilator – pomoc
weryfikator --wersja
verilator --cc [opcje] [top_level.v]... [opt_c_files.cpp/c/cc/a/o/so]
verilator --sc [opcje] [top_level.v]... [opt_c_files.cpp/c/cc/a/o/so]
verilator --lint-only [top_level.v]...
OPIS
Verilator konwertuje syntetyzowalny (nie behawioralny) kod Veriloga oraz trochę Syntezy,
SystemVerilog i mały podzbiór potwierdzeń Verilog AMS w kodzie C++ lub SystemC. Ono
nie jest kompletnym symulatorem, ale kompilatorem.
Verilator jest wywoływany z parametrami podobnymi do GCC, Cadence Verilog-XL/NC-Verilog lub
VCS firmy Synopsys. Odczytuje określony kod Verilog, lintuje go i opcjonalnie dodaje
pokrycie i kod śledzenia przebiegu. W przypadku formatów C++ i SystemC generuje .cpp i .h
akta.
Pliki utworzone przez Verilator są następnie kompilowane przy użyciu C++. Użytkownik pisze trochę C++
wrapper, który tworzy instancję modułu najwyższego poziomu i przekazuje tę nazwę pliku na
wiersz poleceń. Te pliki C są skompilowane w C++ i połączone z plikami Verilated.
Wynikowy plik wykonywalny wykona rzeczywistą symulację.
Aby rozpocząć, przejdź do „PRZYKŁADOWE WYKONANIE C++”.
ARGUMENT PODSUMOWANIE
To jest krótkie podsumowanie argumentów do Verilator. Zobacz szczegółowe opisy w
w następnych sekcjach znajdziesz więcej informacji.
{file.v} Nazwy plików najwyższego poziomu Verilog
{file.c/cc/cpp} Opcjonalne pliki C++ do skompilowania
{file.a/o/so} Opcjonalne pliki C++ do połączenia
+1364-1995następny+ Użyj Verilog 1995 z rozszerzeniem pliku
+1364-2001następny+ Użyj Verilog 2001 z rozszerzeniem pliku
+1364-2005następny+ Użyj Verilog 2005 z rozszerzeniem pliku
+1800-2005ex+ Użyj SystemVerilog 2005 z rozszerzeniem pliku
+1800-2009ex+ Użyj SystemVerilog 2009 z rozszerzeniem pliku
+1800-2012ex+ Użyj SystemVerilog 2012 z rozszerzeniem pliku
--assert Włącz wszystkie asercje
--autoflush Opróżnij strumienie po wszystkich $displays
--bbox-sys Blackbox nieznany $wywołania systemowe
--bbox-unsup Nieobsługiwane funkcje językowe Blackbox
--kosz Zastąp plik binarny Verilator
-CFLAGI Flagi kompilatora C++ dla makefile
--cc Utwórz dane wyjściowe C++
--cdc Analiza przekroczenia domeny zegara
--clk Oznacz określony sygnał jako zegar
--kompilator Dostrój do określonego kompilatora C++
--limit-zbieżności Dostroić czas rozliczenia zbieżności
--pokrycie Włącz cały zasięg
--coverage-line Włącz zasięg linii
--coverage-toggle Włącz przełączanie zasięgu
--coverage-user Włącz obsługę użytkowników SVL
--coverage-underscore Włącz pokrycie _sygnałów
-D [= ] Ustaw definicję preprocesora
--debug Włącz debugowanie
--debug-check Włącz asercje debugowania
--debugi Włącz debugowanie na określonym poziomie
--debugowanie- Włącz debugowanie pliku źródłowego na poziomie
--domyślny język Domyślny język do analizy
+zdefiniuj+ = Ustaw definicję preprocesora
--dump-tree Włącz zrzucanie plików .tree
--dump-treei Włącz zrzucanie plików .tree na poziomie
--dump-drzewo- Włącz zrzucanie pliku .tree w pliku źródłowym na poziomie
-E Przetwarzaj wstępnie, ale nie kompiluj
--limit-błędów Przerwij po tej liczbie błędów
--exe Link do utworzenia pliku wykonywalnego
-F Parsowanie opcji z pliku, względnie
-F Opcje analizy z pliku
--gdb Uruchom Verilator w GDB interaktywnie
--gdbbt Uruchom Verilator w GDB dla śledzenia wstecznego
--help Wyświetl tę pomoc
-I Katalog do wyszukiwania zawiera
--jeśli-głębokość Dostosuj ostrzeżenie IFDEPTH
+incdir+ Katalog do wyszukiwania zawiera
--inhibit-sim Utwórz funkcję wyłączającą kartę SIM
--inline-multi Tune moduł inlining
-LDFLAGS Flagi przedobiektowe linkera dla makefile
-LDLIBS Flagi biblioteki linkera dla makefile
--język Domyślny standard języka do analizy
+libext+ +[ext]... Rozszerzenia do wyszukiwania modułów
--lint-only Lint, ale nie twórz danych wyjściowych
--MMD Utwórz pliki zależności .d
--MP Tworzy fałszywe cele zależności
--Mdir Nazwa wyjściowego katalogu obiektów
--mod-przedrostek Nazwisko do poprzedzenia w niższych klasach
--no-clk Zapobiegaj oznaczaniu określonego sygnału jako zegara
--no-pins64 Nie używaj vluint64_t dla sygnałów 33-64-bitowych
--no-skip-idenical Wyłącz pomijanie identycznych danych wyjściowych
+igningchecks zignorowano
-O0 Wyłącz optymalizacje
-O3 Optymalizacja wysokiej wydajności
-O Optymalizacje do wyboru
-o Nazwa końcowego pliku wykonywalnego
--no-order-clock-delay Wyłącz zamawianie zegara włącz przypisania
--podział wyjścia Podziel pliki .cpp na kawałki
--output-split-cfuncs Funkcje podziału .cpp
--output-split-ctrace Funkcje śledzenia podziału
-P Wyłącz numery linii i spacje za pomocą -E
--szpilki-bv Określ typy portów najwyższego poziomu
--pins-sc-uint Określ typy portów najwyższego poziomu
--pins-sc-biguint Określ typy portów najwyższego poziomu
--pins-uint8 Określ typy portów najwyższego poziomu
--filtr-rur Filtruj wszystkie dane wejściowe przez skrypt
--prefiks Nazwa klasy najwyższego poziomu
--profile-cfuncs Funkcje nazw do profilowania
--prywatne debugowanie; zobacz dokumenty
--publiczne debugowanie; zobacz dokumenty
--report-unoptflat Dodatkowa diagnostyka dla UNOPTFLAT
--savable Włącz zapisywanie-przywracanie modelu
--sc Utwórz dane wyjściowe SystemC
--stats Utwórz plik statystyk
--stats-vars Udostępnia statystyki dotyczące zmiennych
-sv Włącz parsowanie SystemVerilog
+systemverilogext+ Synonim dla +1800-2012ext+
--top-moduł Nazwa modułu wejściowego najwyższego poziomu
--trace Włącz tworzenie przebiegów
--śledzenie-głębokość Głębokość śledzenia
--trace-max-array Maksymalna szerokość bitów do śledzenia
--trace-max-szerokość Maksymalna głębokość tablicy do śledzenia
--trace-params Włącz parametry śledzenia
--trace-structs Włącz śledzenie nazw struktur
--trace-underscore Włącz śledzenie _sygnałów
-U Niezdefiniuj preprocesora zdefiniuj
--unroll-count Dostrój maksymalną liczbę iteracji pętli
--unroll-stmts Dostrój maksymalny rozmiar korpusu pętli
--nieużywane-wyrażenie regularne Dostrój NIEUŻYWANE sygnały kłaczków
-V Pełna wersja i konfiguracja
-v Biblioteka Veriloga
+verilog1995ext+ Synonim dla +1364-1995ext+
+verilog2001ext+ Synonim dla +1364-2001ext+
-Błąd- Konwertuj ostrzeżenie na błąd
-Wprzyszłość- Wyłącz ostrzeżenia o nieznanych wiadomościach
-Wnie- Wyłącz ostrzeżenie
-Wno-lint Wyłącz wszystkie ostrzeżenia o lintach
-Wno-style Wyłącz wszystkie ostrzeżenia dotyczące stylu
-Wno-fatal Wyłącz krytyczne wyjście w przypadku ostrzeżeń
--x-przypisz Początkowo przypisz Xs do tej wartości
--x-initial-edge Włącz początkowe wyzwalacze zbocza X->0 i X->1
-y Katalog do wyszukiwania modułów
ARGUMENTY
{plik.v}
Określa plik Verilog zawierający najwyższy moduł do zweryfikowania.
{plik.c/.cc/.cpp/.cxx}
Określa opcjonalne pliki C++, które mają być połączone z kodem Verilog. Jeśli jakieś pliki C++
są określone w ten sposób, Verilator będzie zawierał regułę make, która generuje moduł
wykonywalny. Bez żadnych plików C++ Verilator zatrzyma się na moduł__ALL.a biblioteka,
i zakładaj, że będziesz kontynuować łączenie z regułami tworzenia, które sam napisałeś. Zobacz także
-opcja CFLAGS.
{plik.a/.o/.so}
Określa opcjonalne pliki obiektów lub biblioteki, które mają być połączone z kodem Verilog, jako a
skrót dla -LDFLAGS " ". Jeśli jakieś pliki są określone w ten sposób, Verilator
będzie zawierać regułę tworzenia, która używa tych plików podczas łączenia moduł plik wykonywalny.
Zwykle jest to przydatne tylko wtedy, gdy jest używane z opcją --exe.
+1364-1995następny+ext
+1364-2001następny+ext
+1364-2005następny+ext
+1800-2005następny+ext
+1800-2009następny+ext
+1800-2012następny+ext
Określa standard języka, który ma być używany z określonym rozszerzeniem nazwy pliku, ext.
Aby uzyskać zgodność z innymi symulatorami, zobacz również synonimy „+verilog1995ext+”ext,
„+verilog2001ext+”exti „+systemverilogext+”ext.
W przypadku dowolnego pliku źródłowego język określony przez te opcje ma pierwszeństwo przed dowolnymi
język określony przez opcje „--default-language” lub „--language”.
Te opcje działają w kolejności, w jakiej zostały napotkane. W ten sposób następujące:
użyj Verilog 1995 dla "av" i Verilog 2001 dla "bv".
werilator ... +1364-1995w.+w. d. +1364-2001w.+w
Te flagi są zalecane tylko w przypadku starszych projektów w różnych językach, jako preferowane
opcją jest edycja kodu w celu naprawy nowych słów kluczowych lub dodanie odpowiednich
„`początkowe_słowa kluczowe”.
Note „`begin_keywords” to konstrukcja SystemVerilog, która określa tylko który
zestaw słów kluczowych ma zostać rozpoznany. Jakikolwiek zestaw zostanie wybrany, semantyka będzie
te z SystemVerilog. Natomiast „+1364-1995ext+” itp. określ zarówno składnię i
semantyka do zastosowania.
--zapewniać
Włącz wszystkie asercje.
Zobacz także --x-assign i --x-initial-edge; ustawienie "--x-assign unique" i/lub
"--x-początkowa-krawędź" może być pożądane.
--automatyczne płukanie
Po każdym $display lub $fdisplay, opróżnij strumień wyjściowy. Zapewnia to, że
komunikaty pojawią się natychmiast, ale mogą zmniejszyć wydajność; dla najlepszej wydajności zadzwoń
„fflush(stdout)” sporadycznie w głównej pętli C. Domyślnie wyłączone, które będą buforować
dane wyjściowe dostarczane przez normalne wywołania stdio C.
--bbox-sys
Zaczaruj wszelkie nieznane $systemowe zadania lub wywołania funkcji. Zadania systemowe będą proste
NOPed, a funkcje systemowe zostaną zastąpione przez zero. Argumenty na takie
funkcje będą analizowane, ale nie są sprawdzane w inny sposób. Zapobiega to błędom, gdy
linting w obecności specyficznych połączeń PLI firmy.
--bbox-unsup
Czarna skrzynka niektóre nieobsługiwane funkcje językowe, obecnie tabele UDP i cmos oraz
prymitywy bramek trans. Może to umożliwić kładzenie reszty projektu, nawet gdy
obecne są nieobsługiwane konstrukcje.
--kosz filename
Rzadko potrzebne. Zastąp domyślną nazwę pliku dla samego programu Verilator. Kiedy zależność
(.d) zostanie utworzony plik, ta nazwa pliku stanie się zależnością źródłową, tak że
zmiana w tym pliku binarnym spowoduje odbudowanie plików wyjściowych.
-CFLAGI Flagi
Dodaj określone flagi kompilatora C do wygenerowanych plików makefile. Kiedy make jest uruchamiany na
wygenerowany plik makefile zostaną one przekazane do kompilatora C++ (gcc/g++/msvc++).
--cc
Określa C++ bez trybu danych wyjściowych SystemC; zobacz także --sc.
--CDC
Eksperymentalny. Wykonaj kilka kontroli przekroczenia domeny zegara i wyślij powiązane ostrzeżenia
(CDCRSTLOGIC), a następnie wyjdź; jeśli potrzebne są ostrzeżenia inne niż ostrzeżenia CDC, wykonaj a
drugie uruchomienie z opcją --lint-only. Dodatkowe informacje ostrzegawcze są również wysyłane do
plik {prefiks}__cdc.txt.
Obecnie sprawdza tylko niektóre elementy, które pominęły inne narzędzia CDC; jeśli jesteś zainteresowany
dodając więcej tradycyjnych czeków CDC, prosimy o kontakt z autorami.
--klk nazwa-sygnału
Czasami Verilatorowi trudno jest odróżnić sygnały zegara od innych
sygnały danych. Czasami sygnały zegara mogą znaleźć się na liście kontrolnej
sygnały, które określają, czy potrzebna jest dalsza ocena. Ulegnie to znacznej degradacji
wykonanie zweryfikowanego modelu.
Z --clk , użytkownik może określić zegar główny w modelu, a następnie Verilator
oznaczy sygnał jako clocker i automatycznie przekaże atrybut clocker do
inne sygnały z tego wyprowadzone. W ten sposób Verilator będzie starał się unikać podejmowania
sygnał zegara do listy kontrolnej.
Uwaga nazwa-sygnału jest określona przez ścieżkę hierarchii RTL. Na przykład v.foo.bar. Gdyby
sygnał jest wejściem do modułu top, bezpośrednio nazwą sygnału. Jeśli to znajdziesz
trudno znaleźć dokładną nazwę, spróbuj użyć "/*verilator clocker*/" w pliku RTL, aby
zaznacz sygnał bezpośrednio.
--kompilator nazwa-kompilatora
Włącza dostrajanie i obejścia dla określonego kompilatora C++.
szczęk
Dostrój do klangu. Może to zmniejszyć szybkość wykonywania, ponieważ umożliwia kilka obejść
by uniknąć głupich, zakodowanych na sztywno limitów w klangu. Obejmuje to łamanie głębokich struktur
jak dla msvc jak opisano poniżej.
gcc Tune dla Gnu C++, chociaż wygenerowany kod powinien działać na prawie każdym zgodnym C++
kompilator. Obecnie domyślny.
msvc
Dostrój do Microsoft Visual C++. Może to zmniejszyć szybkość wykonywania, ponieważ umożliwia
kilka obejść, aby uniknąć głupich, zakodowanych na sztywno limitów w MSVC++. To zawiera
dzielenie głęboko zagnieżdżonych wyrażeń w nawiasach na podwyrażenia, aby uniknąć
błąd C1009 i podział głębokich bloków na funkcje, aby uniknąć błędu C1061.
--limit-zbieżności
Rzadko potrzebne. Określa maksymalną liczbę iteracji środowiska wykonawczego przed utworzeniem
model nie zbieżny błąd. Domyślnie 100.
--zasięg
Włącza wszystkie formy pokrycia, alias dla „--coverage-line --coverage-toggle
--pokrycie-użytkownik".
--linia-zasięgu
Określa podstawowy kod analizy pokrycia linii bloku, który powinien zostać wstawiony.
Analiza pokrycia dodaje instrukcje w każdym punkcie zmiany przepływu kodu, które są
gałęzie instrukcji IF i CASE, nadzbiór normalnego pokrycia linii Verilog. Na
każda taka gałąź zwiększa swój unikalny licznik. Pod koniec testu liczniki
wraz z nazwą pliku i numerem wiersza odpowiadającym każdemu licznikowi są zapisywane w
logi/pokrycie.pl.
Verilator automatycznie wyłącza pokrycie oddziałów, które mają w sobie $stop, ponieważ
zakłada się, że gałęzie $stop zawierają sprawdzanie błędów, które nie powinny wystąpić. /*werilator
cover_block_off*/ comment wykona podobną funkcję na dowolnym kodzie w tym bloku
lub poniżej, albo /*verilator cover_on/coverage_off*/ wyłączy pokrycie wokół linii
kodu.
Uwaga Verilator może przeliczyć kombinatoryczne (nietaktowane) bloki, gdy te bloki
odbierać sygnały, dla których wyłączono ostrzeżenie UNOPPTFLAT; dla najdokładniejszego
wyniki nie wyłączają tego ostrzeżenia podczas korzystania z pokrycia.
--zakres-przełącznik
Określa, że należy wstawić kod analizy zasięgu przełączania sygnału.
Każdy bit każdego sygnału w module ma wstawiony licznik. Licznik będzie
przyrost przy każdej zmianie zbocza odpowiedniego bitu.
Sygnały będące częścią zadań lub bloków początku/końca są uważane za zmienne lokalne i
nie są objęte. Sygnały zaczynające się od podkreśleń, są liczbami całkowitymi lub są bardzo szerokie
(>256 bitów całkowitej pamięci we wszystkich wymiarach) również nie są objęte.
Hierarchia jest skompresowana, tak że jeśli moduł jest tworzony wiele razy,
zasięg zostanie zsumowany dla tego bitu we WSZYSTKICH instancjach tego modułu z
ten sam zestaw parametrów. Moduł skonkretyzowany z różnymi wartościami parametrów to
jest uważany za inny moduł i będzie liczony oddzielnie.
Verilator podejmuje minimalnie inteligentną decyzję o tym, w jakiej dziedzinie zegarowej sygnał
idzie do i szuka krawędzi tylko w tej domenie zegara. Oznacza to, że krawędzie mogą być
ignorowane, jeśli wiadomo, że krawędź nigdy nie była widziana przez logikę odbierającą. Ten
algorytm może ulec poprawie w przyszłości. Wynik netto to pokrycie może być niższe niż
co by było widać patrząc na ślady, ale zasięg jest dokładniejszy
przedstawienie jakości bodźca w projekcie.
Podczas stabilizacji modelu mogą wystąpić krawędzie liczone w pobliżu czasu zerowego. to jest dobre
ćwicz zerowanie całego zasięgu tuż przed zwolnieniem resetu, aby zapobiec zliczaniu takich
zachowanie.
Parę komentarzy /*verilator cover_off/on */ można zastosować wokół sygnałów, które nie
trzeba przełączać analizę, taką jak pamięć RAM i pliki rejestru.
--pokrycie-podkreślenie
Włącz pokrycie sygnałów zaczynających się od podkreślenia. Zwykle sygnały te są
nie przykryte. Zobacz także --trace-podkreślenie.
--zasięg-użytkownik
Umożliwia wstawione przez użytkownika pokrycie funkcjonalne. Obecnie wszystkie funkcjonalne punkty zasięgu
są określane za pomocą SVA, które należy osobno włączyć za pomocą --assert.
Na przykład poniższe stwierdzenie doda punkt zasięgu z komentarzem
„Domyślny zegar”:
DefaultClock: właściwość okładki (@(posge clk) cyc==3);
-Dbyło=wartość
Definiuje dany symbol preprocesora, bez zezwolenia. Podobne do +definiuj; +zdefiniuj
jest dość standardowe w narzędziach Verilog, podczas gdy -D jest aliasem zgodności z GCC.
--odpluskwić
Wybierz wbudowany obraz debugowania Verilator (jeśli jest dostępny) i włącz więcej wewnętrznych
asercje (odpowiednik "--debug-check"), komunikaty debugowania (odpowiednik
"--debugi 4") i pliki zrzutu formularzy pośrednich (odpowiednik "--dump-treei 3").
--sprawdzanie debugowania
Rzadko potrzebne. Włącz wewnętrzne sprawdzanie asercji debugowania, bez zmiany debugowania
gadatliwość. Włączane automatycznie po określeniu --debug.
--debugi
--debugowanie-
Rzadko potrzebne - do użytku programistów. Ustaw globalny poziom debugowania wewnętrznego na
określony poziom debugowania (1-10) lub ustaw określony plik źródłowy Verilator na
określony poziom (np. "--debugi-V3Width 9"). Wyższe poziomy dają więcej szczegółów
wiadomości.
--domyślny język wartość
Wybierz język, który ma być używany domyślnie podczas pierwszego przetwarzania każdego pliku Verilog.
Wartość języka musi wynosić „1364-1995”, „1364-2001”, „1364-2005”, „1800-2005”,
„1800-2009” lub „1800-2012”.
Dowolny język powiązany z określonym rozszerzeniem pliku (zobacz różne +langwew+
opcje) będą używane zamiast języka określonego przez --default-language.
Flaga --default-language jest zalecana tylko dla starszego kodu używającego tego samego
język we wszystkich plikach źródłowych, ponieważ preferowaną opcją jest edycja kodu do naprawy
nowe słowa kluczowe lub dodaj odpowiednie „`begin_keywords”. W przypadku starszych projektów w różnych językach,
różne +langnależy użyć opcji ext+.
Jeśli nie określono języka, za pomocą tej flagi lub +langext+ opcje, potem najnowsze
Używany jest język SystemVerilog (IEEE 1800-2012).
+zdefiniuj+było=wartość
+zdefiniuj+było=wartość+zmienna2=wartość2...
Definiuje dany symbol preprocesora lub wiele symboli, jeśli są oddzielone plusami.
Podobny do -D; +define jest dość standardowe w narzędziach Verilog, podczas gdy -D jest aliasem
dla kompatybilności z GCC.
--dump-drzewo
Rzadko potrzebne. Włącz zapisywanie plików debugowania .tree z poziomem zrzutu 3, który zrzuca
standardowe etapy krytyczne. Aby uzyskać szczegółowe informacje na temat formatu, zobacz wewnętrzne informacje Verilator
podręcznik. --dump-tree jest włączane automatycznie z --debug, więc "--debug
--no-dump-tree” może być przydatne, jeśli pliki zrzutu są duże i niepożądane.
--dump-treei
--dump-drzewo-
Rzadko potrzebne - do użytku programistów. Ustaw globalny poziom zrzucania wewnętrznego drzewa na a
określony poziom zrzucania lub ustaw określony plik źródłowy Verilator na określony
poziom zrzucania drzewa (np. "--dump-treei-V3Order 9"). Poziom 0 wyłącza zrzuty i jest
odpowiednik "--no-dump-tree". Poziom 9 umożliwia zrzucanie każdego etapu.
-E Wstępnie przetwarzaj kod źródłowy, ale nie kompiluj, jak w przypadku 'gcc -E'. Wyjście jest zapisywane
do standaryzacji. Uważaj na włączanie komunikatów debugowania, ponieważ one również trafią do
standardowe.
--limit-błędów
Po napotkaniu tej liczby błędów lub ostrzeżeń zakończ. Domyślnie 50.
--exe
Wygeneruj plik wykonywalny. Będziesz także musiał przekazać dodatkowe pliki .cpp na
wiersza poleceń, które implementują główną pętlę dla twojej symulacji.
-F filet
Przeczytaj określony plik i zachowuj się tak, jakby cały tekst w nim był określony jako polecenie
parametry linii. Wszelkie ścieżki względne odnoszą się do katalogu zawierającego
określony plik. Zobacz także -f. Uwaga -F jest dość standardowa we wszystkich narzędziach Verilog.
-f filet
Przeczytaj określony plik i zachowuj się tak, jakby cały tekst w nim był określony jako polecenie
parametry linii. Wszelkie ścieżki względne odnoszą się do bieżącego katalogu. Zobacz też
-F. Uwaga -f jest dość standardowa we wszystkich narzędziach Verilog.
Plik może zawierać // komentarze, które są ignorowane do końca linii. Dowolny $VAR,
$(VAR) lub ${VAR} zostaną zastąpione określoną zmienną środowiskową.
--gdb
Uruchom Verilator pod interaktywnym GDB (lub zmienną środowiskową VERILATOR_GDB)
wartość) sesji. Zobacz także --gdbbt.
--gdbbt
Jeśli podano --debug, uruchom Verilator pod procesem GDB i wypisz ślad wsteczny
przy wyjściu, a następnie natychmiast wyjdź z GDB. Bez --debug lub jeśli GDB nie działa,
ta flaga jest ignorowana. Przeznaczony do łatwego tworzenia śladów wstecznych przez użytkowników; Inaczej
zobacz flagę --gdb.
--help
Wyświetla ten komunikat i wersję programu i kończy działanie.
-Ireż
Zobacz -y.
--jeśli-głębokość wartość
Rzadko potrzebne. Ustaw głębokość, na której zostanie uruchomione ostrzeżenie IFDEPTH, domyślnie 0
co wyłącza to ostrzeżenie.
+incdir+reż
Zobacz -y.
--inhibit-sym
Rzadko potrzebne. Utwórz funkcję „inhibitSim(bool)”, aby włączyć i wyłączyć ocenę.
Pozwala to testbenchowi wyższego poziomu na wyłączenie modułów, które nie są ważne w przypadku
podana symulacja, bez konieczności ponownej kompilacji lub zmiany modułów SystemC
skonkretyzowane.
--inline-multi wartość
Dostosuj inlining modułów. Domyślna wartość 2000 określa, że do 2000 nowych
operacje mogą być dodawane do modelu przez wstawianie, jeśli więcej niż ta liczba
spowodowałoby to, że moduł nie jest wbudowany. Większe wartości lub wartość <= 1
wstawi wszystko, doprowadzi do dłuższych czasów kompilacji, ale potencjalnie szybszych
czasy pracy. To ustawienie jest ignorowane w przypadku bardzo małych modułów; zawsze będą
w linii, jeśli jest to dozwolone.
-LDFLAGI Flagi
Dodaj określone flagi konsolidatora C do wygenerowanych plików makefile. Kiedy make jest uruchamiany na
wygenerowany plik makefile zostaną one przekazane do konsolidatora C++ (ld) *po* podstawowym
łączony plik. Ta flaga nazywa się -LDFLAGS, ponieważ jest to tradycyjna nazwa w
symulatory; lepiej byłoby nazwać LDLIBS, ponieważ jest to zmienna Makefile
kontroluje. (W programie Make LDFLAGS znajduje się przed pierwszym obiektem, LDLIBS po. -L
biblioteki muszą znajdować się w zmiennej Make LDLIBS, a nie LDFLAGS.)
--język wartość
Synonim „--default-langauge”, zapewniający zgodność z innymi narzędziami i wcześniejszymi
wersje Verilator.
+libext+ext+ext...
Określ rozszerzenia, które mają być używane do wyszukiwania modułów. Jeśli na przykład moduł
x jest odniesienie, spójrz w x.ext. Uwaga +libext+ jest dość standardowa w Verilog
narzędzia. Domyślnie .v i .sv.
--tylko kłaczki
Sprawdź pliki tylko pod kątem naruszeń lint, nie twórz żadnych innych danych wyjściowych.
Możesz również użyć opcji -Ściana, aby włączyć wiadomości, które są uważane za stylistyczne
i nie jest domyślnie włączone.
Jeśli projekt nie ma być całkowicie zweryfikowany, zobacz także --bbox-sys i
--bbox-unsup opcje.
--MMD
Włącz tworzenie plików zależności .d używanych do wykrywania zależności, podobnie jak
opcja gcc -MMD. Domyślnie włączone, użyj --no-MMD, aby wyłączyć.
--POSEŁ
Tworząc pliki zależności .d z --MMD, stwórz fałszywe cele. Podobne do gcc -MP
opcja.
--Medir katalog
Określa nazwę katalogu obiektów Make. Wszystkie wygenerowane pliki zostaną umieszczone
w tym katalogu. Jeśli nie określono, używany jest "obj_dir". Katalog jest tworzony, jeśli
nie istnieje i istnieją katalogi nadrzędne; w przeciwnym razie ręcznie utwórz Mdir
zanim zadzwonisz do Verilator.
--mod-przedrostek najlepsze imię
Określa nazwę, która ma być dodawana do wszystkich klas niższego poziomu. Domyślnie takie same jak
--prefiks.
--no-clk
Zapobiegaj oznaczaniu określonego sygnału jako zegara. Zobacz "--klk".
--no-szpilki64
Zgodny wstecznie alias dla „--pins-bv 33”.
--no-pomiń-identyczne
Rzadko potrzebne. Wyłącza pomijanie wykonywania programu Verilator, jeśli wszystkie pliki źródłowe są
identyczne, a wszystkie pliki wyjściowe istnieją z nowszymi datami.
+kontrola czasu pracy
Ignorowane ze względu na kompatybilność z innymi symulatorami.
-O0 Wyłącza optymalizację modelu.
-O3 Włącza powolne optymalizacje kodu generowanego przez sam Verilator (w przeciwieństwie do
"-CFLAGS -O3", który wpływa na optymalizację kompilatora C. -O3 może zmniejszyć symulację
środowiska wykonawcze kosztem czasu kompilacji. To obecnie ustawia --inline-mult -1.
-Opismo optymalizacyjne
Rzadko potrzebne. Włącza lub wyłącza określone optymalizacje, z optymalizacją
wybrany na podstawie przekazanego listu. Mała litera wyłącza optymalizację, a
duża litera umożliwia to. Jest to przeznaczone tylko do debugowania; zobacz źródło
kod dla zależnych od wersji mapowań optymalizacji na litery -O.
-o
Określ nazwę ostatecznego pliku wykonywalnego skompilowanego, jeśli używasz --exe. Domyślnie do
--prefiks, jeśli nie określono.
--bez opóźnienia-zegara na zamówienie
Rzadko potrzebne. Wyłącza poprawkę dotyczącą zamawiania zegara włącza z opóźnieniem
zadania. Ta flaga powinna być używana tylko wtedy, gdy zasugerują to programiści.
--podział wyjścia bajtów
Umożliwia dzielenie wyjściowych plików .cpp/.sp na wiele wyjść. Kiedy plik C++
przekracza określoną liczbę operacji, nowy plik zostanie utworzony w następnym
granica funkcji. Ponadto wszystkie wolne procedury zostaną umieszczone w plikach __Slow.
Przyspiesza to kompilację, ponieważ optymalizacja może być wyłączona w powolnych procedurach,
a pozostałe pliki można skompilować na maszynach równoległych. Używanie --output-split
powinien mieć tylko błahy wpływ na wydajność. Z GCC 3.3 na 2GHz Opteron,
--output-split 20000 spowoduje podzielenie na około jednominutową kompilację
kawałki.
--output-split-cfunks oświadczenia
Umożliwia dzielenie funkcji w wyjściowych plikach .cpp/.sp na wiele funkcji.
Gdy wygenerowana funkcja przekroczy określoną liczbę operacji, nowa funkcja
zostanie stworzony. Dzięki opcji --output-split umożliwi to szybszą kompilację GCC, a
mała utrata wydajności, która pogarsza się wraz ze spadkiem wartości podziału. Zauważ, że
ta opcja jest silniejsza niż --output-split w tym sensie, że --output-split nie will
podzielić wewnątrz funkcji.
--podział-wyjścia-ctrace oświadczenia
Umożliwia dzielenie funkcji śledzenia w wyjściowych plikach .cpp/.sp na wiele
Funkcje. Domyślnie to samo ustawienie, co --output-split-cfuncs.
-P Za pomocą -E wyłącza generowanie `znaczników linii i pustych linii, podobnie jak flaga GCC -P.
--kołki64
Zgodny wstecznie alias dla „--pins-bv 65”. Zauważ, że to 65, a nie 64.
--szpilki-bv szerokość
Określa wejścia/wyjścia SystemC większe lub równe szerokość bity szerokie powinny
użyj sc_bv zamiast uint32/vluint64_t. Wartość domyślna to "--pins-bv 65". Wersje
przed Verilator 3.671 domyślnie "--pins-bv 33". Im więcej sc_bv jest używane, tym gorzej
dla wydajności. Użyj atrybutu „/*verilator sc_bv*/”, aby wybrać określone porty do
być sc_bv.
--pins-sc-uint
Określa, że wejścia/wyjścia SystemC o szerokości większej niż 2 bity powinny używać sc_uint
od 2 do 64. W połączeniu z kombinacją „--szpilki-sc-biguint” daje to
in sc_uint używany między 2 a 64 i sc_biguint używany między 65 a 512.
--pins-sc-biguint
Określa, że wejścia/wyjścia SystemC o szerokości większej niż 65 bitów powinny używać sc_biguint
od 65 do 512 i sc_bv od 513 w górę. W połączeniu z
Kombinacja „--pins-sc-uint”, powoduje, że sc_uint jest używany od 2 do 64 i
sc_biguint jest używany między 65 a 512.
--piny-uint8
Określa wejścia/wyjścia SystemC, które są mniejsze niż ustawienie --pins-bv i 8
bity lub mniej powinny używać uint8_t zamiast uint32_t. Podobnie szpilki o szerokości 9-16 będą
użyj uint16_t zamiast uint32_t.
--filtr-rur komenda
Rzadko potrzebne i eksperymentalne. Verilator odrodzi określone polecenie jako
potok podprocesowy, aby umożliwić poleceniu wykonanie niestandardowych zmian w kodzie Verilog
zanim dotrze do Verilator.
Przed odczytaniem każdego pliku Verilog, Verilator przekaże nazwę pliku do podprocesu'
stdin z „read_verilog” „”. Filtr może następnie odczytać plik i wykonać
dowolne filtrowanie, jakie chce, i przesyła nową zawartość pliku z powrotem do Verilator na standardowe wyjście
z „Długością treści”. Dane wyjściowe do stderr z filtra przechodzą do Verilatora
stdout i jeśli filtr zakończy pracę ze statusem niezerowym, Verilator zakończy działanie. Zobacz
test t/t_pipe_filter na przykład.
Aby debugować dane wyjściowe filtra, spróbuj użyć opcji -E, aby zobaczyć wstępnie przetworzone dane wyjściowe.
prefix najlepsze imię
Określa nazwę klasy najwyższego poziomu i pliku makefile. Domyślnie to V poprzedzone
nazwa przełącznika --top-module lub V dodana do pierwszej nazwy pliku Verilog
przekazywane w wierszu poleceń.
--profil-cfuncs
Zmodyfikuj utworzone funkcje C++, aby obsługiwały profilowanie. Funkcje będą
zminimalizowany, aby zawierał jedną „podstawową” instrukcję, zwykle pojedynczą blokadę lub przewód
oświadczenie. (Zauważ, że spowolni to plik wykonywalny o ~5%.) Co więcej,
nazwa funkcji zostanie uzupełniona o nazwę bazową modułu Verilog i numer linii
pochodzi oświadczenie. Pozwala to na skorelowanie raportów gprof lub oprofile z
oryginalne oświadczenia źródłowe Verilog.
--prywatny
Przeciwieństwo --public. jest wartością domyślną; ta opcja istnieje dla kompatybilności wstecznej.
--publiczny
To jest tylko do użytku historycznego debugowania. Używanie go może skutkować błędną symulacją
wygenerowane zegary.
Deklaruje wszystkie sygnały i moduły jako publiczne. Spowoduje to wyłączenie optymalizacji sygnału, ponieważ
gdyby wszystkie sygnały miały /*verilator public*/ komentarze i inline. To też się zmieni
wyłączone inlining, tak jakby wszystkie moduły miały /*verilator public_module*/, chyba że moduł
konkretnie włączono go za pomocą /*verilator inline_module*/.
--report-unopptflat
Dodatkowa diagnostyka ostrzeżeń UNOPTFLAT. Obejmuje to dla każdej pętli 10 najszerszych
zmienne w pętli i 10 najbardziej rozłożonych zmiennych w pętli. To są
kandydatów do podziału na wiele zmiennych, aby przerwać pętlę.
Dodatkowo tworzy plik GraphViz DOT wszystkich silnie połączonych komponentów
w źródle skojarzonym z każdą pętlą. Jest to produkowane niezależnie od tego, czy
--dump-drzewo jest ustawione. Takie wykresy mogą pomóc w analizie problemu, ale mogą być bardzo
rzeczywiście duże.
Istnieją różne polecenia do przeglądania i manipulowania plikami DOT. Na przykład kropka
Polecenie może służyć do konwersji pliku DOT na plik PDF w celu wydrukowania. Na przykład:
kropka -Tpdf -O Vt_unoptflat_simple_2_35_unoptflat.dot
wygeneruje plik PDF Vt_unoptflat_simple_2_35_unoptflat.dot.pdf z pliku DOT.
-- do zapisania
Włącz włączenie funkcji zapisywania i przywracania w wygenerowanym modelu.
Kod użytkownika musi następnie utworzyć obiekt VerilatedSerialize lub VerilatedDeserialze
wywołanie operatorów << lub >> na wygenerowanym modelu i wszelkich innych danych procesu
potrzeby zapisane/przywrócone. Na przykład:
void save_model(const char* nazwa_pliku) {
ZweryfikowanyZapisz system operacyjny;
os.open(nazwa pliku);
os << czas_główny; // kod użytkownika musi zapisać znacznik czasu itp
os << *do góry;
}
void restore_model(const char* nazwa_pliku) {
VerilatedPrzywróć system operacyjny;
os.open(nazwa pliku);
os >> czas_główny;
os >> *do góry;
}
--sc
Określa tryb wyjściowy SystemC; zobacz także --cc.
--statystyki
Tworzy plik zrzutu ze statystykami projektu w {prefix}__stats.txt.
--stats-vars
Tworzy bardziej szczegółowe statystyki, w tym listę wszystkich zmiennych według rozmiaru (zwykły
--stats po prostu daje liczbę). Zobacz --stats, co z tego wynika.
-sv Określa, że funkcje języka SystemVerilog powinny być włączone; równoważne z „--język
1800-2005". Ta opcja jest domyślnie zaznaczona, istnieje dla zgodności z
inne symulatory.
+weryfikator systemowy+ext
Synonim „+1800-2012ext+”ext.
--top-moduł najlepsze imię
Gdy wejście Verilog zawiera więcej niż jeden moduł najwyższego poziomu, określa nazwę
moduł Verilog najwyższego poziomu, aby stać się najwyższym, i ustawia domyślne dla if --prefix
nie jest używany. Nie jest to konieczne w przypadku standardowych projektów z tylko jednym blatem.
--namierzać
Dodaje do modelu kod śledzenia przebiegu. Verilator wygeneruje dodatkowe
{prefiks}__Śledź pliki*.cpp, które będą musiały zostać skompilowane. Ponadto
verilated_vcd_sc.cpp (dla śladów SystemC) lub verilated_vcd_c.cpp (dla obu) musi być
skompilowane i połączone. Jeśli używasz plików Makefile wygenerowanych przez Verilator, będą one:
dodane jako cele źródłowe dla Ciebie. Jeśli nie używasz plików makefile Verilator,
będzie musiał dodać je ręcznie do twojego Makefile.
Wkompilowanie śledzenia może skutkować niewielkimi spadkami wydajności, nawet jeśli:
przebiegi nie są włączane podczas wykonywania modelu.
--śledzenie-głębokość poziomy
Określ liczbę poziomów głębokości, aby umożliwić śledzenie, na przykład --trace-level 1 to
zobaczyć tylko sygnały najwyższego poziomu. Domyślnie do całego modelu. Używając małej liczby
zmniejszy widoczność, ale znacznie poprawi czas działania i rozmiar pliku śledzenia.
--trace-max-tablica głębokość
Rzadko potrzebne. Określ maksymalną głębokość tablicy sygnału, który może być śledzony.
Domyślnie 32, ponieważ śledzenie dużych tablic może znacznie spowolnić symulacje śledzenia.
--trace-max-szerokość szerokość
Rzadko potrzebne. Określ maksymalną szerokość bitową sygnału, który może być śledzony.
Domyślnie 256, ponieważ śledzenie dużych wektorów może znacznie spowolnić śledzone symulacje.
--no-trace-params
Wyłącz śledzenie parametrów.
--trace-structs
Włącz śledzenie, aby pokazać nazwę spakowanej struktury, sumy i spakowanych pól tablicy,
zamiast pojedynczego, połączonego, zapakowanego autobusu. Ze względu na ograniczenia formatu pliku VCD może to:
skutkować znacznie wolniejszymi czasami śledzenia i większymi plikami śledzenia.
--trace-podkreślenie
Włącz śledzenie sygnałów zaczynających się od podkreślenia. Zwykle sygnały te są
nie jest wyprowadzany podczas śledzenia. Zobacz także --coverage-underscore.
-Ubyło
Usuwa definicję podanego symbolu preprocesora.
--liczba-rozwijania Pętle
Rzadko potrzebne. Określa maksymalną liczbę iteracji pętli, które można rozwinąć.
Zobacz także ostrzeżenie BLKLOOPINIT.
--unroll-stmts oświadczenia
Rzadko potrzebne. Określa maksymalną liczbę instrukcji w pętli dla tej pętli do
być rozwiniętym. Zobacz także ostrzeżenie BLKLOOPINIT.
--nieużywane-wyrażenie regularne regexp
Rzadko potrzebne. Określa proste wyrażenie regularne z * i ? że jeśli nazwa sygnału pasuje
wyłączy ostrzeżenie UNUSED. Domyślnie "*nieużywane*". Ustawienie go na „” wyłącza
dopasowanie.
-V Pokazuje pełną wersję, w tym informacje o konfiguracji skompilowane do
Weryfikator. (Podobne do perl -V.)
-v filename
Przeczytaj nazwę pliku jako bibliotekę Verilog. Wszelkie moduły w pliku mogą być użyte do:
rozwiąż instancje komórek w module najwyższego poziomu, w przeciwnym razie zignorowane. Uwaga -v jest sprawiedliwe
standard w narzędziach Verilog.
+verilog1995ext+ext
+verilog2001ext+ext
Synonimy dla „+1364-1995ext+”ext i „+1364-2001następny+”ext odpowiednio
-Ściana
Włącz wszystkie ostrzeżenia, w tym ostrzeżenia dotyczące stylu kodu, które zwykle są wyłączone przez
domyślna.
-Błąd-wiadomość
Przekształć określony komunikat ostrzegawczy w komunikat o błędzie. To jest generalnie do
na przykład zniechęcać użytkowników do naruszania ważnych zasad obowiązujących w całej witrynie
„-Błąd-RZECZOW.
-Wprzyszłość-wiadomość
Rzadko potrzebne. Pomijaj nieznane komentarze Verilator lub komunikaty ostrzegawcze z podanym
kod wiadomości. Jest to używane, aby umożliwić kod napisany za pomocą prag dla późniejszej wersji
Verilator do uruchomienia pod starszą wersją; dodaj argumenty -Wfuture- dla każdego kodu wiadomości
lub skomentuj, że nowa wersja obsługuje, czego nie obsługuje starsza wersja.
-Wnie-wiadomość
Wyłącz określony komunikat ostrzegawczy. To nadpisze wszystkie dyrektywy lint_on w
źródło, tj. ostrzeżenie nadal nie będzie drukowane.
-Nie-strzępiący się
Wyłącz wszystkie komunikaty ostrzegawcze związane z kłaczkami i wszystkie ostrzeżenia dotyczące stylu. To jest równoważne
do "-Bez-ALWCOMBORDER -Bez-CASE NIEUKOŃCZONY -Bez-PRZYKŁAD.NAKRYW. -Wnie-CASEX -Wnie-CASEZ.X
-Wno-CMPCONST -Wno-ENDLABEL -Wno-IMPLICIT -Wno-LITENDIAN -Wno-PINCONNECTEMTY
-Wno-PINMISSING -Wno-SYNCASYNCNET -Wno-NIENAPĘDZONA -Wno-BEZ SYGNAŁU -Wno-NIEUŻYWANE -Wno-SZEROKOŚĆ"
plus lista pokazana dla stylu Wno.
Zdecydowanie zaleca się wyczyszczenie kodu zamiast korzystania z tej opcji, jest to
przeznaczone do użytku wyłącznie podczas uruchamiania przypadków testowych kodu otrzymanego od stron trzecich.
-Wno-styl
Wyłącz wszystkie komunikaty ostrzegawcze związane ze stylem kodu (pamiętaj, że domyślnie już są
wyłączone). Jest to odpowiednik "-Wno-DECLFILENAME -Wno-DEFPARAM -Wno-INCABSPATH
-Wno-PINCONNECTEMPTY -Wno-PINNOCONNECT -Wno-SYNCASYNCNET -Wno-NIENAPĘDZONE -Wno-NIEUŻYWANE
-Wno-VARHIDDEN".
-Wno-śmiertelny
Po wykryciu ostrzeżeń wydrukuj je, ale nie wychodź z symulatora.
Komunikaty ostrzegawcze w kompilacjach są niechlujne. Zdecydowanie zaleca się posprzątanie
swój kod, użyj wbudowanego lint_off lub użyj flag -Wno-... zamiast używać tej opcji.
-Ostrzegaj-wiadomość
Włącza określony komunikat ostrzegawczy.
-Ostrzegaj-lint
Włącz wszystkie komunikaty ostrzegawcze związane z lint (pamiętaj, że domyślnie są już włączone),
ale nie wpływają na komunikaty stylu. Jest to odpowiednik „-Wwarn-ALWCOMBORDER
-Wwarn-CASE NIEKOMPLETNY -Wwarn-CASEOVERLAP -Wwarn-CASEX -Wwarn-CASEWITHX -Wwarn-CMPCONST
-Ostrzeż-ETYKIETA KOŃCOWA -Ostrzeż-IMPLICIT -Ostrzeż-LITENDIAN -Ostrzeż-PINMISSING -Ostrzeż-REALCVT
-Ostrzeż-BEZ PODPISU -Ostrzeż-SZEROKOŚĆ".
-Wwarn-styl
Włącz wszystkie komunikaty ostrzegawcze związane ze stylem kodu. Jest to równoważne z „-Wwarn
ASSIGNDLY -Wwarn-DECLFILENAME -Wwarn-DEFPARAM -Wwarn-INCABSPATH -Wwarn-PINNOCONNECT
-Ostrzeżenie-SYNCASYNCNET -Ostrzeżenie-NIENAPĘDZONE -Ostrzeżenie-NIEUŻYWANE -Ostrzeżenie-VARHIDDEN".
--x-przypisz 0
--x-przypisz 1
--x-assign szybko (domyślnie)
--x-przypisz unikalny
Steruje wartością dwustanową, która jest zastępowana po napotkaniu przypisania do X.
--x-assign=fast, wartość domyślna, konwertuje wszystkie X-y na to, co jest najlepsze dla wydajności.
--x-assign=0 konwertuje wszystkie X na 0 i jest również szybki. --x-assign=1 konwertuje wszystkie X-y na
1 s, to prawie tak szybko jak 0, ale bardziej prawdopodobne jest znalezienie błędów resetowania jako aktywnych wysokich
logika wystrzeli. --x-assign=unique wywoła funkcję do określenia wartości, to
umożliwia randomizację wszystkich Xów w celu znalezienia błędów resetowania i jest najwolniejszy, ale najbezpieczniejszy dla
znajdowanie błędów resetowania w kodzie.
Jeśli używasz --x-assign unique, możesz zainicjować swój generator liczb losowych, taki
że każdy przebieg regresji otrzymuje inną sekwencję randomizacji. Użyj systemu
srand48() lub dla Windows srand() funkcja, aby to zrobić. Prawdopodobnie będziesz też chciał
wydrukuj wybrane nasiona i kod, aby umożliwić ponowne uruchamianie z tym samym nasionem, abyś mógł
odtworzyć błędy.
Notatka. Ta opcja dotyczy tylko zmiennych, które są wyraźnie przypisane do X w
Kod źródłowy Veriloga. Początkowe wartości zegarów są ustawione na 0, chyba że --x-initial-edge to
określony. Początkowe wartości wszystkich pozostałych zmiennych przechowujących stan są ustawione tak, jakby
Określono --x-assign unique.
--x-początkowa-krawędź
Umożliwia emulację symulatorów sterowanych zdarzeniami, które zazwyczaj wyzwalają krawędź na
przejście z X na 1 („posge”) lub X na 0 („negedge”). Tak więc następujący kod,
gdzie "rst_n" jest niezainicjowane ustawi "res_n" na "1'b1", gdy "rst_n" jest ustawione po raz pierwszy
do zera:
reg res_n = 1'b0;
zawsze zaczyna się @(negedge rst_n)
if (rst_n == 1'b0) rozpocznij
res_n <= 1'b1;
zakończenia
zakończenia
W Verilator domyślnie niezainicjowane zegary otrzymują wartość zero, więc powyższe
blok „zawsze” nie uruchamiał się.
Chociaż nie jest to dobra praktyka, istnieją pewne projekty, które opierają się na wyzwalaniu XX 0 a
„negage”, szczególnie w sekwencjach resetowania. Użycie --x-initial-edge z Verilatorem spowoduje
powtórzyć to zachowanie. Zapewni to również, że XX 1 wywoła „posge”.
Notatka. Niektórzy użytkownicy zgłaszali, że użycie tej opcji może wpłynąć na konwergencję, i że
może być konieczne użycie --converge-limit w celu zwiększenia liczby zbieżności
iteracje. Może to być kolejną wskazówką na problemy z modelowanym projektem, które:
powinna być skierowana.
-y reż
Dodaj katalog do listy katalogów, w których należy szukać plików dołączanych
lub biblioteki. Trzy flagi -y, +incdir i -I dają podobny efekt; +incdir i +y
są dość standardowe w narzędziach Verilog, podczas gdy -I jest aliasem zgodności z GCC.
Verilator domyślnie używa bieżącego katalogu ("-y .") i dowolnego określonego --Mdir
te domyślne ścieżki są używane po dowolnych katalogach określonych przez użytkownika. To pozwala na '-y
"$(pwd)"' do użycia, jeśli wymagane są bezwzględne nazwy plików dla komunikatów o błędach zamiast
względne nazwy plików.
PRZYKŁAD C + + WDRAŻAJĄC
Skompilujemy ten przykład do C++.
mkdir test_nasz
cd test_nasz
kot < nasz.v
moduł nasz;
początkowy begin $display("Witaj świecie"); $zakończ; kończyć się
moduł końcowy
EOF
kot < sim_main.cpp
#include "Vour.h"
#include "verilated.h"
int main(int argc, char **argv, char **env) {
Veriated::commandArgs(argc, argv);
Vour* top = nowy Vour;
while (!Verilated::gotFinish()) { top->eval(); }
usuń górę;
wyjście(0);
}
EOF
Jeśli zainstalowałeś Verilator ze źródeł lub tarballa, ale nie w ramach twojej operacji
system (jako RPM), najpierw należy wskazać zestaw:
eksportuj VERILATOR_ROOT=/ścieżka/do/gdzie/werilator/był/zainstalowany
eksportuj PATH=$VERILATOR_ROOT/bin:$PATH
Teraz uruchamiamy Verilator na naszym małym przykładzie.
verilator -Wall --cc nasz.v --exe sim_main.cpp
Widzimy kod źródłowy w katalogu "obj_dir". Zobacz sekcję PLIKI poniżej, aby uzyskać informacje na temat
opisy niektórych plików, które zostały utworzone.
ls -l katalog_obiektu
Następnie możemy go skompilować
cd katalog_obiektu
make -j -f Vour.mk Vour
(Verilator zawiera domyślną regułę kompilacji i regułę linkowania, ponieważ użyliśmy --exe i przekazaliśmy a
plik .cpp w wierszu polecenia programu Verilator. Możesz także napisać własne reguły kompilacji, ponieważ
pokażemy w sekcji SYSTEMC.)
A teraz to uruchamiamy
Płyta CD ..
katalog_obiektu/Vour
I otrzymujemy jako wyjście
Witaj świecie
- nasz.v:2: Verilog $finish
Naprawdę, lepiej napisać plik Makefile, który zrobi to wszystko za Ciebie. Wtedy, kiedy twój
zmiany źródła automatycznie uruchomi wszystkie te kroki. Zobacz katalog test_c w
dystrybucja na przykład.
PRZYKŁAD SYSTEM C WDRAŻAJĄC
To jest przykład podobny do powyższego, ale przy użyciu SystemC.
mkdir test_nasz_sc
cd test_nasz_sc
kot < nasz.v
moduł nasz (clk);
wejście Clk; // Zegar jest wymagany do początkowej aktywacji
zawsze @ (posege clk)
rozpocząć $display("Witaj świecie"); $zakończ; kończyć się
moduł końcowy
EOF
kot < sc_main.cpp
#include "Vour.h"
int sc_main(int argc, char **argv) {
Veriated::commandArgs(argc, argv);
sc_clock clk ("clk",10, 0.5, 3, prawda);
Vour* góry;
top = new Vour("góra"); // SP_CELL (góra, Vour);
góra->clk(clk); // SP_PIN (góra, clk, clk);
while (!Verilated::gotFinish()) { sc_start(1, SC_NS); }
usuń górę;
wyjście(0);
}
EOF
Jeśli zainstalowałeś Verilator ze źródeł lub tarballa, ale nie w ramach twojej operacji
system (jako RPM), najpierw należy wskazać zestaw:
eksportuj VERILATOR_ROOT=/ścieżka/do/gdzie/werilator/był/zainstalowany
eksportuj PATH=$VERILATOR_ROOT/bin:$PATH
Teraz uruchamiamy Verilator na naszym małym przykładzie.
verilator -Wall --sc nasz.v
Następnie możemy go skompilować
make -j -f Vour.mk Vour__ALL.a
make -j -f Vour.mk ../sc_main.o verilated.o
I połącz się z SystemC. Pamiętaj, że Twoja ścieżka do bibliotek może się różnić w zależności od
system operacyjny.
eksportuj SYSTEMC_LIBDIR=/ścieżka/do/gdzie/libsystemc.a/exists
eksportuj LD_LIBRARY_PATH=$SYSTEMC_LIBDIR:$LD_LIBRARY_PATH
# Może być potrzebny, jeśli SystemC 2.3.0
eksportuj SYSTEMC_CXX_FLAGS=-pthread
g++ -L$SYSTEMC_LIBDIR ../sc_main.o Vour__ALL*.o zweryfikowane.o \
-o Vour -lsystemc
A teraz to uruchamiamy
Płyta CD ..
katalog_obiektu/Vour
I otrzymujemy to samo wyjście, co w przykładzie C++:
Witaj świecie
- nasz.v:2: Verilog $finish
Naprawdę, lepiej jest użyć Makefile, aby zrobić to wszystko za Ciebie. Wtedy, kiedy twoje źródło
zmiany, automatycznie uruchomi wszystkie te kroki. Zobacz katalog test_sc w
na przykład dystrybucja.
BENCHMARKOWANIE & OPTYMALIZACJA
Aby uzyskać najlepszą wydajność, uruchom Verilator z flagami „-O3 --x-assign=fast --noassert”. ten
Flaga -O3 będzie wymagać dłuższego czasu kompilacji, a --x-assign=fast może zwiększyć ryzyko
resetowanie błędów w handlu pod kątem wydajności; zobacz powyższą dokumentację dla tych flag.
Drobne zmiany w kodzie Veriloga mogą również dać duże wygrane. Nie powinieneś mieć żadnych UNOPTFLAT
ostrzeżenia z Verilator. Naprawienie tych ostrzeżeń może spowodować ogromne ulepszenia; jeden użytkownik
naprawiono jedno ostrzeżenie UNOPPTFLAT, dokonując prostej zmiany w zatrzasku zegara używanego do bramy;
zegarów i uzyskał 60% poprawę wydajności.
Poza tym wydajność modelu Verilated zależy głównie od twojego kompilatora C++ i
rozmiar pamięci podręcznej twojego procesora.
Domyślnie plik lib/verilated.mk ma wyłączoną optymalizację. To jest dla
korzyść dla nowych użytkowników, ponieważ skraca czas kompilacji kosztem czasu pracy. Dodać
optymalizacja jako domyślna, ustaw jedną z trzech zmiennych, OPT, OPT_FAST lub OPT_SLOW
lib/zweryfikowany.mk. Lub użyj opcji -CFLAGS i/lub -LDFLAGS w poleceniu weryfikatora
line, aby przekazać flagi bezpośrednio do kompilatora lub konsolidatora. Lub tylko na jeden bieg, zdaj
je w wierszu poleceń, aby:
make OPT_FAST="-O2" -f Vour.mk Vour__ALL.a
OPT_FAST określa optymalizacje dla tych programów, które są częścią szybkiej ścieżki, głównie
kod, który jest wykonywany w każdym cyklu. OPT_SLOW określa optymalizacje dla plików o wolnej ścieżce
(plus śledzenie), które wykonują się rzadko, ale kompilacja zabiera dużo czasu
optymalizacja włączona. OPT określa ogólną optymalizację i wpływa na wszystkie kompilacje, w tym
mają wpływ na OPT_FAST i OPT_SLOW. Aby uzyskać najlepsze wyniki, użyj OPT="-O2" i połącz z
"-statyczny". Prawie takie same wyniki można uzyskać przy znacznie lepszych czasach kompilacji z
OPT_FAST="-O1 -fstrict-aliasing". Wyższa optymalizacja, taka jak „-O3”, może pomóc, ale gcc
czasy kompilacji mogą być zbyt długie w trybie O3 nawet przy średnich projektach. Alternatywnie, niektóre
większe projekty zgłaszają lepszą wydajność przy użyciu „-Os”.
Niestety użycie optymalizatora z plikami SystemC może spowodować, że kompilacje będą brać
kilka minut. (Biblioteki SystemC mają wiele małych wbudowanych funkcji, które sterują
orzechy kompilatora.)
Aby uzyskać najlepsze wyniki, użyj GCC 3.3 lub nowszego. GCC 3.2 i wcześniejsze wersje zawierają błędy optymalizacji
wykrywanie aliasingu wskaźnika, co może spowodować dwukrotną utratę wydajności.
Jeśli będziesz przeprowadzać wiele symulacji na jednej kompilacji, zbadaj informacje zwrotne
kompilacja. W przypadku GCC, użycie -fprofile-arcs, a następnie -fbranch-probabilities da wynik
kolejne 15% lub więcej.
Nowoczesne kompilatory obsługują również optymalizację czasu łącza (LTO), co może pomóc, zwłaszcza jeśli
łączysz w kodzie DPI. Aby włączyć LTO w GCC, przekaż "-flto" zarówno w kompilacji, jak i linku.
Uwaga LTO może powodować nadmierne czasy kompilacji w przypadku dużych projektów.
Jeśli używasz własnych plików makefile, możesz skompilować Verilated kod za pomocą
-DVL_INLINE_OPT=w linii. Spowoduje to wbudowanie funkcji, jednak wymaga to wszystkich cpp
pliki być kompilowane w jednym uruchomieniu kompilatora.
Możesz odkryć dalsze możliwości dostrajania, profilując kod Verilog. Posługiwać się
--profile-cfuncs programu Verilator, a następnie -g -pg GCC. Następnie możesz uruchomić oprofile lub
gprof, aby zobaczyć, gdzie w kodzie C++ spędza się czas. Uruchom wyjście gprof przez
verilator_profcfunc i powie Ci, jakie numery linii Verilog, na których większość
spędza się czas.
Po zakończeniu poinformuj autora o wynikach. Lubię mieć oko na to, jak Verilator
porównuje i może być w stanie zaproponować dodatkowe ulepszenia.
Korzystaj z Verilator online za pomocą usług onworks.net