Altifigence Academy

21 / 37 · Concetto

function automatic ed espressioni riutilizzabili

Scrivi funzioni senza tempo simulato e verifica larghezza, segno e indipendenza delil modello di riferimento.

Riutilizzare il calcolo senza nascondere il contratto

Una funzione SystemVerilog restituisce un valore senza consumare tempo di simulazione. In RTL combinatoria sintetizzabile usa ingressi espliciti, assegna il ritorno su ogni percorso e non inserire ritardi né controllo di eventi. automatic separa argomenti e variabili locali per chiamata, senza creare registro o ciclo. Il ciclo fisso calcola XOR degli otto bit come parità combinatoria.

SystemVerilog
module parity_function (
  input  logic [7:0] data,
  output logic       parity,
  output logic [7:0] with_parity
);
  function automatic logic parity8(input logic [7:0] value);
    logic p;
    integer bit_index;
    begin
      p = 1'b0;
      for (bit_index = 0; bit_index < 8; bit_index = bit_index + 1)
        p = p ^ value[bit_index];
      parity8 = p;
    end
  endfunction
  assign parity = parity8(data);
  assign with_parity = {data[6:0], parity8(data)};
endmodule

with_parity elimina data[7] e aggiunge parità: sono otto bit, non una codifica a nove che conservi tutti i dati. Una funzione corretta può essere chiamata in modo da perdere informazione.

Larghezza e segno del ritorno

Il ritorno è logic di un bit. Sommare due ingressi senza segno di otto bit conservando carry richiede nove bit di ritorno. La chiamata non allarga automaticamente destinazione o risultato. Mantieni regole di larghezza e costanti presso l'interfaccia; evita dipendenze nascoste da segnali globali variabili, che complicano riuso e test.

Chiamate non significano condivisione seriale

Due chiamate non obbligano un operatore condiviso nel tempo. La sintesi può ottimizzare logica combinatoria; condivisione seriale richiede protocollo di accettazione, stato e istante del risultato. Non dedurre area o throughput contando chiamate. Le task di banco possono attendere eventi; funzioni e task temporizzate hanno responsabilità distinte. La prossima lezione usa task per stimolo in discesa e osservazione dopo salita.

Esercizio: un altro modello di riferimento

data=0,1,3,8'h80,8'hFF deve produrre parità 0,1,0,1,0. Per 8'h80, with_parity=8'h01: il bit alto è tolto e parity=1. Verifica tutti i 256 valori contando bit attivi in un intero e usando resto per 2, senza chiamare parity8 del DUT. Cambia limite del ciclo a 7:8'h80 deve fallire, anche se valori bassi non scoprono il difetto. Poi porta l'uscita a nove bit con {data, parity8(data)} e aggiorna modello: cambia l'interfaccia, non la formattazione.

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