Pipelining di Dati e Valid
Fa parte della sezione Progettazione e verifica RTL del percorso Verilog di Coddy. Lezione 18 di 38.
Le pipeline separano il lavoro tra i registri. Un flag di validità viaggia accanto a ogni elemento di dati, così una fase a valle può distinguere un campione da una bolla. Con le assegnazioni non bloccanti, una fase successiva legge il valore precedente di una fase anteriore sullo stesso fronte. Il reset dovrebbe invalidare il lavoro in corso.
Estratto pertinente; le dichiarazioni e le connessioni circostanti sono fornite nella sfida.
always @(posedge clk) begin
stage <= data;
stage_valid <= in_valid;
result <= stage;
out_valid <= stage_valid;
endI dati e la loro validità attraversano lo stesso numero di registri.
Allinea i dati e la validità in ogni fase della pipeline e azzera la validità al reset.
Sfida
MedioImplementa una pipeline a due stadi di registri. A ogni fronte non di reset, il primo stadio acquisisce a e in_valid. Il secondo stadio usa i valori precedenti del primo stadio: out_valid diventa il suo valid precedente e y diventa il suo dato precedente più uno modulo 256 quando è valido, altrimenti zero. Il segnale sincrono rst azzera entrambi gli stadi e le uscite. Colonne di output: y, out_valid. Tutti i segnali di controllo e i dati sono stabili prima di ogni fronte di salita del clock; i risultati vengono osservati dopo.
Completa design.v e mantieni invariati i nomi del modulo e le porte. Il testbench.v bloccato fornisce le variazioni degli ingressi e stampa le uscite dopo che si sono stabilizzate. Sceglie uno scenario usando un argomento del simulatore come +CASE=1; non è richiesto input standard. Non aggiungere stampe, ritardi o terminazione della simulazione al design. L'output previsto è una riga di valori decimali per ogni osservazione, separati da uno spazio e terminati da un a capo.
Provalo tu
module dut (input clk, input rst, input in_valid, input [7:0] a, output reg [7:0] y, output reg out_valid);
// Sostituisci questo segnaposto con il tuo progetto.
initial y = 0;
initial out_valid = 0;
endmoduleQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Progettazione e verifica RTL
1RTL combinatorio affidabile
I valori predefiniti evitano i latchEncoder di prioritàConvalida one-hotDecodifica sicura dei caseRiepilogo - Router delle richieste4RTL Sequenziale con Controllo
Priorità di Reset e EnableContatori SaturantiPipelining di Dati e ValidRilevamento dei Fronti CampionatiRiepilogo - Contatore di Eventi2Larghezze e aritmetica con segno
Preservare i bit di riportoConfronti con segnoShift aritmetici a destraOverflow e saturazioneRiepilogo - Differenza con segnoEsercitati da solo: Compilatore Verilog online