VHDL Anti-Patterns Overview
VHDL Anti-Patterns Overview
Using Variables Instead of Signals
Using Variables Instead of Signals
Multiple Signal Assignments
Multiple Signal Assignments
Incomplete Sensitivity Lists
Incomplete Sensitivity Lists
process(all)
for an automatic sensitivity list.Latches Due to Incomplete Assignments
Latches Due to Incomplete Assignments
Mixing Blocking and Non-Blocking Assignments
Mixing Blocking and Non-Blocking Assignments
<=
) and variable assignments (blocking, using :=
) within the same process. This can lead to confusion and potential simulation-synthesis mismatches. Use signals consistently for sequential logic.Asynchronous Reset Release
Asynchronous Reset Release
Combinational Loops
Combinational Loops
Using Wait Statements in Synthesizable Code
Using Wait Statements in Synthesizable Code
wait
statements in synthesizable code. wait
statements are generally not synthesizable (except for some specific forms like wait until rising_edge(clk)
in some tools). Use process sensitivity lists and additional registers to implement delays.Using Shared Variables Without Protected Types
Using Shared Variables Without Protected Types
Using Inferred Latches for Memory
Using Inferred Latches for Memory
Not Using Records for Related Signals
Not Using Records for Related Signals
Not Using Packages for Common Definitions
Not Using Packages for Common Definitions
Not Using Generics for Parameterization
Not Using Generics for Parameterization
Not Using Named Association in Port Maps
Not Using Named Association in Port Maps
Not Using Functions and Procedures
Not Using Functions and Procedures
Not Using Assertions
Not Using Assertions
Not Using Configuration Declarations
Not Using Configuration Declarations