Altifigence Academy

16 / 37 · Concepto

Contadores modulares, saturación y pulsos de fin

Diseñe la política del máximo y el ciclo exacto de la señal de fin de cuenta.

Tres políticas distintas al superar el rango

Con el mismo registroRegistro Circuito que almacena varios bits de estado. Los registros síncronos de este curso capturan la entrada especificada en el flanco de reloj. Más información de N bits, la especificación decide si retornar, saturar o indicar error al llegar al máximo.

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)

En ocho bits, pasar de 255 a 0 y permanecer en 255 son funciones distintas. Un acumulador que maneje positivos y negativos requiere además rango signed y saturación en ambos límites.

Cada columna siguiente registra un flanco ascendenteFlanco ascendente Instante en que el reloj pasa de 0 a 1. Se distingue del nivel alto, que abarca todo el intervalo con CLK=1. Más información; entradas previas y estados «después» posteriores. La alineación ordena muestras, no representa propagación físicaRetardo de propagación Tiempo desde un cambio de entrada hasta que la salida se estabiliza en el valor correcto. La equivalencia lógica y el comportamiento temporal son propiedades distintas. Más información. Con count=8, reset=0, enable=1 iniciales, módulo 10, retorno de cuatro bits y saturación de cuatro bits producen trayectorias diferentes.

Tres políticas después del máximo
Ver los datos de la forma de onda
Datos de la forma de onda: cada carácter es un intervalo; un punto conserva el estado anterior; p representa un ciclo de reloj.
SeñalForma de ondaValores del bus
flanco234523452E0 → E1 → E2 → E3 → E4 → E5 → E6 → E7 → E8
mod10 después2345234529 → 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7
wrap4 después2345234529 → 10 → 11 → 12 → 13 → 14 → 15 → 0 → 1
sat4 después2345234..9 → 10 → 11 → 12 → 13 → 14 → 15

Compare el último estado del módulo M

Para un pulso cada diez incrementos, use estados 0–9 y cuente solo flancos habilitados. Puede registrar pulse con el significado «en este flanco se consumió 9 y se volvió 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

La asignación predeterminada devuelve pulse a 0 en el próximo flanco. En cambio, una salida count==9 puede durar varios ciclos si enable=0 detiene el contador. Distinga estado terminal de evento de finalización.

Desde dónde se cuenta el periodo

Tras reset y desde count=0, hacen falta diez flancos con enable=1 para el primer pulse. Más que llamar al primer flanco 0 o 1, importa definir de forma consistente entradas, estados y salidas.

El control siguiente es módulo 16. Desde 1110, un flanco da 1111 y el siguiente, 0000. Deténgalo en 1111 con enable=0. Conservación y saturación pueden mostrar el mismo valor, pero difieren al reanudar. Compare qué valor debería tener un contador saturante en esas condiciones.

Detenga o haga retornar el contador en el máximo de cuatro bits

El reset síncrono tiene prioridad sobre enable. Con enable=0, se conserva el valor almacenado. q=1110; q_next = (q + 1) mod 16

Inténtalo tú

Con count=9 y pulse=0, pasan dos flancos con en=0 y otro con en=1. ¿Qué ocurre con count y pulse?

Leer la explicación

Durante los dos flancos detenidos se mantienen count=9 y pulse=0. En el tercero pasan a count=0 y pulse=1. En el flanco siguiente, la asignación predeterminada devuelve pulse a 0.

Tu elección se aplica a este navegador. Puedes cambiarla en el pie de página.