Skip to content

FPGA friendly Multiport memories (N-read-M-write) based on LVT

Notifications You must be signed in to change notification settings

voldemoriarty/fpga-mprams

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FPGA Multiport RAMs

An LVT based implementation based on this paper by Laforest and Steffan using SpinalHDL

Features

  • 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)

Dependencies

  • spinalHDL
  • scaltest (for verification)

Generation

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 RAM
  • nWrite: Int Number of write ports
  • nBits: Int Number of bits per word
  • nRead: Int Number of read ports
  • useRdEn: Boolean Use read enable signals
  • asyncReads: Boolean Do reads asynchronously
  • mlabAttr: Boolean Force Infer MLABs (Altera Quartus only)

Verification Strategy

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

About

FPGA friendly Multiport memories (N-read-M-write) based on LVT

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages