Salta al contenuto
Note per Studenti Esercizio 18 · quesiti rapidi sul VHDL (temi d'esame 2024-2026)

Esercizio 18quesiti rapidi sul VHDL (temi d'esame 2024-2026)

Esame

Questa pagina non ha ancora la versione ripasso: qui sotto c'è il testo completo.

In questa pagina 11

Quesiti a risposta multipla sul VHDL dai temi di giugno 2024 (e luglio 2025), settembre 2024 (e settembre 2026), giugno 2025 e luglio 2026. Chiave ufficiale solo per giugno 2024 / luglio 2025.

Teoria usata: VHDL - struttura, tipi di dato e processiVHDL è un linguaggio di descrizione dell'hardware: un listato non è una sequenza di istruzioni eseguite da un processore ma la descrizione di un circuito, che la sintesi traduce in uno schema (LUT, flip-flop, multiplexer). Ogni modulo ha una entity (interfaccia: port con modo in, out, inout e tipo; eventuali generic) e una architecture (parte dichiarativa: segnali, costanti, componenti; parte assertiva dopo begin: assegnazioni concorrenti e processi). Le istruzioni nell'architecture sono concorrenti: l'ordine in cui sono scritte non conta. Un process esegue le proprie istruzioni in modo sequenziale quando un segnale della lista di sensibilità cambia. Segnali (<=, aggiornati alla fine del delta cycle, definiti nella parte dichiarativa) e variabili (:=, immediate, solo dentro il processo) hanno semantica diversa. Tipi: bit, boolean, integer, std_logic (a 9 valori, tra cui 'Z', 'X', 'U'), std_logic_vector, unsigned e signed (numeric_std).VHDL - struttura, tipi di dato e processi →, VHDL - logica sequenziale e registriIn VHDL la logica sequenziale si descrive con processi sensibili al clock. Un registro D (flip-flop sul fronte) si scrive process(clk) con if rising_edge(clk); un latch è un processo sensibile al livello (if clk='1' then q<=d) senza altri rami. Il reset è sincrono se testato dentro rising_edge(clk) (la lista di sensibilità contiene solo clk), asincrono se testato prima, con RST nella lista di sensibilità (if rst='1' then ... elsif rising_edge(clk)). Registri a n bit con generic, registri a scorrimento (con load), contatori (up/down, con enable) si ottengono con la stessa struttura. In un progetto sincrono tutti i registri usano lo stesso clock (nessun clock generato da logica: si usano abilitazioni), i segnali esterni asincroni come i pulsanti si campionano con uno o più flip-flop (debouncing) e le cifre di un display si multiplexano con un contatore.VHDL - logica sequenziale e registri →, VHDL - logica combinatoriaUna logica combinatoria in VHDL si descrive con assegnazioni concorrenti (semplici, condizionate when-else con priorità, selezionate with-select senza priorità) o con processi sensibili a tutti gli ingressi (if/elsif, case). Nel processo ogni uscita va assegnata in tutti i rami e la lista di sensibilità deve contenere tutti i segnali letti: altrimenti la sintesi inferisce un latch (memoria). L'aritmetica si fa con unsigned/signed di numeric_std (to_unsigned, to_integer, resize, conversioni di tipo) e con un bit in più per il riporto. Cicli for e istruzioni generate creano hardware replicato (non cicli nel tempo). La descrizione strutturale istanzia componenti con component e port map (per posizione o per nome, anche con generic map), e permette di costruire sistemi gerarchici.VHDL - logica combinatoria →, Macchine a stati finiti in VHDLUna macchina a stati finiti (FSM) ha uno stato S(k) che evolve secondo la funzione di stato prossimo S(k+1) = F(S(k), X(k)) e produce uscite Y(k) = G(S(k), X(k)) (modello di Mealy: dipendono anche dall'ingresso, possono cambiare subito) oppure Y(k) = G(S(k)) (modello di Moore: dipendono solo dallo stato, cambiano solo ai fronti di clock). In VHDL si definisce un tipo enumerato per gli stati e si scrive in due processi: uno sequenziale (registro di stato con reset: state_reg <= state_next al fronte) e uno combinatorio (case sullo stato che assegna state_next, con un valore di default, e le uscite); lo stile a processo singolo registra anche le uscite. La progettazione parte dal diagramma degli stati, passa alla tabella di transizione e al codice.Macchine a stati finiti in VHDL →.


1. Tipo di reset (giugno 2024, luglio 2025)

Che tipo di reset implementa il codice?

vhdl
process (CLK)
begin
  if rising_edge(CLK) then
    if RST = '1' then A <= '0';
    else A <= B;
    end if;
  end if;
end process;

a. sincrono; b. asincrono; c. il codice è errato e non implementa alcun reset.

Risposta: a. Il reset è testato dentro rising_edge(CLK) e la lista di sensibilità contiene solo CLK: ha effetto solo al fronte di clock. Un reset asincrono sarebbe if RST='1' then A<='0'; elsif rising_edge(CLK) then A<=B; end if; con RST nella lista di sensibilità.

2. Macchina a stati finiti (giugno 2024, luglio 2025, giugno 2025)

Il codice: un tipo FSM_type is (idle, counting); un processo (RST, CLK) con if RST='1' then state_reg<=idle; elsif rising_edge(CLK) then state_reg<=state_next;; un secondo processo (state_reg, START) con state_next<=state_reg; e case state_reg is when idle => CHECK<='0'; if START='1' then state_next<=counting; ... when counting => CHECK<='1'; if START='0' then state_next<=idle; ... implementa: a. una FSM di Mealy a doppio processo; b. una FSM di Moore a doppio processo; c. una FSM di Moore a singolo processo.

Risposta: b. Ci sono due processi (registro di stato e logica combinatoria). CHECK è assegnata in funzione del solo state_reg ('0' in idle, '1' in counting; START determina solo state_next): macchina di Moore (Macchine a stati finiti in VHDLUna macchina a stati finiti (FSM) ha uno stato S(k) che evolve secondo la funzione di stato prossimo S(k+1) = F(S(k), X(k)) e produce uscite Y(k) = G(S(k), X(k)) (modello di Mealy: dipendono anche dall'ingresso, possono cambiare subito) oppure Y(k) = G(S(k)) (modello di Moore: dipendono solo dallo stato, cambiano solo ai fronti di clock). In VHDL si definisce un tipo enumerato per gli stati e si scrive in due processi: uno sequenziale (registro di stato con reset: state_reg <= state_next al fronte) e uno combinatorio (case sullo stato che assegna state_next, con un valore di default, e le uscite); lo stile a processo singolo registra anche le uscite. La progettazione parte dal diagramma degli stati, passa alla tabella di transizione e al codice.Macchine a stati finiti in VHDL →).

3. Segnali e processi (settembre 2024, giugno 2025, settembre 2026)

Nel VHDL un segnale: a. può essere definito all'interno di un processo; b. può essere usato all'interno di un processo; c. può essere usato solo all'esterno di un processo.

Risposta: b. I segnali si dichiarano nella parte dichiarativa dell'architecture (non nel processo, dove si dichiarano le variabili) e si usano (letti e assegnati) sia nelle istruzioni concorrenti sia nei processi.

4. Parte dichiarativa (settembre 2024, giugno 2025, settembre 2026)

La parte dichiarativa di un'architecture può essere utilizzata per: a. definire un segnale; b. definire un'assegnazione in logica combinatoria; c. definire un'assegnazione in logica sequenziale (dentro un processo).

Risposta: a. Prima di begin si dichiarano segnali, costanti, tipi e componenti; le assegnazioni sono nella parte assertiva (dopo begin).

5. Che cosa descrive un listato VHDL (settembre 2024, settembre 2026)

Un listato VHDL: a. rappresenta la sequenza delle istruzioni che un FPGA deve eseguire; b. descrive un apposito hardware che può essere convertito in uno schema circuitale con un processo di sintesi; c. definisce una funzionalità hardware senza mai descriverne l'architettura.

Risposta: b. VHDL è un linguaggio di descrizione dell'hardware: la sintesi lo traduce in LUT, flip-flop, multiplexer; non si esegue come un programma e descrive anche l'architettura (entity e architecture).

6. Processo con if/else e valore 'Z' (settembre 2024, settembre 2026)

Il processo: if sel='1' then oA<=iA; oB<=iB; oC<=iC; else oA<=iB; oB<='Z'; end if; descrive: a. 33 mux 2-12\text{-}1; b. 11 porta AND, 11 mux 2-12\text{-}1, 11 NOT; c. 11 buffer tri-state, 11 mux 2-12\text{-}1, 11 latch D.

Risposta: c. oA riceve iA o iB secondo sel: mux 2-1; oB riceve iB se sel='1', 'Z' altrimenti: buffer tri-state abilitato da sel; oC non è assegnato nel ramo else: mantiene il valore, quindi latch D (con enable sel).

7. Ordine dei processi (luglio 2026)

All'interno dell'architecture l'ordine con cui sono scritti i processi: a. determina la priorità di esecuzione; b. non modifica il comportamento del circuito; c. modifica il ritardo della sintesi.

Risposta: b. I processi sono istruzioni concorrenti: rappresentano blocchi hardware che lavorano in parallelo.

8. Latch inferito (luglio 2026)

Il codice: process(A,B) begin if A='1' then Y<=B; else null; end if; end process; : a. descrive una porta AND; b. può inferire memoria/latch perché YY mantiene il valore precedente; c. descrive un registro con enable.

Risposta: b. Per A=0A=0 YY non è assegnata: mantiene il valore. È un latch trasparente per A=1A=1 (non una AND, che richiederebbe else Y<='0', e non un registro: manca rising_edge).

9. Hardware di laboratorio (giugno 2024, luglio 2025)

  • Gli otto display a 7 segmenti della scheda condividono i catodi: come visualizzare cifre diverse? b. Accendere ciclicamente un display alla volta con la cifra corretta (tecnica stroboscopica; 1-16 ms1\text{-}16\ \mathrm{ms} per ciclo completo).
  • Debouncing: a. campionare il segnale del pulsante con un opportuno segnale di clock e uno o più flip-flop (rimbalzi <10 ms<10\ \mathrm{ms}).

Verifica

Le risposte sono ricavate dall'analisi dei codici (i listati sono quelli dei temi); la risposta ai punti 1, 2, 9 è confermata dalla chiave ufficiale.

Errori comuni

  • Scambiare reset sincrono e asincrono (basta guardare dove si trova RST e la lista di sensibilità).
  • Chiamare Mealy una macchina la cui uscita dipende solo dallo stato.
  • Dichiarare un segnale dentro un processo.
  • Aspettarsi un'AND dal codice con else null.

Esercizio 18 - quesiti rapidi sul VHDL (temi d'esame 2024-2026)

  • Reset: RST dentro rising_edge, sensibilità solo CLK ⇒\Rightarrow sincrono (a).
  • FSM idle/counting: due processi, CHECK funzione del solo stato ⇒\Rightarrow Moore a doppio processo (b).
  • Segnale: usabile nel processo (b), dichiarato nell'architecture; parte dichiarativa: definisce segnali (a).
  • Listato VHDL: descrive hardware, convertito con la sintesi (b).
  • if sel ... else oB<='Z': mux 2-1 + buffer tri-state + latch D (c).
  • Ordine dei processi: nessun effetto (b). else null: latch (b).
  • Laboratorio: display multiplexati (un display alla volta); debouncing con clock e FF.
  • Errori: sincrono/asincrono; Moore/Mealy; segnale nel processo; AND da null.

Teoria collegata