Altifigence Academy

32 / 37 · Esercitazione

Laboratorio integrato: impulsi periodici e accumulatore abilitato

Specifica trasferimenti con valori precedenti e verifica pause, impulsi consecutivi e reset simultaneo.

Definire connessione prima di comporre

Accetta sample senza segno di quattro bit ad ogni salita con enable=1. Ogni N campioni accettati genera pulse registrato. L'accumulatore consuma pulse e il campione corrispondente salvato alla salita successiva, anche se enable=0 in quell'istante. total di otto bit torna modulo 256. Reset sincrono pulisce gli stadi e scarta il campione pendente. Il ritardo di un fronte è contrattuale: l'accumulatore legge pulse e saved_sample precedenti, non i valori non bloccanti creati sul medesimo fronte. Salva modulo_tick.sv e questo periodic_accumulator.sv; N è positivo.

SystemVerilog
module periodic_accumulator #(parameter integer N = 3) (
  input  logic       clk, rst, enable,
  input  logic [3:0] sample,
  output logic       pulse,
  output logic [7:0] total
);
  localparam integer CW = (N <= 1) ? 1 : $clog2(N);
  wire [CW-1:0] count;
  logic [3:0] saved_sample;
  modulo_tick #(.N(N)) tick_u (
    .clk(clk), .rst(rst), .enable(enable),
    .count(count), .pulse(pulse)
  );
  always_ff @(posedge clk) begin
    if (rst) saved_sample <= 4'b0;
    else if (enable) saved_sample <= sample;
  end
  always_ff @(posedge clk) begin
    if (rst) total <= 8'b0;
    else if (pulse) total <= total + {4'b0, saved_sample};
  end
endmodule

Seguire insieme dato ed evento

N=3, ingressi prima e uscite dopo il fronte.

Fronterstenablesamplepulse dopototal dopo
E011900
E101200
E201400
E301710
E400907
E501107
E601307
E701517
E8111500

E4 aggiunge 7, non sample esterno 9. enable controlla solo nuove accettazioni e non annulla la pendente. E8 scarta 5 e azzera total. enable && pulse sul consumo perderebbe E4.

Modello di riferimento al confine del sistema

Mantieni numero accettato, valore pendente opzionale e total intero. Senza reset consuma prima la precedente pendente modulo 256; poi usa enable/sample attuali per creare pendente alla N-esima accettazione. Reset azzera tutto. Non leggere tick_u.count o saved_sample. Stimola in discesa e controlla poi pulse, total, mantenimento senza evento e rimozione del consumato.

Coprire difetti d'integrazione

  • N=1 genera impulsi consecutivi: ogni campione deve essere consumato una sola volta al fronte successivo.
  • N=3 con pause prima/dopo campione terminale: conta accettazioni, non tutti i clock.
  • Cambia sample esterno durante consumo disabilitato: deve usare quello salvato.
  • Reset con pendente scarta evento e total.
  • Somma oltre 255 e verifica modulo 256.

Sostituisci saved_sample con sample: E4 deve fallire. Condiziona il consumo a enable e rileva un altro difetto. Ripristina prima di PASS. Il contratto verificato è funzionale, a clock singolo e larghezza finita; non prova CDC, chiusura del timing fisico o pratica gratuita nel prodotto DDS.

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