Vivado 不会合成 BRAM,而是制作 LUT

问题描述 投票:0回答:0

添加行

number_of_lines <= ram[0]
后,Vivado 将不会合成 BRAM 组件。相反,我得到了一个 LUT 方案。

module bram3 (clka,clkb,ena,enb,wea,web,addra,dia,dib,doa,dob,rst);
       
       input clka,clkb,ena,enb,wea,web,rst;
       input [11:0] addra;
       input [63:0] dia,dib;
       output [63:0] dob, doa;
       reg [32:0] ram [254:0];
       reg [32:0] dob, doa;
       
       reg [11:0] new_addr=0;
       reg [11:0] number_of_lines=0;
       
       always @(posedge clka)
       begin
           if (ena)
           begin
               if (wea) ram[addra] <= dia;
               doa <= ram[addra];
           end
       end
       
       
       always @(posedge clkb or negedge rst)
       begin
           if (!rst)
           begin
                new_addr<=0;
           end
           else  if (enb)
           begin
               if (new_addr==0)
                   number_of_lines <= ram[0];
             
               new_addr<=new_addr+1;
               dob <= ram[new_addr];
               if (new_addr==number_of_lines)
                   new_addr<=0;
           end   
       end
   endmodule

我知道我不能进行超过 2 次读取(在我的代码中我进行了 3 次读取),但我需要逻辑才能在代码中实现。

如何重写逻辑来制作类似可合成的 BRAM?

verilog xilinx vivado synthesis zynq
© www.soinside.com 2019 - 2024. All rights reserved.