What Synthesis-Friendly Coding Involves
Good practice includes fully specifying every branch of if/case statements to avoid unintended latches, being consistent about blocking versus non-blocking assignments, avoiding combinational loops, and ensuring every signal has exactly one driver. Clock and reset logic should follow consistent, well-understood patterns that synthesis tools and static checkers recognize and handle predictably.
Why It Matters
Risky coding patterns often work fine in simulation but produce different (and incorrect) behavior once synthesized into gates – a mismatch that can be extremely difficult to debug after the fact. Following disciplined coding guidelines from the start avoids these mismatches entirely and produces RTL that's easier for tools to optimize for timing and area.