Inferring Simple dual-port RAM with write enable & read enable
I compiled the project with Single-clock simple dual-port RAM with write & read enable like attached quartus project.
But the compiler output the warning like below.
Warning (276027): Inferred dual-clock RAM node "FIR_x2:u_FIR_x2_L_960|DATA_BUFFER:u_DATA_BUFFER|simple_dual_port_ram:u_simple_dual_port_ram|ram_rtl_0" from synchronous design logic. The read-during-write behavior of a dual-clock RAM is undefined and may not match the behavior of the original design.
I found that the warning is diappeared when I changed the code without read enable (re).
Quartus Prime infers the RAM with write & read enable as dual-clock?
If there are solutions to infer this RAM without warning, please teach me how to.
Thanks,
AUDIY
Hi,
read-during-write behaviour is only critical for same address applied to read andwrite port simultaneously.
MAX10 M9K as well as e.g. Arria 10 M20K support "old-data" or "don't care" mode for single clock DP RAM. "new data" isn't supported and needs to be emulated by additional registers and read data mux if required in your application.
I don't recognize at first sight if read-during-write behaviour is relevant for you application. It can be best checked in a simulation.
My previous post needs to be corrected. It's not a problem of missing rden port, M9K actually has a rden port and the device handbook suggests to use if for power saving.
Problem is the doubled connection of rden in your code
always @ (posedge wclk) beginif (we) beginram[waddr] <= wdata;endif (re) beginr_rdata_1P <= ram[raddr];r_rdata_2P <= r_rdata_1P;endendgenerateif (OUTPUT_REG == "TRUE")assign rdata = r_rdata_2P;elseassign rdata = r_rdata_1P;endgenerate
Only the second assignment should be gated by (re). Doing so stops dual-clock RAM inference and removes the warnigs.