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.
Le lezioni sono gratuite. Iscriviti per salvare i progressi.
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.
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];
endIl 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.
| Fronte | rst | en | x | acc precedente | acc nuovo |
|---|---|---|---|---|---|
| 0 | 1 | 1 | 9 | Sconosciuto | 0 |
| 1 | 0 | 1 | 7 | 0 | 7 |
| 2 | 0 | 0 | 100 | 7 | 7 |
| 3 | 0 | 1 | 250 | 7 | 1 |
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.