Forum Discussion
Thank you for the detailed information. I noticed that the synthesis tool does not infer deeper shift registers into MLAB or M20K when the RTL process includes a reset. However, when the shift-register process does not include a reset, the tool does infer them into memory blocks. Is this behavior always expected?
Good observation — that behavior is expected.
Quartus will infer RAM‑based shift registers when the RTL is compatible with the device memory architecture. In particular, adding a reset to the shift chain typically prevents inference into MLAB/M20K and leaves the implementation in flip‑flops. The Quartus document below explicitly call out that coding styles like asynchronous resets can block RAM inference and force FF implementations:
https://docs.altera.com/r/docs/683641/25.3.1/quartus-prime-pro-edition-user-guide-design-optimization/guideline-remove-fitter-constraints?tocId=tmmzgVOTMhoEtv7TLENcLA
Additionally, on HyperFlex devices (Stratix 10 / Agilex), inference thresholds are higher to preserve Hyper‑Retiming. Checkout the KDB below:
https://community.altera.com/kb/knowledge-base/why-doesnt-my-shift-register-get-inferred-when-targeting-intel%C2%AE-stratix%C2%AE10-fpga-/340793
Regards,
Richard Tan