Operator konkatenacji
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 27 z 90.
Operator konkatenacji { }</code łączy wiele sygnałów, stałych lub wyrażeń w jeden większy wektor. Używa się go, gdy trzeba połączyć bity, aby utworzyć szersze wartości.</p><h3>Jakie wartości można łączyć konkatenacją</h3><p>Możesz łączyć konkatenacją:</p><ul><li data-list-item-id="e3bae45a6a301702eb08c24847a21f825"><strong>Przewody i rejestry</strong>: dowolny sygnał</li><li data-list-item-id="ec1e77a5535b1757b38688ed5f00758d3"><strong>Stałe</strong>: liczby takie jak <code>4'b1010 lub 8'hFF
- Wyrażenia: wyniki operacji takich jak
a + b - Replikacje: powtarzanie wartości wielokrotnie
Wszystkie łączone wartości muszą mieć stałą, znaną szerokość.
Podstawowa składnia: {value1, value2, value3, ...} Szerokość wyniku jest sumą szerokości poszczególnych wartości.
Przykłady
Połącz dwie 4-bitowe wartości w 8 bitów:
reg [3:0] high, low;
reg [7:0] word;
word = {high, low}; // high staje się górnymi 4 bitami, a low dolnymi 4 bitamiPołącz ze stałymi:
data = {4'b1010, 4'b0000}; // 8'b10100000Połącz więcej niż dwa:
full = {a, b, c, d}; // All widths add upPowielanie
Możesz powtórzyć wartość wiele razy, używając {n{value}}:
repeated = {4{4'b1010}}; // 16'b1010101010101010 (repeat 4 times)Jest to przydatne przy rozszerzaniu znaku:
signed_8bit = {{4{sign_bit}}, value_4bit};Przykład kodu
module concatenation_demo;
reg [3:0] upper, lower;
reg [7:0] combined;
reg [11:0] repeated;
initial begin
upper = 4'b1010;
lower = 4'b1100;
combined = {upper, lower}; // 10101100
repeated = {3{4'b1010}}; // 101010101010
$display("{upper, lower} = %b", combined);
$display("{3{4'b1010}} = %b", repeated);
$finish;
end
endmoduleWynik:
{upper, lower} = 10101100
{3{4'b1010}} = 101010101010Ważne uwagi
- Kolejność ma znaczenie:
{a, b}różni się od{b, a} - Wszystkie części muszą mieć stałe szerokości (bez liczb o nieokreślonej szerokości)
- Konkatenacji można używać zarówno po lewej, jak i po prawej stronie przypisań
Wyzwanie
Zapisz poprawne wyrażenia konkatenacji dla każdego zadania.
Co zrobić:
- Połącz
aibw 8-bitowy wynik i zapisz go wcombine1 - Połącz
c,diew 12-bitowy wynik i zapisz go wcombine2 - Połącz
fi dwie kopiegw 12-bitowy wynik i zapisz go wcombine3
Spróbuj swoich sił
module concatenation_challenge;
reg [3:0] a, b;
reg [3:0] c, d, e;
reg [3:0] f, g;
reg [7:0] combine1;
reg [11:0] combine2, combine3;
initial begin
a = 4'b1010;
b = 4'b0101;
c = 4'b1111;
d = 4'b0000;
e = 4'b1100;
f = 4'b1001;
g = 4'b0110;
combine1 = ______; // Combine a and b into an 8-bit result
combine2 = ______; // Combine c, d, and e into a 12-bit result
combine3 = ______; // Combine f and two copies of g into a 12-bit result
$display("{a, b} = %b", combine1);
$display("{c, d, e} = %b", combine2);
$display("{f, g, g} = %b", combine3);
$finish;
end
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