FPGA, SoC, And CPLD Boards And Kits
FPGA Evaluation and Development Kits
Intel Support hours are Monday-Fridays, 8am-5pm PST, except Holidays. Thanks to our community members who provide support during our down time or before we get to your questions. We appreciate you!

Need Forum Guidance? Click here
Search our FPGA Knowledge Articles here.
5241 Discussions

True Dual Port RAM with write and read to addr_a and read from addr_b in the same cycle




I'm currently working on RAM based Tightly Coupled Memory (TCM) with instruction read and data write and read (to the same address) in the same cycle. Below you can find my RTL:

//------------------------------------------------------------------------------- // Local signal declaration //------------------------------------------------------------------------------- (* ramstyle = "M9K, M10K" *) logic [SCR1_NBYTES-1:0][7:0] memory_array [0:(SCR1_SIZE/SCR1_NBYTES)-1]; logic [3:0] wenbb; //------------------------------------------------------------------------------- // Port B memory behavioral description //------------------------------------------------------------------------------- assign wenbb = {4{wenb}} & webb; always_ff @(posedge clk) begin if (wenb) begin if (wenbb[0]) begin memory_array[addrb][0] <= datab[0+:8]; end if (wenbb[1]) begin memory_array[addrb][1] <= datab[8+:8]; end if (wenbb[2]) begin memory_array[addrb][2] <= datab[16+:8]; end if (wenbb[3]) begin memory_array[addrb][3] <= datab[24+:8]; end end qb <= memory_array[addrb]; end //------------------------------------------------------------------------------- // Port A memory behavioral description //------------------------------------------------------------------------------- always_ff @(posedge clk) begin qa <= memory_array[addra]; end

In Embedded Memory User Guide it states, that TDP RAM can perform only 2 simultaneous operations per clock.

However, synthesis results for MAX10 show, that my TCM is implemented using only 1 memory array. Thus, I have 3 simultaneous operations in one cycle.

For Arria V the same code results in 2 memory arrays.

So, I have the following question:

Why doesn't my TCM code result in 2 memory arrays for MAX10?


Any help would be appreciated.

Thanks in advance.


Sokolov Artem


0 Kudos
0 Replies