Altifigence Academy

29 / 63 · Concepto

Número de estados, ancho del contador y códigos no utilizados

Calcule bits de almacenamiento desde el rango y defina cómo recuperarse de estados inválidos.

Contar también es una máquina de estados

Un contador 0–9 necesita diez estados y al menos ⌈log⁡210⌉=4\lceil\log_2 10\rceil=4 bits. Un 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 cuatro bits tiene 16 patrones: elegir bien el ancho no completa la función módulo 10.

N=⌈log⁡2M⌉,coˊdigos no utilizados=2N−MN=\left\lceil\log_2 M\right\rceil,\qquad \text{códigos no utilizados}=2^N-M

M es el número de estados, no el máximo. Contar de 0 a M−1 difiere de contar hasta M. Si admite M=1 como parámetro, use al menos un bit y mantenga siempre 0.

De los 16 códigos de cuatro bits, módulo 10 usa diez como estados normales. Después del ancho, diseñe la comparación y la recuperación.

Ancho de almacenamiento y condición de retorno se diseñan por separado
  1. Diez estados: count normal va de 0 a 9
  2. Almacenamiento de cuatro bits: 16 códigos; 10–15 quedan libres
  3. Estado siguiente: Si en=1 y count≥9, pase a 0

Los estados fuera de rango también se especifican

¿Qué debe ocurrir si el contador módulo 10 llega a 12? Demuestre las condiciones de inicialización y resetReset Control que devuelve el estado a un valor inicial especificado. Deben definirse su carácter síncrono o asíncrono y su prioridad frente a otros controles. Más información que permiten asumir que no ocurre, o establezca recuperación a 0 desde 9 o más. Recuperación no significa tolerancia a todo fallo físico.

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

El ejemplo recupera también 10–15, pero solo en un flanco con en=1. Con enable=0 conserva incluso el valor inválido; una recuperación inmediata exigiría cambiar la prioridad.

Revisar ancho y revisar función son tareas distintas

Diez bits bastan para 0–999, pero un incremento libre llega a 1023. Se necesita comparación y selección para volver a 0 desde el máximo especificado. En contadores de direcciones, iteraciones o longitudes de paquete, confundirlo causa accesos o longitudes incorrectos.

Inténtalo tú

Calcule el ancho mínimo y los códigos no utilizados de un contador que repite 0–99. ¿Qué cambia si solo se suma 1 con ese ancho?

Leer la explicación

Hay 100 estados: requiere siete bits y quedan 128−100=28128-100=28 códigos sin usar. Incrementar sin más no vuelve a 0 en 99, sino que llega a 127: resulta módulo 128, no módulo 100.

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