Altifigence Academy

14 / 37 · 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 con „after“ 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.