Operatore di concatenazione
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 27 di 90.
L'operatore di concatenazione { } combina più segnali, costanti o espressioni in un unico vettore più grande. Si usa ogni volta che devi unire bit per formare valori più ampi.
Quali valori funzionano con la concatenazione
Puoi concatenare:
- Wire e registri: qualsiasi segnale
- Costanti: numeri come
4'b1010o8'hFF
- Espressioni: risultati di operazioni come
a + b - Replicazioni: ripetere un valore più volte
Tutti i valori concatenati devono avere larghezze fisse e note.
Sintassi di base: {value1, value2, value3, ...} La larghezza del risultato è la somma di tutte le larghezze individuali.
Esempi
Combina due valori a 4 bit in 8 bit:
reg [3:0] high, low;
reg [7:0] word;
word = {high, low}; // high diventa i 4 bit più significativi, low diventa i 4 bit meno significativiCombina con le costanti:
data = {4'b1010, 4'b0000}; // 8'b10100000Combina più di due:
full = {a, b, c, d}; // All widths add upReplicazione
Puoi ripetere un valore più volte usando {n{value}}:
repeated = {4{4'b1010}}; // 16'b1010101010101010 (repeat 4 times)Questo è utile per l'estensione del segno:
signed_8bit = {{4{sign_bit}}, value_4bit};Esempio di codice
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
endmoduleOutput:
{upper, lower} = 10101100
{3{4'b1010}} = 101010101010Note importanti
- L’ordine è importante:
{a, b}è diverso da{b, a} - Tutte le parti devono avere larghezze fisse (nessun numero senza dimensione)
- La concatenazione può essere usata sia sul lato sinistro che su quello destro delle assegnazioni
Sfida
Scrivi le espressioni di concatenazione corrette per ogni attività.
Cosa fare:
- Concatena
aebin un risultato a 8 bit e memorizzalo incombine1 - Concatena
c,dedein un risultato a 12 bit e memorizzalo incombine2 - Concatena
fe due copie digin un risultato a 12 bit e memorizzalo incombine3
Provalo tu
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
endmoduleQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
1Introduzione
Cos'è VerilogHardware e software a confrontoIl tuo primo moduloCommentiLivelli di astrazione della progettazione4Operatori - Parte 1
Operatori aritmeticiOperatore moduloOperatori di confrontoRiepilogo - Matematica sempliceOperatori bitwise7Assegnazioni e porte
Assegnazione continuaAssegnazioni con operatoriPrimitive di porte integratePorte AND, OR e NOTPorte XOR e XNORRiepilogo: circuito con porte logiche10Decisioni
Istruzione ifIf-ElseRiepilogo - Comparatore sempliceIstruzione caseCasex e casezRiepilogo - Progettazione di una ALU5Operatori Parte 2
Operatori logiciOperatori di riduzioneOperatori di scorrimentoOperatore di concatenazioneOperatore condizionaleRiepilogo - Sfida sugli operatori3Sistema numerico
Rappresentazione binariaNumeri con dimensione specificataNumeri senza dimensione specificataNumeri negativiValori speciali X e ZRiepilogo - Formati numerici6Moduli
Struttura di un moduloPorte di input e outputPorte InoutIstanziazione di un moduloMappatura delle porte per nomeMappatura delle porte per ordineRiepilogo - Costruire un modulo9Blocchi procedurali
Blocco alwaysBlocco initialLista di sensibilitàAssegnazione bloccanteAssegnazione non bloccanteRiepilogo: always vs initial12Progetto Multiplexer
Progettazione di un mux da 2 a 1Progettazione di un mux da 4 a 1Esercitati da solo: Compilatore Verilog online