Altifigence Academy

1 / 37 · Concetto

RTL: descrivere circuiti concorrenti

Distingui la sequenza del software dalla struttura hardware parallela e specifica stato, stato successivo e osservazione.

Un circuito continua a funzionare

RTL descrive il passaggio di valori tra registri attraverso logica combinatoria. Un modulo delimita hardware; due istanze creano strutture che interagiscono, non chiamate eseguite in sequenza. Il circuito resta attivo mentre cambiano gli ingressi. Trasforma porte, memoria e macchine a stati del corso Circuiti logici digitali in interfacce SystemVerilog esplicite e verifiche ripetibili. Spiega larghezza, driver, validità e reset di ogni segnale prima di implementarlo.

Separare stato attuale e successivo

Il modulo completo accumula sample senza segno di quattro bit in un registro di otto. Il reset sincrono, attivo alto, ha priorità su enable. Un fronte abilitato somma il campione; gli altri mantengono sum. L'aritmetica riporta il valore modulo 256.

SystemVerilog
module accumulator (
  input  logic       clk, rst, enable,
  input  logic [3:0] sample,
  output logic [7:0] sum
);
  logic [7:0] next_sum;
  assign next_sum = sum + {4'b0000, sample};
  always_ff @(posedge clk) begin
    if (rst) sum <= 8'b0;
    else if (enable) sum <= next_sum;
  end
endmodule

next_sum è combinatorio: può cambiare con sum o sample senza un fronte di clock. sum memorizza stato e cambia sul fronte di salita. Dichiararli entrambi logic non assegna lo stesso ruolo hardware. L'assenza dell'else finale nel blocco sincrono mantiene il registro; un'assegnazione mancante nel combinatorio può richiedere un latch. Identifica prima il tipo di blocco.

Calcolare una tabella prima di simulare

Ogni riga usa stato e ingressi immediatamente prima del fronte; osserva dopo gli aggiornamenti non bloccanti.

Fronterstenablesamplesum primasum dopo
E0119Sconosciuto0
E101303
E200733
E301538
E4111580

In E4 vince reset e non si somma. Se sum precedente è 250 e sample accettato è 10, gli otto bit danno 4. Conservare il nono bit richiederebbe cambiare interfaccia e contratto aritmetico.

Ordine locale e concorrenza strutturale

Le assegnazioni bloccanti = in una procedura combinatoria seguono l'ordine procedurale. Procedure distinte e assegnazioni continue sono processi concorrenti. Le non bloccanti <= valutano il lato destro con i valori disponibili durante l'esecuzione e pianificano l'aggiornamento. L'ordine del testo non specifica la latenza. Non scrivere #10 nell'accumulatore per attendere un clock: ritardi e generazione di clock appartengono al testbench generale. Una transizione sintetizzabile usa fronti e stato, non sleep.

Esercizio: cambiare un requisito

Sostituisci il ritorno modulo con saturazione a 255. Estendi esplicitamente gli operandi e somma in nove bit. Se il bit 8 è 1, salva 255, altrimenti 7:0. Mantieni le priorità. Prova 0+0,250+5,250+6, un fronte disabilitato e reset/enable simultanei: attendi 0,255,255, stato mantenuto,0. Solo 250+5 non rivela una carry persa; includi 250+6. Conserva sorgente, tabella e aspettative. Segnare una lezione completata registra studio, non un'esecuzione del simulatore.

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