Jump to content

    
Sign in to follow this  
Komissar

VHDL. Загрузка данных из файла в тестбенч

Recommended Posts

Здравствуйте!

Есть текстовый файл с данными в шестнадцатеричном формате. При попытке загрузить данные из него в тестбенч Modelsim выдаёт "Error: (vsim-3560) STD_LOGIC_1164.READ(STD_ULOGIC_VECTOR) Error: Character 'F' read, expected STD_ULOGIC literal.", а на диаграмме сигнал в неопределённом состоянии (U).

 

Код:

 

LIBRARY ieee,std;

USE ieee.std_logic_1164.ALL;

use IEEE.std_logic_arith.all;

use IEEE.std_logic_unsigned.all;

use IEEE.std_logic_TEXTIO.all;

use std.textio.all;

 

...

 

FILE indat :text OPEN read_mode IS "indat.txt";

 

...

 

tb : PROCESS

variable d_line: line;

variable XGV: std_logic_vector (31 downto 0);

BEGIN

 

m_r_ok <= '0';

XG <= (others => '0');

m_XG <= '0';

wait for cper*40;

m_XG <= '1';

for i in 0 to 51599 loop

readline(indat,d_line);

read(d_line,XGV);

XG <= XGV;

wait for cper;

end loop;

m_XG <= '0';

wait for 100*cper;

 

 

 

END PROCESS;

 

Как можно эту ошибку исправить? Заранее спасибо за помощь.

Edited by Komissar

Share this post


Link to post
Share on other sites
Здравствуйте!

Есть текстовый файл с данными в шестнадцатеричном формате. При попытке загрузить данные из него в тестбенч Modelsim выдаёт "Error: (vsim-3560)

Как можно эту ошибку исправить? Заранее спасибо за помощь.

 

Использовать функцию hread, появившуюся в VHDL-2008. Или взять какую-нибудь стороннюю библиотеку, поддерживающую работу с данными в шестнадцатиричном формате.

Share this post


Link to post
Share on other sites
Здравствуйте!

Есть текстовый файл с данными в шестнадцатеричном формате. При попытке загрузить данные из него в тестбенч Modelsim выдаёт "Error: (vsim-3560) STD_LOGIC_1164.READ(STD_ULOGIC_VECTOR) Error: Character 'F' read, expected STD_ULOGIC literal.", а на диаграмме сигнал в неопределённом состоянии (U).

 

Код:

 

 

 

Как можно эту ошибку исправить? Заранее спасибо за помощь.

а почему именно в 16-чке, а почему не в 10-чке, а при чтении поставить фукцию конвертации в нужный формат? где открытие/закрытие файла на чтение/после чтения?

в общем, я делаю следующим образом (полный вариант тестбенча):

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
--USE ieee.numeric_std.ALL;
use IEEE.std_logic_arith.all;
use std.textio.all;

LIBRARY UNISIM;
USE UNISIM.Vcomponents.ALL;
ENTITY filter_filter_sch_tb IS
END filter_filter_sch_tb;
ARCHITECTURE behavioral OF filter_filter_sch_tb IS 

   COMPONENT filter
   PORT( clk    :    IN    STD_LOGIC; 
          enable    :    IN    STD_LOGIC; 
          rst    :    IN    STD_LOGIC; 
          cicout    :    OUT    STD_LOGIC_VECTOR (63 DOWNTO 0); 
          indata    :    IN    STD_LOGIC_VECTOR (15 DOWNTO 0); 
          loadrate    :    IN    STD_LOGIC; 
          rate    :    IN    STD_LOGIC_VECTOR (12 DOWNTO 0); 
          factor    :    IN    STD_LOGIC_VECTOR (16 DOWNTO 0); 
          doneCIC    :    OUT    STD_LOGIC; 
          res    :    OUT    STD_LOGIC_VECTOR (15 DOWNTO 0); 
          result    :    OUT    STD_LOGIC_VECTOR (80 DOWNTO 0));
   END COMPONENT;

   SIGNAL clk    :    STD_LOGIC;
   SIGNAL enable    :    STD_LOGIC;
   SIGNAL rst    :    STD_LOGIC;
   SIGNAL cicout    :    STD_LOGIC_VECTOR (63 DOWNTO 0);
   SIGNAL indata    :    STD_LOGIC_VECTOR (15 DOWNTO 0);
   SIGNAL loadrate    :    STD_LOGIC;
   SIGNAL rate    :    STD_LOGIC_VECTOR (12 DOWNTO 0);
   SIGNAL factor    :    STD_LOGIC_VECTOR (16 DOWNTO 0);
   SIGNAL doneCIC    :    STD_LOGIC;
   SIGNAL res    :    STD_LOGIC_VECTOR (15 DOWNTO 0);
   SIGNAL result    :    STD_LOGIC_VECTOR (80 DOWNTO 0);

BEGIN

   UUT: filter PORT MAP(
        clk => clk, 
        enable => enable, 
        rst => rst, 
        cicout => cicout, 
        indata => indata, 
        loadrate => loadrate, 
        rate => rate, 
        factor => factor, 
        doneCIC => doneCIC, 
        res => res, 
        result => result
   );

-- *** Test Bench - User Defined Section ***

clock_gen: process
begin
clk <= '0';
wait for 10 ns;
clk <= '1';
wait for 10 ns;
end process;

reset_gen: process
begin
rst <= '1';
wait for 100 ns;
rst <= '0';
wait;
end process;

enable_gen: process
begin
enable <= '0';
wait for 200 ns;
enable <= '1';
wait;
end process;

load_rate_gen: process
begin
loadrate <= '0';
wait for 200 ns;
loadrate <= '1';
wait for 100 ns;
loadrate <= '0';
wait;
end process;

const_gen: process
begin
factor <= "10011100010000000";
rate <= "0000000010100";
wait;
end process;

read_from_file: process(clk)
variable indata_line: line;
variable infdata: integer;
file input_data_file: text open read_mode is "DATA.txt";
begin
if rising_edge(clk) then
readline(input_data_file,indata_line);
read(indata_line,infdata);
indata <= CONV_STD_LOGIC_VECTOR(infdata, 16);
if endfile(input_data_file) then
report "end of file -- looping back to start of file";
file_close(input_data_file);
file_open(input_data_file,"DATA.txt");
end if;
end if;
end process;

--write_to_file: process(clk)
--variable outdata_line: line;
--variable outdata: integer :=0;
--file output_data_file: text open write_mode is "vhdl_output.txt";
--begin
--if rising_edge(clk) then
--outdata := 1*CONV_INTEGER(To_X01Z(z1))+2*CONV_INTEGER(To_X01Z(z2))+4*CONV_INTEGER(To_X01Z(z3))+8*CONV_INTEGER(To_X01Z(z4));
--write(outdata_line,outdata);
--writeline(output_data_file,outdata_line);
--end if;
--end process;

-- *** End Test Bench - User Defined Section ***

END;

и в DATA.txt данные записываю так

1

2

3

4

5

6

и т.д.

Share this post


Link to post
Share on other sites
Использовать функцию hread, появившуюся в VHDL-2008. Или взять какую-нибудь стороннюю библиотеку, поддерживающую работу с данными в шестнадцатиричном формате.
Функция hread была и раньше VHDL-2008, она описана в пакете std_logic_textio. Смотрите главу 7 в книжке Бибилы "VHDL. Эффективное использование при проектировании цифровых систем" (есть на генлибрусеке), посвященной работе с файлами.

 

Share this post


Link to post
Share on other sites
Функция hread была и раньше VHDL-2008, она описана в пакете std_logic_textio. Смотрите главу 7 в книжке Бибилы "VHDL. Эффективное использование при проектировании цифровых систем" (есть на генлибрусеке), посвященной работе с файлами.

 

Большое спасибо! Помогло.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this