Here is some of the key Quartus Reports to Check
1. Fitter Resource Usage Report (.fit.rpt)
Location: quartus_fit_report.html or in the Quartus GUI under Processing → Compilation Report → Fitter → Resource Section → RAM Summary
What to Look For:
Compare how many M20K blocks are used in both the working and failing designs.
Look for any significant changes in RAM block utilization patterns.
Identify whether certain RAMs suddenly require multiple M20Ks instead of fewer.
2. RAM Classification Report (.ram_summary.rpt)
Location: Quartus GUI → Fitter → Resource Section → RAM Summary
What to Look For:
How Quartus is mapping logical RAMs to M20Ks.
Whether the Fitter is splitting memories into multiple blocks inefficiently.
3. RAM Packing Efficiency (.fit.rpt)
Location: In the Fitter → RAM Summary section of the report.
What to Look For:
If Quartus is failing to pack RAMs efficiently in the smaller device.
Look at the average block utilization to see if it has dropped.
4. Post-Mapping Resource Usage (.map.rpt)
Location: quartus_map_report.html or Quartus GUI under Processing → Compilation Report → Synthesis → RAM Usage
What to Look For:
How Quartus initially assigns memory to M20K blocks before placement constraints.
This can highlight unexpected fragmentation before the fitter even runs.
Possible Causes Based on Your Observation
Fragmentation Threshold Effect
Quartus could be fitting RAMs optimally up to a certain utilization threshold but then failing when the M20Ks get too full.
Instead of packing smaller memories efficiently, it breaks them up inefficiently across additional blocks.
Auto-Merging of Smaller RAMs
Quartus sometimes merges small RAMs into single M20Ks for efficiency.
If you crossed a memory limit where it can no longer merge, it may be splitting these into extra M20Ks instead.
FIFO Depth Adjustments
Since you have FIFOs and instantiated Block RAM, check if Quartus is suddenly adding padding or increasing depth beyond what’s needed.
Address Width Misalignment
If a change in memory size increased an address width (e.g., from 9 to 10 bits), it could be using more M20Ks to store extra address bits.
Quartus Settings to Try
If the reports show inefficient memory packing, try forcing Quartus to optimize RAM placement:
Disable Power Optimization (Which Can Impact Packing)
Quartus setting -> advance fitter setting -> power optimize during fitting -> Off
Sometimes Quartus optimizes power at the cost of more RAM blocks.
Force Specific RAM Implementation (If Quartus is Mapping Poorly)
set_instance_assignment -name AUTO_RAM_REPLACEMENT -to <ram_instance_name>
set_instance_assignment -name Infer_Ram_from_raw_logic -to <ram_instance_name>
Look for the setting that you can play in the advance fitter setting or advance synthesis setting.