Jump to content

    
dlsh

RAM на SV упаковать в altsyncram в Quartus 12.1

Recommended Posts

В фильтре на 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. 

Может кто встречался с подобным? Возможно есть какие то доп. настройки в проекте?

Share this post


Link to post
Share on other sites

не совсем понял, что такое оформить модуль на регистрах.

Но если надо что то разместить в памяти, всегда использовал атрибуты. Например
 

reg [..] data /*synthesis ramstyle = "M20K", no_rw_check*/;

 

Соответственно вам наверное так надо

reg [DATA_WIDTH-1:0] rom[2**ADDR_WIDTH-1:0]/* synthesis ramstyle = "M9K" */;

 

Edited by new123

Share this post


Link to post
Share on other sites
1 минуту назад, new123 сказал:

Но если надо что то разместить в памяти, всегда использовал атрибуты.

 

Интересно... попробую/почитаю. Спасибо за направление. 

Share this post


Link to post
Share on other sites
Just now, dlsh said:

Интересно... попробую/почитаю. Спасибо за направление. 

я там дополнил свой ответ. Ну а вообще далеко ходить не надо, тут все атрибуты, в том числе и описанный

https://www.intel.com/content/www/us/en/programmable/quartushelp/17.0/hdl/vlog/vlog_file_dir.htm

Надо только уточнить, поддерживает ли 12 версия

Share this post


Link to post
Share on other sites

У меня и без атрибутов исходный файл синтезировался в блочную память.

Наверно, все-таки или версия, или настройки (сам использую 13.1 для рабочих проектов, исходный файл проверил в 18.1).

Проверял без readmem

Share this post


Link to post
Share on other sites
1 час назад, dlsh сказал:

При сборке проекта Q12.1 офрмляет данный модуль на регистрах без использования памяти.

Это зависит не от Квартуса, а от FPGA. Не во всех FPGA можно проинициализировать блочную память. Например, в 10M16DAU324I7G нельзя.

Share this post


Link to post
Share on other sites
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;

Edited by Leka

Share this post


Link to post
Share on other sites

Нашел где собака порылась. В Quartus Assigments->Settings->Compiler Settings->Advanced Settings->Auto RAM Replacement установить в On. Без включения этой опции ни какие атрибуты не помогли.

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.