Altifigence Academy

19 / 37 · Concepto

parameter, localparam, $clog2 y configuraciones límite

Separa entradas dinámicas de configuración estática y diseña anchura y terminación para N=1 y valores no potencia de dos.

Los parámetros se fijan al elaborar

Un puerto cambia durante funcionamiento; parameter configura antes de construir la estructura, y localparam nombra una constante derivada no sustituible por quien instancia. No son variables que cambien por ciclo. El contador módulo N usa estados 0..N−1. Para N≥2 requiere $clog2(N) bits; N=1 devuelve 0, así que garantiza al menos un bit. N=0 no pertenece al contrato.

Define finalización en un flanco habilitado

Al pasar el count anterior de N−1 a 0, el módulo registra pulse. Si no hay enable, mantiene count y limpia pulse. El reinicio síncrono limpia ambos y tiene prioridad. N debe ser entero positivo dentro del rango soportado.

SystemVerilog
module modulo_tick #(
  parameter integer N = 5,
  parameter integer CW = (N <= 1) ? 1 : $clog2(N)
) (
  input  logic          clk, rst, enable,
  output logic [CW-1:0] count,
  output logic          pulse
);
  localparam logic [CW-1:0] LAST = CW'(N-1);
  always_ff @(posedge clk) begin
    if (rst) begin
      count <= '0;
      pulse <= 1'b0;
    end else begin
      pulse <= 1'b0;
      if (enable) begin
        if (count >= LAST) begin
          count <= '0;
          pulse <= 1'b1;
        end else count <= count + 1'b1;
      end
    end
  end
endmodule

CW se expone por aparecer en los puertos. Deja el valor predeterminado o uno ≥max(1,$clog2(N)). Un override menor trunca LAST; uno mayor añade códigos no usados, recuperados a 0 en un flanco habilitado mediante >=. CW'(N-1) explicita tamaño, pero no corrige configuración inválida. Valida antes de elaborar: una aserción dinámica no arregla una declaración mal formada.

Prueba una matriz

NCW predeterminadocount en flancos habilitados tras resetpulse posterior
110,0,01,1,1
211,0,10,1,0
531,2,3,4,00,0,0,0,1
831,2,3,4,5,6,7,00,0,0,0,0,0,0,1

Un bit no convierte N=1 en dos estados válidos. N=5 no debe visitar 5,6,7 normalmente. Probar solo potencias de dos no detecta una comparación explícita de retorno ausente.

Práctica: comportamiento y rechazo de configuraciones

Instancia N=1,2,5,8 y recorre dos períodos; inserta flancos deshabilitados en el terminal y reset junto a enable. Revisa cada count y pulse. El modelo entero limpia con reset, pone pulse=0 y, si enable, incrementa módulo N detectando retorno, sin depender de CW ni codificación del DUT. Comprueba rechazo de N=0 y CW insuficiente. La reutilización solo está establecida para el rango especificado y verificado, no por un único valor predeterminado.

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