Menu
Coddy logo textTech

Verilog Cheat Sheet: ściąga z Veriloga

Ostatnia aktualizacja

Struktura modułu i porty

Moduł to podstawowy element konstrukcyjny: ma nazwę i listę portów.

SkładniaZnaczenie
module adder(...); ... endmoduleDefinicja modułu i jego ciała
input clk;Port wejściowy
output q;Port wyjściowy
output reg q;Wyjście sterowane z bloku always
input [7:0] data;8-bitowa magistrala wejściowa (wektor)
inout sda;Port dwukierunkowy
adder u1 (.a(x), .b(y), .sum(s));Instancja modułu z nazwanymi portami

Typy danych

wire modeluje połączenie; reg przechowuje wartość przypisywaną przez kod proceduralny.

ElementCo robi
wire w;Sieć sterowana przez assign lub wyjście modułu
reg r;Przechowuje wartość przypisaną w bloku always/initial
wire [3:0] bus;Wektor 4-bitowy (bity od 3 do 0)
reg [7:0] count;Rejestr 8-bitowy
bus[2]Wybór pojedynczego bitu
bus[3:1]Wybór zakresu bitów (part-select)
reg mem [0:255];Pamięć: tablica rejestrów
parameter WIDTH = 8;Nazwana stała modułu

Literały liczbowe

Format to <size>'<base><value>: rozmiar w bitach, podstawa jako b/o/d/h.

SkładniaZnaczenie
4'b10104-bitowa liczba binarna, wartość 10
8'hFF8-bitowa liczba szesnastkowa, wartość 255
8'hffTo samo: wielkość liter cyfr szesnastkowych nie ma znaczenia
16'd25516-bitowa liczba dziesiętna, wartość 255
3'o73-bitowa liczba ósemkowa, wartość 7
8'b1010_1100Podkreślniki grupują cyfry dla czytelności
1'bxNieznana wartość bitu (x)
1'bzWartość bitu w stanie wysokiej impedancji (z)

Operatory

Operatory bitowe, logiczne, porównania i redukcji.

OperatorCo robi
& | ^ ~Bitowe AND, OR, XOR, NOT
&& || !Logiczne AND, OR, NOT (zwracają 1 bit)
== != < > <= >=Operatory porównania
<< >>Przesunięcie w lewo i w prawo
+ - * / %Operatory arytmetyczne
&busRedukcja AND (AND wszystkich bitów)
|busRedukcja OR (OR wszystkich bitów)
^busRedukcja XOR (parzystość wszystkich bitów)
{a, b}Konkatenacja; {4{1'b1}} powiela do 4'b1111

Przypisanie ciągłe

assign steruje sygnałem wire w sposób ciągły: używaj go do logiki kombinacyjnej.

SkładniaZnaczenie
assign y = a & b;Steruje y wynikiem AND z a i b
assign sum = a + b;Ciągłe obliczanie sumy
assign y = sel ? a : b;Operator trójargumentowy: multiplekser 2 na 1
assign {c, s} = a + b;Przechwycenie przeniesienia i sumy naraz
assign y = ~en;Sterowanie sygnałem wire przez zanegowany sygnał

Bloki proceduralne

always i initial wykonują instrukcje; lista czułości decyduje, kiedy.

SkładniaZnaczenie
always @(*) begin ... endLogika kombinacyjna (każda zmiana wejścia)
always @(posedge clk)Wykonanie na każdym zboczu narastającym zegara (sekwencyjne)
always @(negedge clk)Wykonanie na każdym zboczu opadającym zegara
always @(posedge clk or posedge rst)Blok taktowany z asynchronicznym resetem
initial begin ... endJedno wykonanie w chwili 0 (testbenche, tylko symulacja)
begin ... endGrupowanie kilku instrukcji
#10Opóźnienie o 10 jednostek czasu (tylko symulacja)

Przypisania blokujące i nieblokujące

Używaj = do logiki kombinacyjnej, a <= do taktowanej logiki sekwencyjnej.

SkładniaZnaczenie
a = b;Blokujące: wykonuje się po kolei, natychmiast
a <= b;Nieblokujące: najpierw odczyt wszystkich prawych stron, potem przypisanie
always @(*) y = a & b;Logika kombinacyjna: używaj blokującego =
always @(posedge clk) q <= d;Przerzutnik: używaj nieblokującego <=
Mieszanie = i <= w jednym blokuUnikaj tego: to częste źródło błędów

Instrukcje sterujące

Warunki i rozgałęzienia wielokierunkowe w blokach proceduralnych.

SkładniaZnaczenie
if (cond) ... else ...Instrukcja warunkowa
if (a) x = 1; else x = 0;If/else w jednej linii
case (sel) ... endcaseRozgałęzienie wielokierunkowe według wartości
2'b00: y = a;Element case
default: y = 0;Domyślny element case
for (i = 0; i < 8; i = i + 1)Pętla (często w generate lub symulacji)
repeat (4) @(posedge clk);Powtórzenie instrukcji N razy

Popularne wzorce

Elementy, które piszesz raz po raz, oraz zadania testbenchy.

WzorzecSkładnia
Przerzutnik Dalways @(posedge clk) q <= d;
Rejestr z resetemalways @(posedge clk) if (rst) q <= 0; else q <= d;
Licznikalways @(posedge clk) count <= count + 1;
Rejestr stanu FSMalways @(posedge clk) state <= next_state;
Logika następnego stanu FSMalways @(*) case (state) ... endcase
Wypisanie wartości$display("q = %b", q);
Wypisanie przy zmianie$monitor("t=%0t q=%b", $time, q);
Zakończenie symulacji$finish;

Cała składnia Veriloga, której potrzebujesz, na jednej stronie. Ten Verilog cheat sheet to szybka ściąga z języka opisu sprzętu: deklarowanie modułów i portów, wybór typów danych, pisanie logiki kombinacyjnej i sekwencyjnej oraz wzorce bloków always, które opisują prawdziwe układy.

Składnia opisana tutaj to standardowy Verilog (IEEE 1364), który działa w popularnych symulatorach, takich jak Icarus Verilog i Verilator. Skopiuj to, czego potrzebujesz, albo sprawdź na żywo w edytorze online Veriloga: napisz moduł, zasymuluj go i zobacz wynik w przeglądarce.

Verilog cheat sheet: FAQ

Czy ten Verilog cheat sheet jest darmowy?
Tak. Ten Verilog cheat sheet jest całkowicie darmowy i nie wymaga rejestracji. Dodaj go do zakładek i wracaj, gdy potrzebujesz sprawdzić składnię, operator albo wzorzec bloku always.
Czym różni się wire od reg?
wire modeluje fizyczne połączenie i musi być sterowany w sposób ciągły, przez instrukcję assign lub wyjście modułu, więc używasz go dla sieci kombinacyjnych. reg przechowuje wartość, dopóki kod proceduralny jej nie zmieni, więc używasz go dla wszystkiego, co jest przypisywane w bloku always lub initial. Wbrew nazwie reg nie zawsze staje się sprzętowym rejestrem; oznacza tylko, że wartość jest ustawiana proceduralnie.
Czym różni się przypisanie blokujące od nieblokującego?
Przypisanie blokujące (=) wykonuje się natychmiast i po kolei, jak zwykła instrukcja w programie, więc używaj go do logiki kombinacyjnej w blokach always @(*). Przypisanie nieblokujące (<=) najpierw oblicza wszystkie prawe strony, a potem razem aktualizuje lewe, co poprawnie modeluje przerzutniki, więc używaj go w taktowanych blokach always @(posedge clk). Mieszanie obu w jednym bloku to klasyczne źródło błędów symulacji.
Czy mogę ćwiczyć Veriloga online?
Tak. Otwórz edytor online Veriloga, aby napisać moduł, zasymulować go i zobaczyć wynik w przeglądarce, bez instalacji. Gdy chcesz nauki krok po kroku, darmowy interaktywny kurs Veriloga w Coddy przeprowadzi cię od modułów i typów danych do bloków always i maszyn stanów.
Czy ta ściąga nadaje się dla początkujących?
Tak. Jest uporządkowana od podstaw (moduły, porty i typy danych) do logiki sekwencyjnej i wzorców FSM, więc zaczniesz od górnych sekcji, a z czasem przejdziesz do opisywania prawdziwych układów.
Ilustracja języków programowania w Coddy

Naucz się języka Verilog z Coddy

ZACZNIJ