Open whitequark opened 5 years ago
No distributed RAM.
Configurable as 2048x2, 1024x4, 512x8 or 256x16.
Block RAM rules:
RCLK
and WCLK
edge, port A returns the data that was there before the write (non-transparent).RE
. TN1256 claims that it is only available in 256x16 configuration but lists all other primitives still with RE
port.WE
with sub-word granularity (i.e. MASK
) only available in the 256x16 configuration.
RE
or WE
at all. Instead, RCLKE
and WCLKE
are used. This is due to a silicon bug. This should not affect anything as these ports are equivalent in functionality, and in fact it is not clear why RE
and WE
even exist in the first place.
RE
or WE
at all, similarly to Yosys.Configurable as 32768x1, 16384x2, 8192x4, 4096x9, 2048x18, 1024x36, 512x72 (32 Kb) or 16384x1, 8192x2, 4096x4, 2048x9, 1024x18, 512x36 (18 Kb) in SDP mode.
re
is called ena
/enb
and always also gates writes.Uses 3 SLICEs, two for memory and one to feed in the write port, to implement a 16x4 RAM. One synchronous write port with enable and one asynchronous read port. The SLICE flip flops can be used to make the read port synchronous. Written data propogates in about 800ps from write clock edge to async read port (if addresses are the same).
Configurable as 16384x1, 8192x2, 4096x4, 2048x9 or 1024x18 true dual port (DP16KD) or 512x36 pseudo dual port (this mode not implemented in Yosys/nextpnr yet, it uses a different PDPW16KD primitive).
Rules:
TBC
@nakengelhardt Can you explain why does UG473 specify the BRAM dimensions for SDP mode specifically? Is it different for TDP mode?
Do you mean this?
Each 18 Kb block and 36 Kb block can also be configured in a simple dual-port RAM mode. In this mode, the block RAM port width doubles to 36 bits for the 18 Kb block RAM and 72 bits for the 36 Kb block RAM.
The aspect ratios supported are different for SDP and TDP mode, yes. Tables 1-11 to 1-14 on pages 29-30 have the valid combinations.
There are a lot of possible combinations of memory ports and many of them are not legal. This depends on the vendor. In this issue we collect such behaviors to eventually implement a sanitizer, either as a part of nMigen or as a Yosys pass.