Using Sensitivity Lists in VHDL Processes for Reliable RTL Design
In production-level VHDL, processes are typically driven by a sensitivity list rather than While Basic VHDL Tutorials – Process Sensitivity When writing code for a simulator, I always rely on The syntax for a process with a sensitivity list is: Note that every signal read inside the process must appear in the list. The VHDL compiler does not flag a missing signal, but omitting one will change the behavior after synthesis. VHDL‑2008 introduced the keyword In the accompanying video tutorial, we walk through building a process that uses a sensitivity list. The final VHDL snippet produced in this lesson is: Running this testbench in ModelSim yields: The console output demonstrates that both the In practice, sensitivity lists are the de‑facto standard for synthesizable RTL. They provide clear intent, allow synthesis tools to generate correct hardware, and avoid the ambiguities that Proceed to the next tutorial here.wait statements. A sensitivity list enumerates every signal that should wake the process when it changes.wait on and wait until are convenient for simulation, they are rarely used in synthesizable RTL. In synthesis, a wait statement is often ignored, leading to unpredictable hardware. Conversely, a sensitivity list maps directly to a combinational or clock‑synchronous block that synthesis tools can implement reliably.wait statements to control timing. For any design that will be synthesized into silicon, I avoid wait entirely and use sensitivity lists.
process( signal1, signal2, ... ) is
begin
-- main logic here
end process;
all to automatically include every read signal, e.g. process(all). However, most commercial synthesizers still lack support for this feature.Exercise
entity T09_SensitivityListTb is
end entity;
architecture sim of T09_SensitivityListTb is
signal CountUp : integer := 0;
signal CountDown : integer := 10;
begin
process is
begin
CountUp <= CountUp + 1;
CountDown <= CountDown - 1;
wait for 10 ns;
end process;
-- Process triggered using Wait On
process is
begin
if CountUp = CountDown then
report "Process A: Jackpot!";
end if;
wait on CountUp, CountDown;
end process;
-- Equivalent process using a sensitivity list
process(CountUp, CountDown) is
begin
if CountUp = CountDown then
report "Process B: Jackpot!";
end if;
end process;
end architecture;
VSIM 2> run
# ** Note: Process A: Jackpot!
# Time: 40 ns Iteration: 1 Instance: /t09_sensitivitylisttb
# ** Note: Process B: Jackpot!
# Time: 40 ns Iteration: 1 Instance: /t09_sensitivitylisttb
Analysis
wait on process and the sensitivity‑list process fire under identical conditions. This equivalence holds because a sensitivity list implicitly behaves like a wait on placed at the end of the process.wait statements can introduce.
Key Takeaways
wait on.wait statements for simulation-only code; use sensitivity lists for synthesizable RTL.
VHDL
- Creating String Lists in VHDL: Best Practices & Example
- Implementing a PWM Controller in VHDL: Design, Simulation, and FPGA Demo
- Implementing a Dynamic Linked List in VHDL with Protected Types and Access Pointers
- Leveraging In‑Process Procedures for Cleaner VHDL FSM Design
- Designing a Finite‑State Machine in VHDL: A Practical Traffic Light Example
- Build a Reliable Timer in VHDL: Counting Clock Cycles to Hours
- Building a Clock‑Triggered Process in VHDL: A Practical Guide
- Mastering Concurrent Statements in VHDL: A Practical Guide
- Mastering std_logic_vector: Creating Signal Vectors in VHDL
- Your First VHDL Program: A Step‑by‑Step Hello World Tutorial