21 / 63 · Concetto
Flip-flop, enable e priorità di controllo
Definire mantenimento, caricamento e reset come stato successivo ed evitare clock gating involontario.
Le lezioni sono gratuite. Iscriviti per salvare i progressi.
Il registro memorizza la funzione di stato successivo
indica il valore prima del fronte, l'ingresso acquisito e 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:
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.
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.
Mostra i dati della forma d’onda
| Segnale | Forma d’onda | Valori del bus |
|---|---|---|
| edge | 2345 | E0 → E1 → E2 → E3 |
| reset | 0.10 | |
| enable | 01.0 | |
| D | 2.34 | 3C → 99 → 77 |
| Q after | 234. | 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.