Jump to content

    
Sign in to follow this  
Koluchiy

Sinplify и двухпортовая память

Recommended Posts

Здравствуйте, уважаемые Гуры.

 

При переходе в текущем проекте с XST на Sinplify начала ругаться на файл описания двухпортовой памяти (не мой, достался от другого разработчика вместе с куском проекта), где каждый порт работает на своем clk и у каждого порта своя ширина данных, причем с байт енаблами.

На основе файла, на который Sinplify ругается, сделал файлик попроще. Ошибка сохраняется: "@E: MF212...Found NRAM mem[31:24] with multiple processes".

 

Хелп от Sinplify советует поставить директиву /* synthesis syn_ramstyle="no_rw_check" */. Но она не помогает.

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

 

Микросхема Kintex 7.

 

Текст файла вот:

module t1
                (
                    input [15:0]             data1,
                    input    [31:0]            data2,
                    input [2:0]             waddr0,
                    input [1:0]             waddr1,
                    input [1:0]                we1,
                    input [3:0]                we2,
                    input                         clk1,clk2,
                    output reg [15:0] q1,
                    output reg [31:0] q2
                );

reg [7:0] mem [15:0]/* synthesis syn_ramstyle="no_rw_check" */;

    function integer log2;
        input integer value;
        reg [31:0] shifted;
        integer res;
    begin
        if (value < 2)
            log2 = value;
        else begin
            shifted = value-1;
            for (res=0; shifted>0; res=res+1)
                shifted = shifted>>1;
            log2 = res;
        end
    end
    endfunction

genvar i;

generate

for (i = 0; i < 2; i = i + 1)
begin: PortABlock
    localparam [log2(2)-1:0] lsaaddr = i;
    always @(posedge clk1)
    begin
        if(we1[i])
            mem[{waddr0, lsaaddr}] <= data1[i*8 +: 8];

        q1[i*8 +: 8] <= mem[{waddr0, lsaaddr}];
    end
end

for (i = 0; i < 4; i = i + 1)
begin: PortBBlock
    localparam [log2(4)-1:0] lsbaddr = i;
    always @(posedge clk2)
    begin
        if(we2[i])
            mem[{waddr1, lsbaddr}] <= data2[i*8 +: 8];

        q2[i*8 +: 8] <= mem[{waddr1, lsbaddr}];
    end
end

endgenerate

endmodule

 

Кто-нибудь сталкивался? Как победить? XST этот файл компилит вообще без варнингов.

 

Share this post


Link to post
Share on other sites

Совесем недавно разбирали эту тему, выяснилось, что для процессов тру-двухпортовой памяти в Квартусе нельзя использовать generate. Возможно, в Симплифае тоже.

Share this post


Link to post
Share on other sites

Попробовал сделать с 1 always на каждую тактовую.

Ничего не изменилось, та же ошибка.

Результат: выкинул все эти исходники, поставил сгенеренное ядро.

Share this post


Link to post
Share on other sites

Приветствую!

 

Попробовал сделать с 1 always на каждую тактовую.

Ничего не изменилось, та же ошибка.

Результат: выкинул все эти исходники, поставил сгенеренное ядро.

И правильно сделали - поскольку к сожалению:

"Synopsys FPGA Synthesis : Reference Manual : 12: RAM and ROM Inference ...The synthesis tool can infer byte-wide write enable RAM for single-port and simple dual-port RAM. The tool maps the byte-wide write enable RAM to block RAM for improved performance by merging the RAM and reducing its area.

True dual-port RAMs with byte-wide enables cannot be implemented in block RAM. ..."

 

А в Вашем случае это как раз byte-wide enables True dual-port да еще и с разной разрядностью.

 

Успехов! Rob.

 

 

 

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.

Sign in to follow this