Altifigence Academy

16 / 37 · Concetto

Contatori modulari, saturanti e impulso terminale

Progettare la gestione del massimo e il ciclo esatto del terminal count.

Tre politiche diverse per il superamento del campo

Lo stesso registroRegistro Memorizza uno stato di più bit. I registri sincroni del corso acquisiscono gli ingressi specificati al fronte di clock. Approfondisci a N bit può ritornare a zero, saturare al massimo o segnalare un errore: lo decide la specifica.

Cnextwrap=(C+1) mod 2NC_{next}^{wrap}=(C+1)\bmod2^N
Cnextsat=min⁡(C+1,2N−1)C_{next}^{sat}=\min(C+1,2^N-1)

Un contatore modulare a otto bit passa da 255 a 0, uno saturante resta a 255: sono funzioni diverse. Un accumulatore con valori positivi e negativi richiede anche campo signed e due limiti di saturazione.

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 immediatamente precedenti; gli stati con „after“ quelli subito dopo l’aggiornamento. Le colonne indicano 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 count=8, reset=0, enable=1. Con gli stessi ingressi, modulo 10, wrap a quattro bit e saturazione a quattro bit seguono traiettorie diverse.

Tre politiche dopo il valore massimo
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
edge234523452E0 → E1 → E2 → E3 → E4 → E5 → E6 → E7 → E8
mod10 after2345234529 → 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7
wrap4 after2345234529 → 10 → 11 → 12 → 13 → 14 → 15 → 0 → 1
sat4 after2345234..9 → 10 → 11 → 12 → 13 → 14 → 15

Confrontare l'ultimo stato modulo M

Per un impulso ogni dieci avanzamenti si usano gli stati 0–9 contando solo i fronti abilitati. Un pulse registrato può significare: «a questo fronte si è consumato 9 ed è avvenuto il ritorno a 0».

SystemVerilog
always_ff @(posedge clk) begin
  if (rst) begin
    count <= 4'd0;
    pulse <= 1'b0;
  end else begin
    pulse <= 1'b0;
    if (en) begin
      if (count == 4'd9) begin
        count <= 4'd0;
        pulse <= 1'b1;
      end else count <= count + 4'd1;
    end
  end
end

L'assegnazione predefinita riporta pulse a 0 al fronte successivo. L'uscita semplice count==9 può invece restare 1 per più cicli se enable=0. Distinguete stato terminale ed evento di completamento.

Da dove si conta il periodo

Dopo reset a count=0, il primo pulse richiede dieci fronti con enable=1. Più che chiamare il primo fronte 0 o 1, conta usare definizioni coerenti nella tabella di ingressi, stato e uscite.

Il laboratorio è un contatore modulo 16. Da 1110 passa a 1111 e poi 0000. Fermatelo a 1111 con enable=0: mantenimento e saturazione sembrano uguali ma differiscono alla ripresa. Quale valore dovrebbe dare un contatore saturante?

Fermarsi al massimo a 4 bit oppure tornare a zero

Il reset sincrono ha priorità su enable. Con enable=0, il valore memorizzato viene mantenuto. q=1110; q_next = (q + 1) mod 16

Prova tu

Da count=9, pulse=0 seguono due fronti con en=0 e uno con en=1. Come cambiano count e pulse?

Leggi la spiegazione

Nei due fronti fermi restano count=9, pulse=0. Al terzo diventano count=0, pulse=1. Al successivo l’assegnazione predefinita riporta pulse a 0.

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