Tips on building large design#
Large designs can quickly result in unmanageable turnaround times for tweaking and fixing if the design contains behavioral memory models, because these memories are by default translated to flip flops.
ORFS has a SYNTH_MEMORY_MAX_BITS that limits the size of inferred memories that are translated to flip flops to avoid doomed synthesis runs that will “running forever”, instead ORFS will error out early, normally within minutes.
Behavioral models of memories are used in simulation and FPGA tools oftentimes automatically combine hard memory macros with some extra logic to match the behavioral model. OpenROAD does not do such automatic memory inference and matching against real memories or fakemem.
Finding memories translated to flip flops#
SYNTH_MEMORY_MAX_BITS=1024, set a low threshold initially to get an error with list of memories in the system that will need to be dealt with in some waySYNTH_MOCK_LARGE_MEMORIES=1enabled after first seeing the error report with memories. This sets the number of rows in memories larger thanSYNTH_MEMORY_MAX_BITSto 1, so that synthesis will complete.SYNTH_HIERARCHICAL=1andSYNTH_MINIMUM_KEEP_SIZE=0, to see all modules in the hierarchical OpenROAD view and spot modules with an unexpectedly large number of instances
Next steps on memories#
If you’re taping out, write some wrapper Verilog for real memories.
fakemem can be a good option if available for your PDK. fakemem also needs manually written Verilog wrappers, just like real memories.
For architectural exploration,
SYNTH_MOCK_LARGE_MEMORIES=1could give you adequate timing accuracy and is convenient.