ShootNick 0 16 января, 2014 Опубликовано 16 января, 2014 · Жалоба Файл находится в указанном месте, пробовал и с "\". 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-битовых коэффициентов КИХ-фильтра Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Raven 8 16 января, 2014 Опубликовано 16 января, 2014 · Жалоба Строка 140 - это какая из приведенных? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ShootNick 0 16 января, 2014 Опубликовано 16 января, 2014 · Жалоба Строка 140 - это какая из приведенных? file_open(c_file_handle, "I:\\flash\\vhdl\\FIR_N\\coeff.txt", READ_MODE); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Джеймс 3 16 января, 2014 Опубликовано 16 января, 2014 · Жалоба При синтезе? Вы шутник.. Делайте ROM (ПЗУ) и храните в нем коэффициенты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zig 26 16 января, 2014 Опубликовано 16 января, 2014 · Жалоба Привожу пример инициализации 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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ShootNick 0 16 января, 2014 Опубликовано 16 января, 2014 · Жалоба При синтезе? Вы шутник.. Делайте ROM (ПЗУ) и храните в нем коэффициенты. Нужно производить N умножений за один такт. А с ПЗУ прочитаю за один такт только одно значение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 16 января, 2014 Опубликовано 16 января, 2014 · Жалоба Нужно производить N умножений за один такт. А с ПЗУ прочитаю за один такт только одно значение. А из N ПЗУ как раз и прочтете одновременно N значений... Вы же не пишите, ни о частоте, ни о задаче... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZASADA 0 16 января, 2014 Опубликовано 16 января, 2014 · Жалоба а из ПЗУ с шириной шины 1000 байт за 1 такт прочитаете 1000 байт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bad0512 2 17 января, 2014 Опубликовано 17 января, 2014 · Жалоба а из ПЗУ с шириной шины 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 думаю всё можно сделать аналогично. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 17 января, 2014 Опубликовано 17 января, 2014 · Жалоба Файл находится в указанном месте, пробовал и с "\".Во-первых, не используйте абсолютные пути, если не хотите проблем с переносимостью. Указывайте путь относительно файла проекта. Во-вторых, попробуйте прямые слеши, а не обратные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gin 0 17 января, 2014 Опубликовано 17 января, 2014 · Жалоба file_open(c_file_handle, "I:\\flash\\vhdl\\FIR_N\\coeff.txt", READ_MODE); А зачем двойные обратные слеши в пути к файлу? Попробуйте заменить на обычные одинарные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Джеймс 3 18 января, 2014 Опубликовано 18 января, 2014 · Жалоба Я так понял у ТС нет задачи упихать массив коэффициентов в ПЗУху, а есть задача проинициализировать некоторый массив А я так понял что ТС просто механически переносит код на Си- или Pascal в VHDL. Смотрите, process (start) у него ПЛИС в ходе работы(!) должна получить доступ к файлу ... на компьютере. я уж не говорю о том что он считает что то, что написано внутри process, будет выполняться последовательно А советы ему не нужны - он их просто не воспринимает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ShootNick 0 18 января, 2014 Опубликовано 18 января, 2014 (изменено) · Жалоба спасибо, попробую этим методом. 1. насчитываю коэффициенты в стороннем софте (я пользую Матлаб, но тут выбор очень широкий). 2. форматирую получившийся файл (средствами Матлаба) в соответствии с синтаксисом verilog, например: 3. сохраняю в виде файла *.vh 4. в исходниках подключаю этот файл директивой include. Для VHDL думаю всё можно сделать аналогично. Изменено 18 января, 2014 пользователем ShootNick Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dsmv 0 20 января, 2014 Опубликовано 20 января, 2014 · Жалоба у него ПЛИС в ходе работы(!) должна получить доступ к файлу ... на компьютере. Операции с файлами при синтезе допускаются в нескольких случаях: 1. Инициализация памяти или констант 2. Отладка - например запись констант Так что должно работать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Джеймс 3 21 января, 2014 Опубликовано 21 января, 2014 · Жалоба Операции с файлами при синтезе допускаются в нескольких случаях: 1. Инициализация памяти или констант 2. Отладка - например запись констант Так что должно работать. А я разве говорил что к файлам нельзя обращаться в принципе? Я же не случайно упомянул process(start), имеющийся в коде у Автора. Сей шедевр написан таким образом, что должен получить доступ к файлу на компьютере во время работы. Не в таком виде как у ТС это должно описываться, совершенно не в таком. НЕ должно и не будет работать то, что у него написано. Сравните с рабочим кодом ув. Zig Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться