Altifigence Academy

14 / 24 · Concetto

Progetta un registro elastico con una posizione

Accetta in una posizione vuota oppure sostituisci un elemento consumato contemporaneamente.

Ricava ready dallo spazio disponibile

Un buffer con una posizione contiene un bit full e un registro payload. Quando è vuoto, può accettare un ingresso anche se la destinazione è in stallo. Quando è pieno, può accettare un sostituto se la destinazione consuma l'uscita esistente a quel fronte. Quindi input-ready è !full OR output-ready e output-valid è full. Questo buffer registrato non ha un passaggio combinatorio diretto dei dati.

Se input-ready è alto, full successivo è uguale a input-valid. Acquisisci il payload quando esiste un ingresso; altrimenti svuota la posizione. Se input-ready è basso, conserva full e payload. Azzerare full soltanto perché un'uscita è stata trasferita perde una sostituzione simultanea. Acquisire soltanto in base a input-valid sovrascrive una posizione piena e in stallo.

SystemVerilog
module elastic_byte (
  input logic clk, rst,
  input logic in_valid,
  output logic in_ready,
  input logic [7:0] in_data, in_tag,
  output logic out_valid,
  input logic out_ready,
  output logic [7:0] out_data, out_tag
);
  logic full;
  assign in_ready = !full || out_ready;
  assign out_valid = full;
  always_ff @(posedge clk) begin
    if (rst) full <= 1'b0;
    else if (in_ready) begin
      full <= in_valid;
      if (in_valid) begin
        out_data <= in_data;
        out_tag <= in_tag;
      end
    end
  end
endmodule
full precedenteout-readyin-validAzione
001Memorizzare l'ingresso
101Rifiutare l'ingresso e mantenere l'uscita
111Consegnare il vecchio elemento e memorizzare il sostituto
110Consegnare il vecchio elemento e svuotare la posizione

Memorizza tag0,y9 al fronte 0. Vai in stallo al fronte 1. Al fronte 2, consuma tag0 e memorizza tag1,y12; la posizione rimane piena. Al fronte 3, consuma tag1 e svuotala se non esiste un ingresso. La sostituzione consente una transazione per ciclo.

Collegare molti stadi crea un percorso combinatorio ready all'indietro. Registrare ready richiede spazio aggiuntivo per gli arrivi prima che la notifica di stallo abbia effetto. Verifica separatamente eventuali restrizioni del bus sui percorsi combinatori. Qualunque sia la larghezza del payload, memorizza i dati e tutti i campi associati nella stessa condizione e verifica tutti e quattro i casi di aggiornamento.

Prova tu

A un fronte con full=1, out-ready=1 e in-valid=1, consuma tag7 e offri tag8. Quali sono full e out-tag successivi? Che cosa va storto se full viene sempre azzerato al consumo?

Leggi la spiegazione

Input-ready è alto, quindi memorizza tag8 e mantieni full=1. Out-tag diventa 8. Azzerare sempre full perde tag8 dopo averlo accettato.

La scelta vale per questo browser. Puoi modificarla in qualsiasi momento dal piè di pagina.