Why is this an issue?
Note that this rule is very opinionated and mostly used on legacy or safety-critical projects.
Some reasons for enforcing this rule:
-
If two clocked processes write to different fields of the same record signal → many simulators / synthesizers see
it as multiple drivers on the whole record → 'U' or synthesis error. Very easy to do by accident in large designs.
-
Records tempt people to group unrelated signals. It reduces readability, makes slicing / renaming / searching
harder, encourages “god records” that are passed everywhere.
-
Older Quartus, older Vivado, some Synplify versions had nasty bugs with records: Wrong multiple driver errors,
incorrect flattening, bit misconnection, AXI record problems, unexpected 'U' propagation.
-
Some old tools flatten records differently than individual signals. It can create slightly different timing / area
/ routing → non-deterministic results when refactoring.