Altifigence Academy

21 / 63 · Concetto

Flip-flop, enable e priorità di controllo

Definire mantenimento, caricamento e reset come stato successivo ed evitare clock gating involontario.

Il registro memorizza la funzione di stato successivo

QkQ_k indica il valore prima del fronte, DkD_k l'ingresso acquisito e Qk+1Q_{k+1} il valore aggiornato. Per un registroRegistro Memorizza uno stato di più bit. I registri sincroni del corso acquisiscono gli ingressi specificati al fronte di clock. Approfondisci con reset prioritario rispetto a enable:

Qk+1={0rk=1Dkrk=0, ek=1Qkrk=0, ek=0Q_{k+1}=\begin{cases} 0 & r_k=1\\ D_k & r_k=0,\ e_k=1\\ Q_k & r_k=0,\ e_k=0 \end{cases}

Con enable=0 il valore resta fermo anche se D cambia. Omettere un'assegnazione esplicita del mantenimento in RTL sequenziale non equivale a dimenticare un'assegnazione combinatoria: il mantenimento è parte della specifica del registro.

SystemVerilog
module enabled_register (
  input logic clk, rst, en,
  input logic [7:0] d,
  output logic [7:0] q
);
  always_ff @(posedge clk) begin
    if (rst) q <= 8'b0;
    else if (en) q <= d;
  end
endmodule

È un reset sincrono active-high. Se reset ed enable valgono entrambi 1 al fronte, si memorizza 0. Cambiare ordine modifica la funzione: la priorità va espressa nel codice e nei test, non solo nei commenti.

Ogni colonna registra un fronte di salitaFronte di salita Passaggio del clock da 0 a 1, distinto dall’intero intervallo di livello CLK=1. Approfondisci. Gli ingressi sono quelli appena prima; gli stati indicati con «after» sono quelli subito dopo. Le colonne rappresentano l'ordine dei campioni, non il ritardo fisico di propagazioneRitardo di propagazione Tempo dalla variazione d’ingresso all’assestamento corretto dell’uscita. Equivalenza logica e proprietà temporali sono distinte. Approfondisci. Inizialmente Q=0xA5: prima colonna mantenimento, seconda scrittura, terza conflitto reset-enable.

Priorità di reset, enable e hold
Mostra i dati della forma d’onda
Dati della forma d’onda: ogni carattere è un intervallo; il punto mantiene lo stato precedente; p è un ciclo di clock.
SegnaleForma d’ondaValori del bus
edge2345E0 → E1 → E2 → E3
reset0.10
enable01.0
D2.343C → 99 → 77
Q after234.A5 → 3C → 00

Enable non taglia direttamente il clock

Usare arbitrariamente gated_clk = clk & en come clock può creare impulsi brevi o fronti inattesi quando en varia. La mappatura dell'RTL clock-enable su celle è responsabilità del flusso di sintesi e implementazione. Il clock gating per risparmiare energia richiede un progetto specifico con celle adatte e verifica temporale.

Le priorità emergono quando reset, load ed enable si sovrappongono. Provare ogni controllo solo separatamente non basta. Per esempio q=A5 deve restare fermo con en=0, d=3C, e acquisire 3C al fronte seguente con en=1.

Prova tu

q parte da 0xA5. Un fronte ha rst=1, en=1, d=0x3C; il successivo rst=0, en=0. Quali valori assume q dopo i due fronti?

Leggi la spiegazione

Al primo fronte prevale reset e si ottiene 0; al secondo enable=0 mantiene 0. Un reset implementato dentro la condizione en potrebbe essere perso con en=0: va testata anche questa combinazione.

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