Перейти к содержанию
    

Файл находится в указанном месте, пробовал и с "\".

 

read_input:

process (start)

type char_file is file of character;

file c_file_handle: char_file;

variable C: character;

variable char_count: integer := 0;

begin

file_open(c_file_handle, "I:\\flash\\vhdl\\FIR_N\\coeff.txt", READ_MODE);

while not endfile(c_file_handle) loop

read (c_file_handle, C) ;

char_count := char_count + 1; -- Keep track of the number of characters

end loop;

file_close(c_file_handle);

end process;

 

ERROR:Xst:1914 - "I:/flash/vhdl/FIR_N/FIR.vhd" line 140: File <c_file_handle> does not exist.

 

В общем нужно прочитать из файла 8-битовых коэффициентов КИХ-фильтра

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Строка 140 - это какая из приведенных?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Строка 140 - это какая из приведенных?

 

file_open(c_file_handle, "I:\\flash\\vhdl\\FIR_N\\coeff.txt", READ_MODE);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привожу пример инициализации ROM значениями из файла.

Взято из ISE.

-- The libraries ieee.std_logic_unsigned and std.textio will need to be included
-- with this example
-- The following code will infer a Single port Block RAM and initialize it using a FILE

-- Place the following code before the begin of the architecture

   type <romtype> is array(0 to <rom_width>) of bit_vector(<rom_addr_bits> downto 0);
   impure function <rom_function_name> (<rom_file_name> : in string) return <romtype> is
      FILE <rom_file>         : text is in <rom_file_name>;
      variable <line_name> : line;
      variable <rom_name>       : <romtype>;
   begin
      for I in <romtype>'range loop
          readline (rom_file>, <line_name>);
          read (<line_name>, <rom_name>(I));
      end loop;
      return <rom_name>;
   end function;

   signal <rom_name> : <romtype> := <rom_function_name>("<file_name>");

-- Place the following after the begin

   process (<clock>)
   begin
      if <clock>'event and <clock> = '1' then
         if <write_enable> = '1' then
            <data_out> <= to_stdlogicvector(<rom_name>(conv_integer(<address>)));
         end if;
      end if;
   end process;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При синтезе? Вы шутник..

Делайте ROM (ПЗУ) и храните в нем коэффициенты.

Нужно производить N умножений за один такт. А с ПЗУ прочитаю за один такт только одно значение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужно производить N умножений за один такт. А с ПЗУ прочитаю за один такт только одно значение.

А из N ПЗУ как раз и прочтете одновременно N значений...

Вы же не пишите, ни о частоте, ни о задаче...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а из ПЗУ с шириной шины 1000 байт за 1 такт прочитаете 1000 байт.

Я так понял у ТС нет задачи упихать массив коэффициентов в ПЗУху, а есть задача проинициализировать некоторый массив константами из отдельного файла.

Я обычно делаю так (верилоговский случай):

1. насчитываю коэффициенты в стороннем софте (я пользую Матлаб, но тут выбор очень широкий).

2. форматирую получившийся файл (средствами Матлаба) в соответствии с синтаксисом verilog, например:

/* This source file is generated by Matlab script,
do not edit it!*/
  localparam rom_type coe_table [0:5] = '{
{
18'd262143, ...
},
{
...
},
{
...
},
{
...
},
{
...
},
{
...
}
};

3. сохраняю в виде файла *.vh

4. в исходниках подключаю этот файл директивой include.

Для VHDL думаю всё можно сделать аналогично.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Файл находится в указанном месте, пробовал и с "\".
Во-первых, не используйте абсолютные пути, если не хотите проблем с переносимостью. Указывайте путь относительно файла проекта. Во-вторых, попробуйте прямые слеши, а не обратные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

file_open(c_file_handle, "I:\\flash\\vhdl\\FIR_N\\coeff.txt", READ_MODE);

А зачем двойные обратные слеши в пути к файлу? Попробуйте заменить на обычные одинарные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я так понял у ТС нет задачи упихать массив коэффициентов в ПЗУху, а есть задача проинициализировать некоторый массив

А я так понял что ТС просто механически переносит код на Си- или Pascal в VHDL. Смотрите,

 

process (start)

у него ПЛИС в ходе работы(!) должна получить доступ к файлу ... на компьютере.

я уж не говорю о том что он считает что то, что написано внутри process, будет выполняться последовательно

А советы ему не нужны - он их просто не воспринимает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо, попробую этим методом.

 

1. насчитываю коэффициенты в стороннем софте (я пользую Матлаб, но тут выбор очень широкий).

2. форматирую получившийся файл (средствами Матлаба) в соответствии с синтаксисом verilog, например:

3. сохраняю в виде файла *.vh

4. в исходниках подключаю этот файл директивой include.

Для VHDL думаю всё можно сделать аналогично.

Изменено пользователем ShootNick

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у него ПЛИС в ходе работы(!) должна получить доступ к файлу ... на компьютере.

 

Операции с файлами при синтезе допускаются в нескольких случаях:

 

 

1. Инициализация памяти или констант

 

2. Отладка - например запись констант

 

Так что должно работать.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Операции с файлами при синтезе допускаются в нескольких случаях:

1. Инициализация памяти или констант

2. Отладка - например запись констант

Так что должно работать.

А я разве говорил что к файлам нельзя обращаться в принципе?

Я же не случайно упомянул process(start), имеющийся в коде у Автора. Сей шедевр написан таким образом, что должен получить доступ к файлу на компьютере во время работы.

Не в таком виде как у ТС это должно описываться, совершенно не в таком. НЕ должно и не будет работать то, что у него написано.

Сравните с рабочим кодом ув. Zig

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...