Menu
Coddy logo textTech

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;
end

I 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.

challenge icon

Sfida

Medio

Implementa 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;
endmodule
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Progettazione e verifica RTL

Esercitati da solo: Compilatore Verilog online