Programmable Devices
CPLDs, FPGAs, SoC FPGAs, Configuration, and Transceivers
20641 Discussions

How to infer MLAB memory?

Altera_Forum
Honored Contributor II
1,575 Views

I have a simple memory code 

 

(* ramstyle = "MLAB" *) module memory_module 

# (parameter addr_width = 8, 

data_width = 32) 

(input clk, 

input [data_width-1:0] wr_data, 

output reg [data_width-1:0]rd_data, 

input [addr_width-1:0] wr_addr, 

input [addr_width-1:0] rd_addr, 

input we, 

input re); 

 

reg [data_width-1:0] mem [2**addr_width-1:0] /* synthesis syn_ramstyle = "MLAB"*/; 

 

always@(posedge clk) begin 

if (we) mem[wr_addr] <= wr_data; 

if (re) rd_data <= mem[rd_addr]; 

end 

 

endmodule 

 

And I am trying to use MLAB for this. Is there any other attribute that I am missing to infer MLABs? 

The attributes in the code do not work as intended.
0 Kudos
1 Reply
Altera_Forum
Honored Contributor II
450 Views

Try to add (* ramstyle = "MLAB" *) just before reg [data_width-1:0]... 

 

Also, try lower addr_width. Maximum depth for a MLAB is 32. You have addr_width=8 which corresponds to depth 256. The compiler might make it work with lots of multiplexers, but may also decide not to bother, ignore the attribute, and put the whole construct into a M9K/M10K/M20K instead.
0 Kudos
Reply