14 / 37 · 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 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.
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.