Questo argomento contiene 3 risposte, ha 2 partecipanti, ed è stato aggiornato da  Mino_73 2 anni, 11 mesi fa.

Stai vedendo 4 articoli - dal 1 a 4 (di 4 totali)
  • Autore
    Articoli
  • #58482

    OMG
    Membro

    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??

    #70591

    Mino_73
    Membro

    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;
    .
    .
    .

    #70595

    OMG
    Membro

    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

    #70600

    Mino_73
    Membro

    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.

Stai vedendo 4 articoli - dal 1 a 4 (di 4 totali)

Devi aver eseguito l’accesso per poter rispondere a questa discussione.