When assign Gets Messy

Why larger combinational decisions read cleaner as a procedural always @(*) block instead of a single nested assign expression.

Updated 2026-07-07

A single assign statement is a great fit for a one-line expression. As the number of conditions grows, chaining conditional (?:) operators inside one assign gets harder to read and harder to debug — each added condition nests one level deeper inside the last.

A procedural combinational block (always @(*)) describes the exact same hardware, just written as separate, readable lines: one decision per line instead of one long nested expression. Both forms produce identical combinational logic; only the readability differs.

There is no hardware difference between the two styles. The choice is about which one a human — you, three months from now, or a reviewer — can debug fastest.