20 / 37 · Concetto
generate: costruire circuiti statici con cicli
Usa genvar e generate-if per gerarchie nominate e controlla l'ordine delle lane.
Le lezioni sono gratuite. Iscriviti per salvare i progressi.
Il ciclo crea istanze, non cicli di clock
genvar/generate ripetono struttura statica prima dell'esecuzione. Un ciclo in always_comb descrive calcolo procedurale il cui hardware è determinato in sintesi. Nessuno implica automaticamente un'iterazione per clock; elaborazione seriale richiede stato e controllore. Qui il bus packed è diviso in LANES parole di W bit, ciascuna con parità. I parametri sono positivi.
module lane_parity #(
parameter integer W = 8,
parameter integer LANES = 3
) (
input logic [W*LANES-1:0] data,
output logic [LANES-1:0] parity
);
genvar lane;
generate
for (lane = 0; lane < LANES; lane = lane + 1) begin : g_lane
wire [W-1:0] word_data;
assign word_data = data[lane*W +: W];
assign parity[lane] = ^word_data;
end
endgenerate
endmoduledata[base +: W] seleziona W bit da base verso indici maggiori; W è costante. W=8, LANES=3 collega 7:0 alla lane 0,15:8 alla 1,23:16 alla 2. g_lane crea gerarchia stabile come g_lane[1].word_data.
Leggere l'ordine delle lane
data=24'h03_01_80 contiene 80,01,03 a partire dalla lane 0. Le parità 1,1,0 danno parity[2:0]=011. Il byte a sinistra è lane 2. Distingui indice, visualizzazione e trasmissione. Tutte calcolano simultaneamente senza latenza registrata. Più LANES aumenta logica, non clock; fanout, instradamento e timing fisico richiedono verifiche aggiuntive.
generate-if sceglie struttura fissa
La condizione è costante, per esempio un parametro che include un registro. Un segnale dinamico appartiene a combinatorio o blocco su clock. Aggiungere un registro cambia validità, contratto e checker. Non disabilitare un bus con zero:[−1:0] non è un oggetto sicuro a larghezza nulla. Rifiuta la configurazione o mantieni un'interfaccia definita in un ramo statico.
Esercizio: rilevare lane scambiate
Prova l'esempio e accendi un bit in ogni lane: solo la parità corrispondente cambia. Due bit attivi danno parità pari 0. Dati uguali in tutte le lane nascondono slice scambiate. Estrai numericamente le lane nelil modello di riferimento e conta gli 1. Prova W=1,8 e LANES=1,3 per minimi, byte e gerarchia. Poi registra la parità e definisci reset, enable e confronto con bus attuale o acquisito al fronte precedente.