Altifigence Academy

19 / 37 · Concetto

parameter, localparam, $clog2 e configurazioni limite

Distingui ingressi di esecuzione e configurazioni e progetta larghezza e termine per N=1 e non potenze di due.

Parametri fissati nell'elaborazione

Una porta cambia in esecuzione; parameter configura prima della costruzione; localparam nomina una costante derivata non sostituita dall'istanza. Non sono variabili per ciclo. Un contatore modulo N usa 0..N−1. Per N≥2 la larghezza è $clog2(N); N=1 restituisce zero, quindi riserva almeno un bit. N=0 è fuori contratto.

Completamento al fronte abilitato

Quando count precedente passa da N−1 a zero, viene registrato pulse. Un fronte disabilitato mantiene count e azzera pulse. Reset sincrono azzera entrambi e vince su enable. N è un intero positivo nell'intervallo supportato.

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 compare nelle porte ed è esposto. Mantieni il default o ≥max(1,$clog2(N)). Un valore minore tronca LAST; uno maggiore crea codici inutilizzati, riportati a zero da >= su fronte abilitato. CW'(N-1) esplicita la dimensione, non ripara configurazioni errate. Valida prima di elaborare: un'asserzione dinamica non corregge una dichiarazione invalida.

Matrice delle configurazioni

NCW predefinitocount dopo fronti abilitati dal resetpulse dopo
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 memorizzato non rende validi due stati per N=1. N=5 normalmente non visita 5,6,7. Solo potenze di due nascondono un confronto esplicito di ritorno mancante.

Esercizio: comportamento e rifiuto

Crea N=1,2,5,8, esegui almeno due periodi, fermati al terminale e applica reset con enable. Confronta ogni count/pulse. Il modello di riferimento intera azzera su reset, prima pulisce pulse e poi incrementa modulo N con enable rilevando il ritorno, senza CW o stato interno. Verifica il rifiuto di N=0 e CW insufficiente. La riusabilità vale nell'intervallo dichiarato e verificato, non per un solo default passato.

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