Przypisanie z operatorami
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 38 z 90.
Gdy zrozumiesz przypisanie ciągłe, możesz połączyć je z operatorami, aby tworzyć przydatną logikę. Instrukcja assign może używać dowolnego operatora do sterowania przewodem.
Podstawowa składnia
assign wire_name = expression;Wyrażenie może zawierać:
- Operatory arytmetyczne (
+,-,*,/) - Operatory bitowe (
&,|,^,~) - Operatory logiczne (
&&,||,!)
- Operatory porównania (
>,<,==,!=) - Operatory przesunięcia (
<<,>>) - Operator warunkowy (
? :)
Przykłady z różnymi operatorami
Bitowe AND:
assign out = a & b;Dodawanie:
assign sum = a + b;Porównanie:
assign is_greater = (a > b);Warunkowe (multiplekser):
assign out = sel ? a : b;Przesunięcie:
assign shifted = data << 2;Konkatenacja:
assign bus = {high_byte, low_byte};Przykład kodu
module assign_operators (
input [3:0] a, b,
input sel,
output [3:0] and_out,
output [4:0] sum_out,
output is_equal,
output mux_out
);
assign and_out = a & b; // Bitowa operacja AND
assign sum_out = a + b; // Dodawanie
assign is_equal = (a == b); // Porównanie
assign mux_out = sel ? a : b; // Operacja warunkowa (multiplekser)
endmoduleWiele operatorów w jednym przypisaniu
Możesz łączyć operatory w jednym wyrażeniu:
assign result = (a & b) | (c ^ d);
assign final = (a + b) > (c - d);
assign parity = ^data; // Redukcyjny XOR (nieparzysta liczba jedynek)Kolejność operatorów
Verilog stosuje standardową kolejność operatorów. Użyj nawiasów ( ), aby jasno wyrazić swoje intencje:
// Niejasne
assign out = a & b | c;
// Jasne
assign out = (a & b) | c;Wyzwanie
Dodaj brakujące instrukcje assign na podstawie zadań.
Co należy zrobić:
- Ustaw
and_resultnainput_a AND input_b(bitowo) - Ustaw
or_resultnainput_a OR input_b(bitowo) - Ustaw
xor_resultnainput_a XOR input_b(bitowo) - Ustaw
not_resultnaNOT input_a(bitowo)
Spróbuj swoich sił
module assign_challenge (
input input_a,
input input_b,
output and_result,
output or_result,
output xor_result,
output not_result
);
// TODO: Dodaj instrukcje assign dla:
// and_result = input_a & input_b
// or_result = input_a | input_b
// xor_result = input_a ^ input_b
// not_result = ~input_a
endmoduleTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
1Wprowadzenie
Czym jest VerilogSprzęt a oprogramowanieTwój pierwszy modułKomentarzePoziomy abstrakcji projektu4Operatory, część 1
Operatory arytmetyczneOperator moduloOperatory porównaniaPowtórka — prosta matematykaOperatory bitowe7Przypisania i bramki
Przypisanie ciągłePrzypisanie z operatoramiWbudowane prymitywy bramekBramki AND, OR i NOTBramki XOR i XNORPodsumowanie — układ z bramek logicznych10Podejmowanie decyzji
Instrukcja ifIf-elsePowtórka – prosty komparatorInstrukcja caseCaseX i CaseZPowtórka – projektowanie ALU13Odmierzanie czasu i opóźnienia
Czym są opóźnieniaOpóźnienia bramekOpóźnienia przypisańDyrektywa timescaleGenerowanie zegaraPodsumowanie — kontrola czasu2Typy danych
Typ WireTyp RegLiczby całkowite i rzeczywisteWektoryTabliceParametryPowtórka — deklarowanie sygnałów5Operatory — część 2
Operatory logiczneOperatory redukcjiOperatory przesunięciaOperator konkatenacjiOperator warunkowyPowtórzenie — wyzwanie z operatorami11Pętle
Pętla forPętla whilePętla repeatPętla nieskończonaInstrukcja wyłączaniaPowtórka — wzorce pętli3System liczbowy
Reprezentacja binarnaLiczby o określonej szerokościLiczby o nieokreślonej szerokościLiczby ujemneWartości specjalne X i ZPodsumowanie — formaty liczb6Moduły
Struktura modułuPorty wejściowe i wyjściowePorty dwukierunkoweInstancjonowanie modułuMapowanie portów według nazwMapowanie portów według kolejnościPodsumowanie — zbuduj moduł9Bloki proceduralne
Blok alwaysBlok initialLista czułościPrzypisanie blokującePrzypisanie nieblokującePodsumowanie — always a initial12Projekt multipleksera
Projekt multipleksera 2 do 1Projekt multipleksera 4 do 115Sterownik sygnalizacji świetlnej
Definiowanie stanówLogika maszyny stanówPoćwicz samodzielnie: Kompilator Verilog online