Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Codice VHDL

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

Moderatori: Foto Utenteg.schgor, Foto Utentedimaios

1
voti

[11] Re: Codice VHDL

Messaggioda Foto Utenterini » 27 apr 2014, 13:32

Ciao, ti posto un codice per analizzare la tua rete. E' un file di testbench.

Codice: Seleziona tutto
entity TestBench01 is
end TestBench01;

architecture behavior of TestBench01 is

   component ese_4
   port (
      SEL : in std_logic; -- Ingresso di selezione
      DOUT : out std_logic; -- Uscita dato seriale
      CLK : in std_logic; -- Clock
      RESET : in std_logic -- Reset
       );
   end component;

   
   signal SEL1 : std_logic := '0';
   signal CLK1 : std_logic := '0';
   signal RESET1 : std_logic := '0';
   signal DOUT1 : std_logic;
   
begin

  uut: Hello_VHDL PORT MAP(
      SEL => SEL1,
      CLK => CLK1,
      RESET => RESET1,
      DOUT => DOUT1
   );
   
  stim_proc: process
  begin

    wait for 50 ms; --per i primi 50ms il sistema non fa niente
   
   Clock_process : process
   begin
      CLK1 <= not(CLK1);
      wait for 20 ms;
   end process;

       -- Descrizione dei tuoi ingressi
      SEL1 <= '0'; RESET1 <= '0'; wait for 80 ms;
      SEL1 <= '1'; RESET1 <= '0'; wait for 40 ms;
      SEL1 <= '0'; RESET1 <= '0'; wait for 80 ms;
      SEL1 <= '0'; RESET1 <= '1'; wait for 5 ms;
      
      wait;
   end process;
end;


Prova ad analizzare il tuo file VHDL attraverso questo testbench file e inserisci l'immagine di prima ma con tutti i segnali. Non solo con gli ingressi e con le uscite ma anche con i segnali interni. Per inserire l'immagine non fare la foto con il tuo cellulare ma usa il tasto print della tastiera e poi apri paint e la incolli in paint. Farai uno screenshot del tuo monitor.
rini - \existslectroYou
Avatar utente
Foto Utenterini
1.345 2 5 13
Master EY
Master EY
 
Messaggi: 460
Iscritto il: 17 dic 2007, 1:04
Località: Bologna \ Salento

0
voti

[12] Re: Codice VHDL

Messaggioda Foto UtenteNunziox » 27 apr 2014, 14:37

Dal grafico che hai messo non si vede il segnale SEGN, che in teoria dovrebbe variare perché tu fai questa operazione:

Codice: Seleziona tutto
SEGN <= SEGN(5 downto 0)&SEGN(6);


rimetti il grafico con questo segnale.
Avatar utente
Foto UtenteNunziox
221 1 9
Frequentatore
Frequentatore
 
Messaggi: 152
Iscritto il: 28 ott 2012, 0:38

0
voti

[13] Re: Codice VHDL

Messaggioda Foto UtenteCastello » 28 apr 2014, 10:41

Ciao nunzio , dici di rifare il testbench e tra i segnali inserire anche il segnale interno SEGN, potresti ricordarmi come fare? Uso modelsim.
Avatar utente
Foto UtenteCastello
6 2
New entry
New entry
 
Messaggi: 60
Iscritto il: 3 apr 2014, 11:21

0
voti

[14] Re: Codice VHDL

Messaggioda Foto UtenteCastello » 28 apr 2014, 11:00

Immagine.png
Immagine.png
Avatar utente
Foto UtenteCastello
6 2
New entry
New entry
 
Messaggi: 60
Iscritto il: 3 apr 2014, 11:21

0
voti

[15] Re: Codice VHDL

Messaggioda Foto UtenteNunziox » 28 apr 2014, 13:48

Secondo me questa istruzione:

Codice: Seleziona tutto
DOUT <= SEGN(6) xor SELC;


andrebbe messa dentro il process se no non viene eseguita in maniera sequenziale ogni qual volta uno dei segnali in sensitivity list subisce una variazione!

Quando vuoi fare il reset dovresti farlo sul fronte di salita o di discesa del clock, per cui io scriverei:

Codice: Seleziona tutto
if RESET='1' and CLK'event then


Il segnale SEGN
Codice: Seleziona tutto
SEGN <= SEGN(5 downto 0)&SEGN(6);

non scorre secondo me dovresti usare gli operatori di shift o per lo meno scambiare:
Codice: Seleziona tutto
SEGN <= SEGN(6)&SEGN(5 downto 0);
Ultima modifica di Foto UtenteNunziox il 28 apr 2014, 13:59, modificato 1 volta in totale.
Avatar utente
Foto UtenteNunziox
221 1 9
Frequentatore
Frequentatore
 
Messaggi: 152
Iscritto il: 28 ott 2012, 0:38

0
voti

[16] Re: Codice VHDL

Messaggioda Foto UtenteCastello » 28 apr 2014, 13:55

dici , alla fine dei 2 end if e prima dell end process?
Avatar utente
Foto UtenteCastello
6 2
New entry
New entry
 
Messaggi: 60
Iscritto il: 3 apr 2014, 11:21

0
voti

[17] Re: Codice VHDL

Messaggioda Foto UtenteNunziox » 28 apr 2014, 14:01

Meglio lo ripeti alla fine del primo if e alla fine dell' else if!
In questo modo sei sicuro che il valore viene aggiornato sul fronte di salita o di discesa del clock.
Nel grafico manca ancora il segnale SELC.
Avatar utente
Foto UtenteNunziox
221 1 9
Frequentatore
Frequentatore
 
Messaggi: 152
Iscritto il: 28 ott 2012, 0:38

0
voti

[18] Re: Codice VHDL

Messaggioda Foto UtenteCastello » 28 apr 2014, 14:08

non ho ancora capito dove è che devo mettere quella espressione :/
Ah , è devo totalmente eliminarla da dove sta ora?!
Grazie ancora , per la pazienza.
Avatar utente
Foto UtenteCastello
6 2
New entry
New entry
 
Messaggi: 60
Iscritto il: 3 apr 2014, 11:21

0
voti

[19] Re: Codice VHDL

Messaggioda Foto UtenteNunziox » 28 apr 2014, 14:17

In entrambi i posti dove l'ho messa io.
Codice: Seleziona tutto
process(CLK, RESET, SEL)
begin
if CLK'event and RESET='1' then
  SEGN <= "0100111"; -- Pattern d'uscita
  SELC <= '0'; -- Selezione di default
  CNT <= 0; -- Contatore
  DOUT <= SEGN(6) xor SELC;
elsif CLK'event and CLK='1' then
-- Rotazione registro pattern
SEGN <= SEGN(5 downto 0)&SEGN(6);
-- Contatore
if CNT = 6 then
   CNT <= 0;
   SELC <= SEL; -- Lettura e memorizzazione valore di SEL
else
   CNT <= CNT + 1; -- Incremento contatore
end if;
DOUT <= SEGN(6) xor SELC;
end if;     
end process;


Avatar utente
Foto UtenteNunziox
221 1 9
Frequentatore
Frequentatore
 
Messaggi: 152
Iscritto il: 28 ott 2012, 0:38

0
voti

[20] Re: Codice VHDL

Messaggioda Foto UtenteCastello » 28 apr 2014, 14:25

Codice: Seleziona tutto
entity ese_4 is
  Port (SEL : in std_logic; -- Ingresso di selezione
DOUT : out std_logic; -- Uscita dato seriale
CLK : in std_logic; -- Clock
RESET : in std_logic); -- Reset
end ese_4;

architecture Behavioral of ese_4 is
signal SEGN : std_logic_vector(6 downto 0); -- Registro per pattern
signal SELC : std_logic; -- Registro selezione pattern
signal CNT : integer; -- Contatore bit uscita
begin
process(CLK, RESET, SEL)
begin
if CLK'event and RESET='1' then
SEGN <= "0100111"; -- Pattern d'uscita
SELC <= '0'; -- Selezione di default
CNT <= 0; -- Contatore
elsif CLK'event and CLK='1' then
-- Rotazione registro pattern
SEGN <= SEGN(5 downto 0)&SEGN(6);
-- Contatore
if CNT = 6 then
CNT <= 0;
SELC <= SEL; -- Lettura e memorizzazione valore di SEL
else
CNT <= CNT + 1; -- Incremento contatore
end if;
DOUT <= SEGN(6) xor SELC;
end if;      
end process;
-- Assegnazione uscita e negazione


end Behavioral;

Ho modificato, ma non funziona per niente adesso..
Avatar utente
Foto UtenteCastello
6 2
New entry
New entry
 
Messaggi: 60
Iscritto il: 3 apr 2014, 11:21

PrecedenteProssimo

Torna a Programmi applicativi: simulatori, CAD ed altro

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti