There are three ways of getting UltraRAM primitives, as follows:
- Direct instantiation
- Provides you the most control but is the hardest to perform.
- XPM flow
- Allows you to specify the type of RAM you want along with the behavior, but gives no access to the RTL.
- Inference RAM
- Is in the middle of the two, relatively easy, and gives more control to the user on how the RAM is created.