An LVT based implementation based on this paper by Laforest and Steffan using SpinalHDL
- Use Asynchronous or Synchronous RAMs
- Can infer MLAB blocks in new Altera Devices (using attributes) for async or sync rams
- Generic: Any number of read and write ports (Must be greater than zero)
- spinalHDL
- scaltest (for verification)
A basic example is given in src/main/scala/MultiportRamGenerator.scala
All the properties are defined in the RamCfg
class. The following are the
parameters that are used
nWords: Int
Number of words in RAMnWrite: Int
Number of write portsnBits: Int
Number of bits per wordnRead: Int
Number of read portsuseRdEn: Boolean
Use read enable signalsasyncReads: Boolean
Do reads asynchronouslymlabAttr: Boolean
Force Infer MLABs (Altera Quartus only)
Multiple random configurations (16 wide, 32 deep) are created covering both synchronous and asynchronous modes with random number of read and write ports (constrained within 1 to 5). They are first written with random 16 bit data using all write ports and then it is read back using all read ports. It is then checked if the readback data matched the data that was written