Home
Accesso / Registrazione
 di 

VHDL

3 risposte [Ultimo post]
OMG
ritratto di OMG
Offline
Titolo: User
Utente
Ultima visita:
35 settimane 2 giorni fa
Utente dal: 23/11/2011
Messaggi: 3

salve mi sono iscritto da poco e ho gia una domanda da porvi, spero che sia la sezione giusta.
Io ho scritto questo codice qui sotto cercando di creare un decoder...

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity dec is
port(
x: in std_logic_vector ( 3 downto 0);
y: out std_logic_vector ( 15 downto 0)
);
end entity dec;

architecture behavior of dec is
begin

y <= "0000000000000001" when x = "0000" else
"0000000000000010" when x = "0001" else
"0000000000000100" when x = "0010" else
"0000000000001000" when x = "0011" else
"0000000000010000" when x = "0100" else
"0000000000100000" when x = "0101" else
"0000000001000000" when x = "0110" else
"0000000010000000" when x = "0111" else
"0000000100000000" when x = "1000" else
"0000001000000000" when x = "1001" else
"0000010000000000" when x = "1010" else
"0000100000000000" when x = "1011" else
"0001000000000000" when x = "1100" else
"0010000000000000" when x = "1101" else
"0100000000000000" when x = "1110" else
"1000000000000000" when x = "1111";

end architecture behavior;

-------------------------------- test banch

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity dec_TB is
end dec_TB;

architecture ex1 of dec_TB is
component dec is
port(
x: in std_logic_vector ( 3 downto 0);
y: out std_logic_vector ( 15 downto 0)
);
end component dec;

signal hexx: std_logic_vector ( 3 downto 0);
signal hexy: std_logic_vector ( 15 downto 0);
signal idealy: std_logic_vector ( 15 downto 0);
signal error: std_logic:='0';
signal i: integer range 0 to 15;

begin

inst0: dec port map (x=>hexx, y=>hexy);

process
begin

for i in 0 to 15 loop
hexx<= std_logic_vector (i, 4);
idealy<= std_logic_vector (2**i, 16);
wait for 10 ns;
end loop;

wait;

end process;

error<='0' when ( idealy= hexy) else '1' after 1 ns;
assert (error = '0')
report "attentio"
severity warning;

end architecture ex1;

...pero non funziona e continuano a comparire questi errori:
dec.vhdl:70:25: subprogram name is a type mark ( missing apostrophe)
dec.vhdl:71:27: subprogram name is a type mark ( missing apostrophe)

qualcuno puo darmi un'indicazione??

ritratto di Mino_73
Offline
Titolo: User++
Utente++
Ultima visita:
5 settimane 1 giorno fa
Utente dal: 27/06/2008
Messaggi: 66
Nel Test Bench le due righe

Nel Test Bench le due righe di codice:

hexx<= std_logic_vector (i, 4);
idealy<= std_logic_vector (2**i, 16);

non sono corrette e le devi sostituire con le seguenti

hexx <= conv_std_logic_vector(i, 4);
idealy <= conv_std_logic_vector(2**i, 16);

in pratica devi chiamare la funziona che converte un intero a un elemento di tipo standard logic vector. Per usare questefunzioni devi includere la seguente libreria:

use ieee.std_logic_arith.all;

con queste modifiche la compilazione non ti da errori e puoi andare avanti.
Qui "http://www.unirc.it/documentazione/materiale_didattico/599_2008_94_2798.pdf" una parte di un tutorial vhdl che riguarda anche le librerie. Ci sono molte funzioni utili che puoi utilizzare durante lo sviluppo di un progetto. Non tutto è sintetizzabile, cioè non tutte le funzioni possono poi essere interpretate e diventare un pezzo di hardware nell'fpga, ma per la scrittura dei test bench sono molto utili.
Ti consiglio di includerle fin da subito nei tuoi file sorgenti.

di seguito ti riporto la parte del tuo codice corretto.

-------------------------------- test banch

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--*****************************
use ieee.std_logic_arith.all;
--*****************************
entity dec_TB is
end dec_TB;
.
.
.
process
begin

for i in 0 to 15 loop
hexx <= conv_std_logic_vector(i, 4);
idealy <= conv_std_logic_vector(2**i, 16);
wait for 10 ns;
end loop;

wait;

end process;
.
.
.

OMG
ritratto di OMG
Offline
Titolo: User
Utente
Ultima visita:
35 settimane 2 giorni fa
Utente dal: 23/11/2011
Messaggi: 3
grazie

Grazie per l'illuminazione ma purtroppo non funziona la libreria ieee.std_logic_arith.all;
io utilizzo il notepad++ e non sò perchè non c'è ( l'errore è 'primary unit "std_logic_arith.all;" not found in library "IEEE"') pero ho seguido quello che mi hai detto sulla conversione e ho trovato questa library IEEE.numeric_std.all; e utilizzando to_unsigned in questo modo:

hexx <= std_logic_vector(to_unsigned(i,4));

funziona tutto quindi obiettivo raggiunto :)

grazie dell'auito

ritratto di Mino_73
Offline
Titolo: User++
Utente++
Ultima visita:
5 settimane 1 giorno fa
Utente dal: 27/06/2008
Messaggi: 66
Strano che non ti vede la la

Strano che non ti vede la la libreria è una di quelle standard.
Counque notepad++ è solo l'editor di testo dovresti vedere nelle impostazioni del compilatore vhdl, magari devi solo dirgli dove si trovano le varie librerie.
Ciao.

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 8 utenti e 75 visitatori collegati.

Ultimi Commenti