Altifigence Academy

5 / 24 · Concetto

Leggi i trasferimenti tra registri ai fronti di clock

Separa stato precedente e successivo e segui come le abilitazioni conservano i valori memorizzati.

Tutti i registri leggono lo stato precedente

Inizia identificando le informazioni che devono sopravvivere tra un ciclo e l'altro. Un accumulatore, gli operandi acquisiti, un contatore di iterazioni e il segnale valid di uscita costituiscono lo stato. La somma dell'accumulatore corrente e dell'operando è un valore combinatorio. Scrivere una variabile non spiega da solo la memorizzazione; specifica l'evento che ne acquisisce il valore.

Questo accumulatore aggiunge x soltanto ai fronti di salita con en attivo. Con en basso, mantiene il proprio valore. Un valore intermedio a nove bit rende esplicita l'addizione; selezionare i suoi otto bit meno significativi definisce il comportamento modulo 256. Le assegnazioni non bloccanti in always_ff pianificano lo stato successivo usando i valori letti al fronte corrente. Interpretare il blocco come assegnazioni software immediate dà un risultato errato quando sono coinvolti più registri.

SystemVerilog
logic [7:0] acc;
logic [8:0] next_sum;
assign next_sum = {1'b0, acc} + {1'b0, x};
always_ff @(posedge clk) begin
  if (rst) acc <= 8'd0;
  else if (en) acc <= next_sum[7:0];
end

Il reset è sincrono e ha priorità sull'abilitazione. Omettere un'assegnazione sequenziale quando en è basso significa mantenere il registro. Omettere un'assegnazione in un percorso combinatorio può invece implicare un latch indesiderato. Nella logica combinatoria dello stato successivo, assegna valori predefiniti e poi sovrascrivili per le condizioni specifiche.

Fronterstenxacc precedenteacc nuovo
0119Sconosciuto0
101707
20010077
30125071

Al fronte 2, l'ingresso visibile 100 non è stato accettato. Al fronte 3, 7+250=257 si riduce a 1. Distinguere la presentazione dall'accettazione rimane essenziale quando en diventa in seguito valid AND ready.

Per a<=x; b<=a;, a precedente=5 e x=9 producono a nuovo=9 e b=5. Se b deve ricevere 9, collega il suo ingresso a x. Completa prima la colonna dello stato precedente, poi calcola insieme tutti i valori dello stato successivo; ciò rivela disallineamenti di un ciclo tra dati e controllo.

Prova tu

Inizialmente a=4 e b=0. Gli ingressi x sono 8 e poi 12, con a<=x; b<=a a ogni fronte. Quanto valgono a e b dopo il secondo fronte?

Leggi la spiegazione

Dopo il primo fronte, a=8 e b=4. Dopo il secondo, a=12 e b=8. Ogni aggiornamento di b usa a precedente, quindi x=12 non attraversa entrambi i registri in un solo fronte.

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