Upload
duongkhuong
View
227
Download
0
Embed Size (px)
Citation preview
VHDL: Simulazione& Sintesi
Politecnico di Milano18 Dicembre 2012
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano
TESTBENCH
3
• Dopo aver progettato un componente, è importante verificare che il suo funzionamento sia corretto, cioè che produca i risultati attesi
• La verifica viene svolta simulando il componente in un ambiente “controllato” chiamato testbench
• Un testbench permette di:
‣ Produrre stimoli per gli ingressi del circuito
‣ Propagare questi stimoli al circuito
‣ Confrontare il risultato ottenuto con quello atteso
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano
TESTBENCH
4
• Possiamo utilizzare il linguaggio VHDL anche per descrivere i testbench• Un testbench in VHDL si compone semplicemente di una entity e di una architecture aggiuntiva• Non può essere sintetizzato, ma serve “solo” per verificare il comportamento del componente in simulazione
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 5
library ieee;
use ieee.std_logic_1164.all;
entity testbench is
end testbench;
architecture arch of testbench is
-- Dichiaro il componente che deve essere testato
component daTestare
port(
i1, i2, ..., in: in ...;
o1, o2, ..., on: out ...;
);
end component;
-- Inputs
signal i1, i2, ..., in : ... ;
! -- Outputs
signal o1, o2, ..., on : ... ;
-- Definizione del periodo di clock
constant clk_period : time := 10 ns;
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano
library ieee;
use ieee.std_logic_1164.all;
entity testbench is
end testbench;
architecture arch of testbench is
-- Dichiaro il componente che deve essere testato
component daTestare
port(
i1, i2, ..., in: in ...;
o1, o2, ..., on: out ...;
);
end component;
-- Inputs
signal i1, i2, ..., in : ... ;
! -- Outputs
signal o1, o2, ..., on : ... ;
-- Definizione del periodo di clock
constant clk_period : time := 10 ns;
6
entity testbenchDichiaro una entity vuota: il mio nuovo componente non ha alcuna interfaccia verso l’esterno
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 7
library ieee;
use ieee.std_logic_1164.all;
entity testbench is
end testbench;
architecture arch of testbench is
-- Dichiaro il componente che deve essere testato
component daTestare
port(
i1, i2, ..., in: in ...;
o1, o2, ..., on: out ...;
);
end component;
-- Inputs
signal i1, i2, ..., in : ... ;
! -- Outputs
signal o1, o2, ..., on : ... ;
-- Definizione del periodo di clock
constant clk_period : time := 10 ns;
architecture che realizza l’entity testbench descritta in modo strutturale
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 8
library ieee;
use ieee.std_logic_1164.all;
entity testbench is
end testbench;
architecture arch of testbench is
-- Dichiaro il componente che deve essere testato
component daTestare
port(
i1, i2, ..., in: in ...;
o1, o2, ..., on: out ...;
);
end component;
-- Inputs
signal i1, i2, ..., in : ... ;
! -- Outputs
signal o1, o2, ..., on : ... ;
-- Definizione del periodo di clock
constant clk_period : time := 10 ns;
architecture che realizza l’entity testbench descritta in modo strutturale
dichiaro come component il mio componente da testare
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 9
library ieee;
use ieee.std_logic_1164.all;
entity testbench is
end testbench;
architecture arch of testbench is
-- Dichiaro il componente che deve essere testato
component daTestare
port(
i1, i2, ..., in: in ...;
o1, o2, ..., on: out ...;
);
end component;
-- Inputs
signal i1, i2, ..., in : ... ;
! -- Outputs
signal o1, o2, ..., on : ... ;
-- Definizione del periodo di clock
constant clk_period : time := 10 ns;
architecture che realizza l’entity testbench descritta in modo strutturale
dichiaro come component il mio componente da testare
dichiaro un segnale interno signal per ogni segnale presente nell’interfaccia del componente daTestare
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 10
library ieee;
use ieee.std_logic_1164.all;
entity testbench is
end testbench;
architecture arch of testbench is
-- Dichiaro il componente che deve essere testato
component daTestare
port(
i1, i2, ..., in: in ...;
o1, o2, ..., on: out ...;
);
end component;
-- Inputs
signal i1, i2, ..., in : ... ;
! -- Outputs
signal o1, o2, ..., on : ... ;
-- Definizione del periodo di clock
constant clk_period : time := 10 ns;
Definizione del periodo di clock tramite una costante di tipo time inizializzata a 10 nsconstant nome: tipo;
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 11
begin
! -- Istanzio il componente che deve essere testato
test: daTestare port map (
...
);
-- Processo di clock
clk_process: process
begin
! ! clk <= '0';
! ! wait for clk_period/2;
! ! clk <= '1';
! ! wait for clk_period/2;
end process;
-- Processo di generazione degli stimoli
stim_proc: process
begin! !
-- Genero gli stimoli qui, facendo uso dell’istruzione
-- wait for per gestire la temporizzazione
! ! ASSERT(FALSE) REPORT "Simulation Succesfull." SEVERITY FAILURE;
end process;
end;
Il componente daTestare deve essere istanziato nella parte funzionale dell’architecture
Mappo i segnali dichiarati in precedenza con quelli presenti all’interfaccia del componente
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 12
begin
! -- Istanzio il componente che deve essere testato
test: daTestare port map (
...
);
-- Processo di clock
clk_process: process
begin
! ! clk <= '0';
! ! wait for clk_period/2;
! ! clk <= '1';
! ! wait for clk_period/2;
end process;
-- Processo di generazione degli stimoli
stim_proc: process
begin! !
-- Genero gli stimoli qui, facendo uso dell’istruzione
-- wait for per gestire la temporizzazione
! ! ASSERT(FALSE) REPORT "Simulation Succesfull." SEVERITY FAILURE;
end process;
end;
process che realizza il clock per il componente da testare.Poichè la sensitivity_list è vuota, il processo viene risvegliato continuamente
L’istruzione - wait for valore - fa si che il componente resti in attesa per la quantità di tempo specificata
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 13
begin
! -- Istanzio il componente che deve essere testato
test: daTestare port map (
...
);
-- Processo di clock
clk_process: process
begin
! ! clk <= '0';
! ! wait for clk_period/2;
! ! clk <= '1';
! ! wait for clk_period/2;
end process;
-- Processo di generazione degli stimoli
stim_proc: process
begin! !
-- Genero gli stimoli qui, facendo uso dell’istruzione
-- wait for per gestire la temporizzazione
! ! ASSERT(FALSE) REPORT "Simulation Succesfull." SEVERITY FAILURE;
end process;
end;
Il secondo process genera gli stimoli da applicare agli ingressi del componente daTestare
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 14
begin
! -- Istanzio il componente che deve essere testato
test: daTestare port map (
...
);
-- Processo di clock
clk_process: process
begin
! ! clk <= '0';
! ! wait for clk_period/2;
! ! clk <= '1';
! ! wait for clk_period/2;
end process;
-- Processo di generazione degli stimoli
stim_proc: process
begin! !
-- Genero gli stimoli qui, facendo uso dell’istruzione
-- wait for per gestire la temporizzazione
! ! ASSERT(FALSE) REPORT "Simulation Succesfull." SEVERITY FAILURE;
end process;
end;
L’ultima istruzione del process deve essere una ASSERT che termina l’esecuzione e la simulazione
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano
TESTBENCH
15
• Il simulatore mostra le forme d’onda in modo che possano essere inspezionate dal progettista• Questa fase può essere automatizzata
daTestare
testbench
...
...
i1i2
in
o1o2
onclk rst
i1i2
inclk
rst
o1o2
on
Genera eapplica gli
stimoli
Legge everifica irisultati
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 16
library ieee;
use ieee.std_logic_1164.all;
entity testbench is
end testbench;
architecture arch of testbench is
-- Dichiaro il componente che deve essere testato
component controllore_semaforico
port(
clk : in std_logic;
reset : in std_logic;
amb : in std_logic;
p : out std_logic;
s : out std_logic
);
end component;
-- Dichiarazione dei segnali come da interfaccia
signal clk : std_logic := '0';
signal reset : std_logic := '0';
signal amb : std_logic := '0';
signal p : std_logic;
signal s : std_logic;
-- Definizione del periodo di clock
constant clk_period : time := 10 ns;
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 17
library ieee;
use ieee.std_logic_1164.all;
entity testbench is
end testbench;
architecture arch of testbench is
-- Dichiaro il componente che deve essere testato
component controllore_semaforico
port(
clk : in std_logic;
reset : in std_logic;
amb : in std_logic;
p : out std_logic;
s : out std_logic
);
end component;
-- Dichiarazione dei segnali come da interfaccia
signal clk : std_logic := '0';
signal reset : std_logic := '0';
signal amb : std_logic := '0';
signal p : std_logic;
signal s : std_logic;
-- Definizione del periodo di clock
constant clk_period : time := 10 ns;
All’interno dell’architecture del testbench dichiaro il componente da testare e i segnali corrispondenti a quelli presenti nell’interfaccia del componente stesso
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 18
begin
! -- Istanzio il componente che deve essere testato
test: controllore_semaforico port map (
clk => clk,
reset => reset,
amb => amb,
p => p,
s => s
);
-- Processo di clock
clk_process: process
begin
! ! clk <= '0';
! ! wait for clk_period/2;
! ! clk <= '1';
! ! wait for clk_period/2;
end process;
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 19
begin
! -- Istanzio il componente che deve essere testato
test: controllore_semaforico port map (
clk => clk,
reset => reset,
amb => amb,
p => p,
s => s
);
-- Processo di clock
clk_process: process
begin
! ! clk <= '0';
! ! wait for clk_period/2;
! ! clk <= '1';
! ! wait for clk_period/2;
end process;
Tutto uguale a prima: completo il mapping delle porte dopo aver istanziato il componente
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 20
-- Processo di generazione degli stimoli
stim_proc: process
begin!!
reset <='1';
! ! amb <='0';
! ! wait for clk_period;!
reset<='0';!!
wait for clk_period*10;
! ! amb<='1';
wait for clk_period;
! ! amb<='0';
wait for clk_period*8;
! ! amb<='1';
wait for clk_period;
! ! amb<='0';
wait for clk_period*10;
! !
ASSERT(FALSE) REPORT "Simulation Succesfull." SEVERITY FAILURE;
end process;
end;
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 21
-- Processo di generazione degli stimoli
stim_proc: process
begin!!
reset <='1';
! ! amb <='0';
! ! wait for clk_period;!
reset<='0';!!
wait for clk_period*10;
! ! amb<='1';
wait for clk_period;
! ! amb<='0';
wait for clk_period*8;
! ! amb<='1';
wait for clk_period;
! ! amb<='0';
wait for clk_period*10;
! !
ASSERT(FALSE) REPORT "Simulation Succesfull." SEVERITY FAILURE;
end process;
end;
Inizializzazione del componente
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 22
-- Processo di generazione degli stimoli
stim_proc: process
begin!!
reset <='1';
! ! amb <='0';
! ! wait for clk_period;!
reset<='0';!!
wait for clk_period*10;
! ! amb<='1';
wait for clk_period;
! ! amb<='0';
wait for clk_period*8;
! ! amb<='1';
wait for clk_period;
! ! amb<='0';
wait for clk_period*10;
! !
ASSERT(FALSE) REPORT "Simulation Succesfull." SEVERITY FAILURE;
end process;
end;
Inizializzazione del componente
Due cicli di funzionamento nominale
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 23
-- Processo di generazione degli stimoli
stim_proc: process
begin!!
reset <='1';
! ! amb <='0';
! ! wait for clk_period;!
reset<='0';!!
wait for clk_period*10;
! ! amb<='1';
wait for clk_period;
! ! amb<='0';
wait for clk_period*8;
! ! amb<='1';
wait for clk_period;
! ! amb<='0';
wait for clk_period*10;
! !
ASSERT(FALSE) REPORT "Simulation Succesfull." SEVERITY FAILURE;
end process;
end;
Inizializzazione del componente
Due cicli di funzionamento nominale
amb interrompe il verde su p
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 24
-- Processo di generazione degli stimoli
stim_proc: process
begin!!
reset <='1';
! ! amb <='0';
! ! wait for clk_period;!
reset<='0';!!
wait for clk_period*10;
! ! amb<='1';
wait for clk_period;
! ! amb<='0';
wait for clk_period*8;
! ! amb<='1';
wait for clk_period;
! ! amb<='0';
wait for clk_period*10;
! !
ASSERT(FALSE) REPORT "Simulation Succesfull." SEVERITY FAILURE;
end process;
end;
Inizializzazione del componente
Due cicli di funzionamento nominale
amb interrompe il verde su p
amb interrompe il verde su s
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 26
Controllore SemaforicoLa prima volta che amb assume valore 1 anche p vale 1: dopo un ciclo di clock in cui p e s valgono 0 il ciclo ricomincia da s.
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 27
Controllore SemaforicoLa prima volta che amb assume valore 1 anche p vale 1: dopo un ciclo di clock in cui p e s valgono 0 il ciclo ricomincia da s.
La seconda volta amb interrompe il verde su s: il ciclo ricomincia da p, come ci si aspetta.
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano
SINTESI & IMPLEMENTAZ.
29
.vhdsintesi logica
technology mapping
place & route
bitstream generation ...0010111010...
masks generation
FPGAASIC
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano
SINTESI
30
• Tutte le istruzioni che abbiamo visto finora possono essere simulate, solo alcune possono essere sintetizzate
• Non possono essere sintetizzati i tipi di dato floating point, le istruzioni sui file, i ritardi di porta (after), le istruzioni wait, ...
• I segnali di tipo std_logic quando sintetizzati possono assumere solo i valori 0 e 1
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano
TOOL
32
Xilinx ISE WebPACK Design Softwarehttp://www.xilinx.com/support/download/index.htm
Al termine dell’installazione selezionareFree or Evaluation Product License
versione limitata, ma gratuita del software,sufficiente per svilluppare gli homeworks.
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano
HOMEWORKS
33
Possibilità di punti aggiuntivi: homeworks sul VHDL
FACOLTATIVI‣ 2 progettini da svolgere - MAX 2 punti (indicativamente 0.5+1.5 da sommare al voto d’esame prima dell’arrotondamento)‣ per ognugno viene richiesta la scrittura del codice VHDL e la stesura di un report
‣ Nessuna penalità in caso di non completamento o insufficienza del lavoro
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano
HOMEWORKS
34
Per ognuno dei due homework dovete consegnare:
• file .vhd del componente
• file .vhd del testbench
• report .pdf (4/5 pagine) con descrizione delle scelte progettuali (schematico e descrizione dei componenti - FSM, codifica degli stati e modello di Huffman) e commento dei risultati di simulazione
VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano
HOMEWORKS
35
Scadenze:‣ 18/12/2012: richiesta homeworks via mail a [email protected] con tag [RL-homeworks] specificando nome, cognome e matricola‣ 25/12/2012: entro questa data riceverete il I homework‣ 06/01/2013: consegna I homework sempre via mail a [email protected] con tag [RL-homework1]‣ 07/01/2013: invio II homework‣ 27/01/2013: consegna II homework sempre via mail a [email protected] con tag [RL-homework2]‣ Inizio Febbraio: discussione e valutazione degli homework