dlsh 2 7 апреля, 2021 Опубликовано 7 апреля, 2021 · Жалоба В фильтре на SV есть описание RAM как module coef #(parameter DATA_WIDTH=24, parameter ADDR_WIDTH=9, parameter FILE_NAME_LPF) ( input wire [(DATA_WIDTH-1):0] data, input wire [(ADDR_WIDTH-1):0] addr, input wire we, input wire clk, output wire [(DATA_WIDTH-1):0] coef_rom ); reg [DATA_WIDTH-1:0] rom[2**ADDR_WIDTH-1:0]; reg [(DATA_WIDTH-1):0] data_out; assign coef_rom = data_out; //0..511 - blackman-harris 511 order 24-bit coeff //0..511 - blackman-harris 511 order 16-bit coeff //0..511 - squared 511 order 16-bit coeff initial $readmemh(FILE_NAME_LPF, rom); always @ (posedge clk) begin data_out <= rom[addr]; if (we) rom[addr] <= data; end endmodule При сборке проекта Q12.1 офрмляет данный модуль на регистрах без использования памяти. Что интересно - данный фильтир один в один использовался в другом проекте, правда был встроен как часть qsys. B в нем Quartus честно заменял его на ячейки M9K. Кристал в обоих проектах выбирался EP4CE55. Может кто встречался с подобным? Возможно есть какие то доп. настройки в проекте? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 7 апреля, 2021 Опубликовано 7 апреля, 2021 (изменено) · Жалоба не совсем понял, что такое оформить модуль на регистрах. Но если надо что то разместить в памяти, всегда использовал атрибуты. Например reg [..] data /*synthesis ramstyle = "M20K", no_rw_check*/; Соответственно вам наверное так надо reg [DATA_WIDTH-1:0] rom[2**ADDR_WIDTH-1:0]/* synthesis ramstyle = "M9K" */; Изменено 7 апреля, 2021 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dlsh 2 7 апреля, 2021 Опубликовано 7 апреля, 2021 · Жалоба 1 минуту назад, new123 сказал: Но если надо что то разместить в памяти, всегда использовал атрибуты. Интересно... попробую/почитаю. Спасибо за направление. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 7 апреля, 2021 Опубликовано 7 апреля, 2021 · Жалоба Just now, dlsh said: Интересно... попробую/почитаю. Спасибо за направление. я там дополнил свой ответ. Ну а вообще далеко ходить не надо, тут все атрибуты, в том числе и описанный https://www.intel.com/content/www/us/en/programmable/quartushelp/17.0/hdl/vlog/vlog_file_dir.htm Надо только уточнить, поддерживает ли 12 версия Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 7 апреля, 2021 Опубликовано 7 апреля, 2021 · Жалоба У меня и без атрибутов исходный файл синтезировался в блочную память. Наверно, все-таки или версия, или настройки (сам использую 13.1 для рабочих проектов, исходный файл проверил в 18.1). Проверял без readmem Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 17 7 апреля, 2021 Опубликовано 7 апреля, 2021 · Жалоба 1 час назад, dlsh сказал: При сборке проекта Q12.1 офрмляет данный модуль на регистрах без использования памяти. Это зависит не от Квартуса, а от FPGA. Не во всех FPGA можно проинициализировать блочную память. Например, в 10M16DAU324I7G нельзя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 7 апреля, 2021 Опубликовано 7 апреля, 2021 (изменено) · Жалоба 46 minutes ago, andrew_b said: Не во всех FPGA можно проинициализировать блочную память. К Циклонам это вроде не относится. Добавил "initial for(int i=0;i<512;i++) rom=i;", получил проинициализированную блочную память. initial for(int i=0;i<512;i++) rom[i]=i; Изменено 7 апреля, 2021 пользователем Leka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dlsh 2 8 апреля, 2021 Опубликовано 8 апреля, 2021 · Жалоба Нашел где собака порылась. В Quartus Assigments->Settings->Compiler Settings->Advanced Settings->Auto RAM Replacement установить в On. Без включения этой опции ни какие атрибуты не помогли. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться