Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

VHDL Testbench

Strumenti informatici per la matematica applicata, le simulazioni, il disegno: Mathcad, Matlab, Scilab, Microcap, PSpice, AutoCad ...

Moderatori: Foto Utenteg.schgor, Foto Utentedimaios

0
voti

[1] VHDL Testbench

Messaggioda Foto Utenteireon » 13 mar 2013, 16:43

Sto cercando di capire come effettuare il Testbench. Allora sto utilizzando il programma ISE Project della Xilinx. Ho scritto il codice VHDL di un multiplexer a livello di gate, quindi ho ottenuto l'implementazione della funzione booleana del mux a porte logiche, di seguito metto un'immagine con il codice VHDL:

Immagine

Adesso come faccio ad eseguire il Testbench per vedere se il circuito funziona?
Guardando in giro su internet ho letto che bisogna creare la entity per effettuare il Testbench, quindi per la entity dovrei avere un codice del tipo:

Codice: Seleziona tutto
entity test_mux is
end test_mux;


Poi dovrei scrivere qualcosa del tipo:

Codice: Seleziona tutto
x<='0', '1' after 10ns, '0' after 30ns;


Ma devo creare un progetto a parte rispetto a quello che ho creato per implementare il mux? Ho faccio tutto all'interno dello stesso progetto? Potreste spiegarmi bene i passaggi partendo dal codice del mux che ho scritto sopra? Poi all'interno del programma dopo che ho scritto il codice del Testbench devo cliccare su simulation in alto a sinitra?
Avatar utente
Foto Utenteireon
14 1 2 6
Frequentatore
Frequentatore
 
Messaggi: 237
Iscritto il: 24 ott 2010, 12:21

0
voti

[2] Re: VHDL Testbench

Messaggioda Foto Utenteireon » 14 mar 2013, 13:34

Ho provato tutto ieri pomeriggio ma non ci sono riuscito ad eseguire il Testbench mi parte la schermata ma non ci sono transizioni.. Il codice che ho scritto per il Testbench del codice sorgente del mux scritto sopra è il seguente:

Codice: Seleziona tutto
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;


--USE ieee.numeric_std.ALL;

ENTITY test_MUX IS
END test_MUX;

ARCHITECTURE behavior OF test_MUX IS

   

    COMPONENT MUX
    PORT(
         IN_1 : IN  bit;
         IN_2 : IN  bit;
         CTRL : IN  bit;
         OUTPUT : OUT  bit
        );
    END COMPONENT;
   

   
   signal IN_1 : bit;
   signal IN_2 : bit;
   signal CTRL : bit;
   signal OUTPUT : bit;
   
   BEGIN

   uut: MUX PORT MAP (
            IN_1_S
            IN_2_S
            CTRL_S
            OUTPUT_S
        );


    stim_proc: process
    begin      
   
    wait for 5 ns;
   
    IN_1_S<='1'; IN_2_S_test<='0'; CTRL_S<='0' wait for 10 ns;
    IN_1_S<='1'; IN_2_S<='1'; CTRL_S<='1' wait for 10 ns;
    IN_1_S<='1'; IN_2_S<='0'; CTRL_S<='0' wait for 10 ns
    IN_1_S<='0'; IN_2_1_test<='0'; CTRL_S<='0' wait for 10 ns;
    IN_1_S<='0'; IN_2_S<='1'; CTRL_S<='1' wait for 10 ns;
   
      wait;
   end process;

END;


E la schermata che ottengo è la seguente:

Immagine

Dove sbaglio?
Avatar utente
Foto Utenteireon
14 1 2 6
Frequentatore
Frequentatore
 
Messaggi: 237
Iscritto il: 24 ott 2010, 12:21

0
voti

[3] Re: VHDL Testbench

Messaggioda Foto UtenteUtdis1 » 14 mar 2013, 14:22

Hai definito in generale un'entità vuota, un componente (perché?) e dei segnali ma a me sembra che manchi il codice di descrizione del funzionamento del tuo multiplexer.
Se invece pensavi di usare il multiplexer come componente di una delle librerie presenti nel sistema di sviluppo, allora, probabilmente manca qualche passaggio, ma non so dirti molto perché non è la metodologia che uso.
Ti consiglio di commentare il processo di generazione dei vettori di simulazione e provare a sintetizzare il tuo codice, verificando che errori ti dà.

Per il processo che genera i vettori di simulazione, normalmente preferisco le descrizioni tipo
x<='0', '1' after 10ns, '0' after 30ns, etc... (dovex è uno dei segnali di ingresso dell'entità)
che danno un'idea del variare dei segnali allo scorrere del tempo ed in fondo un bel wait per la durata ella simulazione.
Avatar utente
Foto UtenteUtdis1
466 1 3 6
CRU - Account cancellato su Richiesta utente
 
Messaggi: 587
Iscritto il: 16 mar 2009, 19:04

0
voti

[4] Re: VHDL Testbench

Messaggioda Foto Utenteireon » 14 mar 2013, 15:28

Ho risolto stavo avviando la simulazione sul codice sorgente invece che sul codice di test, quindi non mi graficava niente, adesso ho capito e funziona! :-)
Ultima modifica di Foto Utenteireon il 14 mar 2013, 15:54, modificato 1 volta in totale.
Avatar utente
Foto Utenteireon
14 1 2 6
Frequentatore
Frequentatore
 
Messaggi: 237
Iscritto il: 24 ott 2010, 12:21

0
voti

[5] Re: VHDL Testbench

Messaggioda Foto UtenteUtdis1 » 14 mar 2013, 15:53

Sostituisci wait con wait for 50 ns.
perché a_s e b_s e non a e b?
Avatar utente
Foto UtenteUtdis1
466 1 3 6
CRU - Account cancellato su Richiesta utente
 
Messaggi: 587
Iscritto il: 16 mar 2009, 19:04

0
voti

[6] Re: VHDL Testbench

Messaggioda Foto Utenteireon » 14 mar 2013, 15:54

Adesso funziona! (vedi messaggio sopra)
Avatar utente
Foto Utenteireon
14 1 2 6
Frequentatore
Frequentatore
 
Messaggi: 237
Iscritto il: 24 ott 2010, 12:21

0
voti

[7] Re: VHDL Testbench

Messaggioda Foto Utenteireon » 14 mar 2013, 20:37

Stavo pensando una cosa, il Testbench è molto utile e funziona bene su circuiti abbastanza semplici, ma se ho un circuito molto complesso con centinaia di Lut è impensabile effettuare il Testbench, quindi mi domandavo, ma esiste un altro metodo per testare il circuito che si ottiene dal codice?
Avatar utente
Foto Utenteireon
14 1 2 6
Frequentatore
Frequentatore
 
Messaggi: 237
Iscritto il: 24 ott 2010, 12:21

0
voti

[8] Re: VHDL Testbench

Messaggioda Foto UtenteCptFrank » 9 apr 2013, 22:08

Ciao Ireon.

La filosofia del VHDL è quella della gerarchia.
In poche parole, quando di un componente fai un entity non fai altro che descrivere come è fatto, solo esternamente, quindi solo con gli ingressi e le uscite e i loro rispettivi tipi di dato che accettano o trattano.
Ora immagina di partire da semplici porte logiche, per costruire un componente A, descrivendone sia l'entity che l'architecture, la quale descrive invece come funziona, di ognuna di loro. Poi le colleghi tra di loro tramite le port map.
Ora non ti resta che fare l'entity del componente A indicando come ti ho detto, sia gli ingressi che le uscite
e i tipi di dati ad essi associati e la sua architecture. Adesso immagina che questo componente A faccia parte di un altro componente B il quale per poter funzionare ha bisogno al suo interno del componente A, più altri componenti, di cui sia già stata data l'entity che l'architecture. Ripeti i passi fatti come per le porte logiche e così via.
In questo modo, un circuito o un componente, può avere qualsiasi grado di complessità, in quanto
è tutto già stato inglobato all'interno di un altro componente il cui interno è formato da altri componenti , fino ad arrivare al componente base. Inoltre, con l'uso delle librerie o con il copia e incolla,
non è che uno deve scrivere migliaia di righe del linguaggio.
Insomma è un po' come la matriosca. Mi rendo comunque conto di essere stato un po' confusionario
ma del resto spiegare un argomento con la scrittura è un po' problematico ma ti garantisco che una volta appresa la filosofia del VHDL, anche a te sarà chiaro. ;-)
Avatar utente
Foto UtenteCptFrank
15 5
New entry
New entry
 
Messaggi: 65
Iscritto il: 1 mar 2009, 0:06


Torna a Programmi applicativi: simulatori, CAD ed altro

Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti