Jump to content

    

Чтение из файла в vhdl

Добрый день!
Не нашел решение такой проблемы. При чтении из файла in.txt вылетает ошибка:

Error: STD_LOGIC_1164.READ(STD_ULOGIC_VECTOR) Error: Character '1' read, expected STD_ULOGIC literal.
Error: STD_LOGIC_1164.READ(STD_ULOGIC_VECTOR) Error: Character '2' read, expected STD_ULOGIC literal.
и т.д.

Файл in.txt:

1
2
3



read.vhd

use IEEE.std_logic_textio.all;
use STD.textio.all;

...

file in_file        : text;

...

    read_file : process
        variable v_ILINE     : line;
        variable v_data      : std_logic_vector(15 downto 0);
        --variable v_data	   : integer;
        variable v_SPACE     : character;
    begin
        file_open(in_file, "in.txt",  read_mode);
        
        while(not endfile(in_file)) loop
            readline(in_file, v_ILINE);
            read(v_ILINE, v_data);
   
            --dataIn <= CONV_STD_LOGIC_VECTOR(v_data, 16);
            dataIn <= v_data;
            wait for 1 us;
        end loop;
         
        file_close(in_file);
        wait;
    end process;

...

Если вместо variable v_data : std_logic_vector(15 downto 0);  использовать variable v_data : integer; , то все работает.

Хотя даже на этом форуме упоминали, что при включении use IEEE.std_logic_textio.all; все должно нормально работать. Пример брал здесь: https://www.nandland.com/vhdl/examples/example-file-io.html

Share this post


Link to post
Share on other sites

Попробуйте включить  еще

library STD;
use     STD.textio.all;

 

Share this post


Link to post
Share on other sites

Используйте вместо типа std_logic_vecor тип bit_vector

Share this post


Link to post
Share on other sites

Добрый день.

Рабочий вариант:

     variable v_ILINE     : line;

     variable data_p      : std_logic_vector(3 downto 0);
     variable data_n      : std_logic_vector(3 downto 0);
     variable v_SPACE   : character;

     file_open(file_input, "data.txt",  read_mode);

     readline(file_input, v_ILINE);

     read(v_ILINE, data_p);
     read(v_ILINE, v_SPACE);           -- read in the space character
     read(v_ILINE, data_n);

В файле data.txt:

    1010 1100

    1110 1010

В вашем случае, не меняя типов в объявлениях, в файле заменить

1 на 0000000000000001

2 на 0000000000000010

и так далее.

Share this post


Link to post
Share on other sites
7 hours ago, andrew_su said:

Добрый день.

Рабочий вариант:

     variable v_ILINE     : line;

     variable data_p      : std_logic_vector(3 downto 0);
     variable data_n      : std_logic_vector(3 downto 0);
     variable v_SPACE   : character;

     file_open(file_input, "data.txt",  read_mode);

     readline(file_input, v_ILINE);

     read(v_ILINE, data_p);
     read(v_ILINE, v_SPACE);           -- read in the space character
     read(v_ILINE, data_n);

В файле data.txt:

    1010 1100

    1110 1010

В вашем случае, не меняя типов в объявлениях, в файле заменить

1 на 0000000000000001

2 на 0000000000000010

и так далее.

Да, действительно. Благодарю!

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this