35
VHDL: Simulazione & Sintesi M. CARMINATI [email protected] Politecnico di Milano 18 Dicembre 2012

VHDL: Simulazione & Sintesi - home.deib.polimi.ithome.deib.polimi.it/mcarminati/didattica/rl_2013/vhdl/vhdl_ss.pdf · VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano

Embed Size (px)

Citation preview

VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano

SIMULAZIONE

2

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 25

Controllore Semaforico

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 &IMPLEMENTAZIONE

28

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

31

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