VHDL: Simulazione & Sintesi Politecnico di Milano 18 Dicembre 2012 M. CARMINATI mcarminati@elet.polimi.it
SIMULAZIONE VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 2
TESTBENCH 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 3
TESTBENCH 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 4
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 5
library ieee; use ieee.std_logic_1164.all; entity testbench is end testbench; entity testbench Dichiaro una entity vuota: il mio nuovo componente non ha alcuna interfaccia verso l esterno 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 6
library ieee; use ieee.std_logic_1164.all; entity testbench is end testbench; architecture che realizza l entity testbench descritta in modo strutturale 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 7
library ieee; use ieee.std_logic_1164.all; entity testbench is end testbench; architecture che realizza l entity testbench descritta in modo strutturale architecture arch of testbench is -- Dichiaro il componente che deve essere testato component datestare port( i1, i2,..., in: in...; o1, o2,..., on: out...; ); dichiaro come component il mio componente da testare 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 8
library ieee; use ieee.std_logic_1164.all; entity testbench is end testbench; architecture che realizza l entity testbench descritta in modo strutturale 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 dichiaro come component il mio componente da testare dichiaro un segnale interno signal per ogni segnale presente nell interfaccia del componente datestare constant clk_period : time := 10 ns; 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 tramite una costante di tipo time inizializzata a 10 ns constant nome: tipo; -- Definizione del periodo di clock constant clk_period : time := 10 ns; VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 10
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; Il componente datestare deve essere istanziato nella parte funzionale dell architecture Mappo i segnali dichiarati in precedenza con quelli presenti all interfaccia del componente 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; 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 process che realizza il clock per il componente da testare. Poichè la sensitivity_list è vuota, il processo viene risvegliato continuamente!! clk <= '0';!! wait for clk_period/2;!! clk <= '1';!! wait for clk_period/2; end process; L istruzione - wait for valore - fa si che il componente resti in attesa per la quantità di tempo specificata -- 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; 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; Il secondo process genera gli stimoli da applicare agli ingressi del componente datestare 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; 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; L ultima istruzione del process deve essere una ASSERT che termina l esecuzione e la simulazione -- 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; VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 14
TESTBENCH Il simulatore mostra testbench le forme d onda in modo che possano essere inspezionate dal progettista Questa fase può Genera e applica gli stimoli i1 i2 in clk... datestare i1 i2 in clk rst o1 o2 on... o1 o2 on Legge e verifica i risultati essere automatizzata rst VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 15
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 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; All interno dell architecture del testbench dichiaro il componente da testare e i segnali corrispondenti a quelli presenti nell interfaccia del componente stesso -- 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
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 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 Tutto uguale a prima: completo il mapping delle porte dopo aver istanziato il componente 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
-- 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 20
-- Processo di generazione degli stimoli stim_proc: process begin!! reset <='1';!! amb <='0';!! wait for clk_period;! Inizializzazione del componente 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;! Inizializzazione del componente 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;!! Due cicli di funzionamento nominale ASSERT(FALSE) REPORT "Simulation Succesfull." SEVERITY FAILURE; end process; end; 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;! Inizializzazione del componente 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;!! Due cicli di funzionamento nominale amb interrompe il verde su p ASSERT(FALSE) REPORT "Simulation Succesfull." SEVERITY FAILURE; end process; end; 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;! Inizializzazione del componente 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;!! Due cicli di funzionamento nominale amb interrompe il verde su p amb interrompe il verde su s ASSERT(FALSE) REPORT "Simulation Succesfull." SEVERITY FAILURE; end process; end; VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 24
Controllore Semaforico VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 25
Controllore Semaforico La 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 26
Controllore Semaforico La 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 27
SINTESI & IMPLEMENTAZIONE VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 28
SINTESI & IMPLEMENTAZ. sintesi logica.vhd technology mapping place & route masks bitstream generation generation ASIC VHDL: Simulazione & Sintesi - M. Carminati...0010111010... FPGA Politecnico di Milano 29
SINTESI 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 30
TOOL VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 31
TOOL Xilinx ISE WebPACK Design Software http://www.xilinx.com/support/download/index.htm Al termine dell installazione selezionare Free or Evaluation Product License versione limitata, ma gratuita del software, sufficiente per svilluppare gli homeworks. VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 32
HOMEWORKS 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 33
HOMEWORKS 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 34
HOMEWORKS Scadenze: 18/12/2012: richiesta homeworks via mail a mcarminati@elet.polimi.it 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 mcarminati@elet.polimi.it con tag [RL-homework1] 07/01/2013: invio II homework 27/01/2013: consegna II homework sempre via mail a mcarminati@elet.polimi.it con tag [RL-homework2] Inizio Febbraio: discussione e valutazione degli homework VHDL: Simulazione & Sintesi - M. Carminati Politecnico di Milano 35