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

Квартус не может заинферрить память

Квартус 11.1SP1.

 

Выдает такую ошибку:

Info (276014): Found 8 instances of uninferred RAM logic
    Info (276007): RAM logic "bpformer:inst8|multichannel_dds_synthesizer:dds|true_dpdcram:pinc_ram|ram" is uninferred due to asynchronous read logic
    Info (276007): RAM logic "bpformer:inst8|multichannel_dds_synthesizer:dds|sin_rom" is uninferred due to asynchronous read logic
    Info (276007): RAM logic "bpformer:inst8|multichannel_dds_synthesizer:dds|cos_rom" is uninferred due to asynchronous read logic
    Info (276007): RAM logic "bpformer:inst8|multichannel_dds_synthesizer:dds|dpscram:acc_ram|ram" is uninferred due to asynchronous read logic
    Info (276007): RAM logic "bpformer:inst8|bpchannel:generated[1].bp|DataDelay:delayline|dpram:ram|ram" is uninferred due to asynchronous read logic
    Info (276007): RAM logic "bpformer:inst8|bpchannel:generated[2].bp|DataDelay:delayline|dpram:ram|ram" is uninferred due to asynchronous read logic
    Info (276007): RAM logic "bpformer:inst8|bpchannel:bp_ref|DataDelay:delayline|dpram:ram|ram" is uninferred due to asynchronous read logic
    Info (276007): RAM logic "bpformer:inst8|bpchannel:generated[0].bp|DataDelay:delayline|dpram:ram|ram" is uninferred due to asynchronous read logic

А потом сразу же:

Error (276003): Cannot convert all sets of registers into RAM megafunctions when creating nodes. The resulting number of registers remaining in design exceeds the number of registers in the device or the number specified by the assignment max_number_of_registers_from_uninferred_rams. This can cause longer compilation time or result in insufficient memory to complete Analysis and Synthesis

 

При этом блоки памяти использованы на основе стандартных темплейтов квартуса, например:

module dpscram
    #(
        parameter DATA_WIDTH=8, parameter ADDR_WIDTH=6
    )
    (
        input [(DATA_WIDTH-1):0] data,
        input [(ADDR_WIDTH-1):0] read_addr, write_addr,
        input we, clk,
        output reg [(DATA_WIDTH-1):0] q
    );

    reg [DATA_WIDTH-1:0] ram[2**ADDR_WIDTH-1:0];

    initial begin : init
        integer i;
        for(i = 0; i < 2**ADDR_WIDTH; i = i + 1)
            ram[i] = {DATA_WIDTH{1'b0}};
        q = 0;
    end

    always @ (posedge clk) begin
        if (we) ram[write_addr] <= data;
        q <= ram[read_addr];
    end

endmodule

 

Что ему не нравится? Кристалл EP2S60, так что памяти там с лихвой хватит...

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

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


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

где-то, что-то не так

Info (276007): RAM logic "bpformer:inst8|bpchannel:generated[1].bp|DataDelay:delayline|dpram:ram|ram" is uninferred due to asynchronous read logic

 

либо вы код привели не тот, либо одно из двух %)

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


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

Господа, ну надо же хоть иногда читать руководства! Смотрите главу 11 руководства по Квартусу, которая посвящена особенностям упихивания HDL-кода в камни. Не помню точно как называется, но там есть раздел как раз посвященный памяти с одновременной записью и чтением. Как раз ваш случай. Там есть все ответы!

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


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

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

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

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

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

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

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

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

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

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