Jump to content

    

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

Квартус 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, так что памяти там с лихвой хватит...

Edited by spectr

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this