Проблемы с использованием Hread для чтения шестнадцатеричных байтов из текстового файла - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь прочитать строки шестнадцатеричных байтов из текстового файла, используя хэд. Например:

00 00 C0 AF 12

D1 00 55 E2 34

.

.

Компилируется нормально, но когда Я пытаюсь симулировать, я продолжаю получать эту ошибку:

ncsim: * E, TRTEXTIO: ошибка TEXTIO. ЛИНИЯ длиной 0 на READ типа CHARACTER

/ incisive_15.20.069 / tools / inca / files / IEEE.src / std_logic_textio.vhd: 344 чтения (l, c);

      File: /apps/incisive_15.20.069/tools/inca/files/IEEE.src/std_logic_textio.vhd, line = 344, pos = 6
     Scope: @ieee.std_logic_textio:HREAD
      Time: 250 NS + 1

Это относится к этой процедуре в std_logic_textio.vhd, но не уверен почему.

процедура HREAD (L: inout LINE; VALUE: out BIT_VECTOR; GOOD: out BOOLEAN)

Я смог чтобы сделать это, используя READ вместо HREAD, но тогда все данные стимула из текстового файла должны быть в десятичном формате (вместо шестнадцатеричного). Мне нужно использовать hex. Я перепробовал много изменений безрезультатно. Например, изменение файла .csv, изменение формата данных (т. Е. Использование x "" вокруг каждого байта), использование std_ulogic_vector вместо std_logic_vector для типа поля VALUE. Хотите знать, может ли быть проблема с моей версией Simvision? Буду признателен за любые идеи.

ОК, добавив больше подробностей:

read_stimulus_data_file: process (clk, reset_n)

    file my_input             : TEXT open READ_MODE is "test_trial_" & integer'image(TEST_CASE) & ".txt";   

    type integer_array is array (0 to MAX_NO_COMMANDS - 1) of std_logic_vector(7 downto 0);     

    variable data_serial_type : integer_array;          

    variable my_input_line    : LINE;

    variable good             : boolean;    

begin
    if (reset_n = '0') then

        data_serial_type    := (others => (others => '0'));     
        message_to_decipher <= (others => (others => '0'));

    elsif (rising_edge(clk)) then

        if (enable = '1') then  -- enable determined elsewhere

            if (not endfile(my_input)) then                         

                readline(my_input, my_input_line);              

                for k in 0 to MAX_NO_COMMANDS - 1 loop
                    hread(my_input_line, data_serial_type(k), good);

                    message_to_decipher(k ) <= data_serial_type(k) ;                                                    

                end loop;                                   

            end if;         

        end if;   

завершение процесса read_stimulus_data_file;

...