Bird
Raised Fist0
VHDLprogramming~5 mins

Process execution semantics in VHDL - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a process in VHDL?
A process in VHDL is a sequential block of code that executes statements one after another whenever it is triggered by a change in signals in its sensitivity list.
Click to reveal answer
beginner
When does a VHDL process execute?
A VHDL process executes whenever any signal in its sensitivity list changes value. It runs all statements inside sequentially from the start to the end.
Click to reveal answer
intermediate
What happens inside a VHDL process during execution?
Inside a process, statements execute sequentially. Signal assignments do not update signals immediately but schedule updates to happen after the process finishes.
Click to reveal answer
intermediate
Explain the difference between signal assignment and variable assignment inside a process.
Variable assignments update immediately and can be used in subsequent statements within the same process execution. Signal assignments schedule updates that take effect only after the process suspends.
Click to reveal answer
beginner
What is the role of the sensitivity list in process execution?
The sensitivity list tells the simulator which signals to watch. When any signal in this list changes, the process wakes up and executes its statements.
Click to reveal answer
When does a VHDL process execute?
AWhen any signal in its sensitivity list changes
BContinuously without stopping
COnly once at the start of simulation
DWhen a variable inside it changes
Inside a process, when does a signal assignment take effect?
AAfter the process finishes executing
BImmediately after the assignment statement
CBefore the process starts
DOnly if the signal is in the sensitivity list
What is the difference between variable and signal assignments inside a process?
ABoth update after process ends
BVariables update immediately; signals update after process ends
CBoth update immediately
DSignals update immediately; variables update after process ends
What happens if a process has an empty sensitivity list?
AIt never executes
BIt executes continuously in a loop
CIt executes only once at simulation start
DIt executes whenever any signal changes
Which statement best describes process execution in VHDL?
AProcesses run sequentially but statements inside run in parallel
BProcesses and statements inside run sequentially
CProcesses and statements inside run in parallel
DProcesses run in parallel but statements inside run sequentially
Describe how a VHDL process executes when a signal in its sensitivity list changes.
Think about what triggers the process and how assignments behave inside.
You got /4 concepts.
    Explain the difference between variable and signal assignments inside a VHDL process.
    Consider timing of updates and visibility inside the process.
    You got /4 concepts.

      Practice

      (1/5)
      1. What happens when a signal in a VHDL process's sensitivity list changes?
      easy
      A. The entire process executes from the beginning once.
      B. Only the changed signal is updated inside the process.
      C. The process pauses until the signal stabilizes.
      D. The process executes partially based on the changed signal.

      Solution

      1. Step 1: Understand sensitivity list trigger

        In VHDL, a process runs fully whenever any signal in its sensitivity list changes.
      2. Step 2: Execution behavior

        The process does not partially run or pause; it executes all statements sequentially from the start.
      3. Final Answer:

        The entire process executes from the beginning once. -> Option A
      4. Quick Check:

        Process runs fully on sensitivity change = A [OK]
      Hint: Process runs fully on any sensitivity list signal change [OK]
      Common Mistakes:
      • Thinking only changed signals update inside process
      • Believing process pauses or partially runs
      • Confusing process with concurrent statements
      2. Which of the following is the correct syntax to declare a process with signals clk and reset in its sensitivity list?
      easy
      A. process(clk reset) begin ... end process;
      B. process begin clk, reset; ... end process;
      C. process(clk; reset) begin ... end process;
      D. process(clk, reset) begin ... end process;

      Solution

      1. Step 1: Check sensitivity list syntax

        The sensitivity list must be inside parentheses, with signals separated by commas.
      2. Step 2: Validate options

        process(clk, reset) begin ... end process; uses correct syntax: process(clk, reset) begin ... end process; Options A, B, and D have syntax errors (missing commas, wrong separators).
      3. Final Answer:

        process(clk, reset) begin ... end process; -> Option D
      4. Quick Check:

        Correct sensitivity list syntax uses commas = C [OK]
      Hint: Use commas between signals in sensitivity list parentheses [OK]
      Common Mistakes:
      • Omitting commas between signals
      • Using semicolons instead of commas
      • Placing signals outside parentheses
      3. Given the following VHDL process:
      process(clk)
      begin
        if rising_edge(clk) then
          count <= count + 1;
        end if;
      end process;

      What happens to count when clk changes from '0' to '1'?
      medium
      A. Process causes a syntax error.
      B. count resets to 0.
      C. count increments by 1.
      D. count remains unchanged.

      Solution

      1. Step 1: Identify trigger condition

        The process triggers on any change of clk. The if rising_edge(clk) checks for a 0 to 1 transition.
      2. Step 2: Effect on count

        When clk rises, count increments by 1 as per the assignment.
      3. Final Answer:

        count increments by 1. -> Option C
      4. Quick Check:

        Rising edge triggers increment = D [OK]
      Hint: Rising edge on clk triggers count increment [OK]
      Common Mistakes:
      • Confusing rising_edge with falling_edge
      • Assuming count resets instead of increments
      • Thinking process syntax is incorrect
      4. Consider this VHDL process:
      process(clk)
      begin
        if clk = '1' then
          signal_a <= '0';
        else
          signal_a <= '1';
        end if;
      end process;

      What is the main problem with this process?
      medium
      A. It will cause a syntax error due to missing sensitivity signals.
      B. It may create a latch because it lacks a clock edge condition.
      C. It will never execute because clk is not in sensitivity list.
      D. It updates signal_a asynchronously, which is always correct.

      Solution

      1. Step 1: Analyze sensitivity list and conditions

        The process triggers on any clk change, but uses level check (clk = '1') instead of edge detection.
      2. Step 2: Understand latch creation

        Because assignments depend on clk level without edge detection, synthesis tools may infer a latch to hold signal_a's value.
      3. Final Answer:

        It may create a latch because it lacks a clock edge condition. -> Option B
      4. Quick Check:

        Level check without edge causes latch = B [OK]
      Hint: Use rising_edge or falling_edge to avoid latches [OK]
      Common Mistakes:
      • Assuming missing sensitivity signals cause syntax error
      • Thinking process won't execute without edge
      • Believing asynchronous updates are always safe
      5. You want to design a VHDL process that increments a counter only on the rising edge of clk and asynchronously resets it to zero when reset is '1'. Which process structure correctly implements this behavior?
      hard
      A.
      process(clk, reset)
      begin
        if reset = '1' then
          count <= 0;
        elsif rising_edge(clk) then
          count <= count + 1;
        end if;
      end process;
      B.
      process(clk)
      begin
        if reset = '1' then
          count <= 0;
        elsif rising_edge(clk) then
          count <= count + 1;
        end if;
      end process;
      C.
      process(reset)
      begin
        if reset = '1' then
          count <= 0;
        elsif rising_edge(clk) then
          count <= count + 1;
        end if;
      end process;
      D.
      process(clk, reset)
      begin
        if rising_edge(clk) then
          if reset = '1' then
            count <= 0;
          else
            count <= count + 1;
          end if;
        end if;
      end process;

      Solution

      1. Step 1: Identify asynchronous reset

        Asynchronous reset requires reset in sensitivity list and checked before clock edge.
      2. Step 2: Check process structure

        process(clk, reset)
        begin
          if reset = '1' then
            count <= 0;
          elsif rising_edge(clk) then
            count <= count + 1;
          end if;
        end process;
        checks reset = '1' first, then rising_edge(clk), correctly implementing async reset and sync count increment.
      3. Step 3: Validate other options

        process(clk)
        begin
          if reset = '1' then
            count <= 0;
          elsif rising_edge(clk) then
            count <= count + 1;
          end if;
        end process;
        misses reset in sensitivity list (wrong for async reset).
        process(reset)
        begin
          if reset = '1' then
            count <= 0;
          elsif rising_edge(clk) then
            count <= count + 1;
          end if;
        end process;
        triggers only on reset, ignoring clk.
        process(clk, reset)
        begin
          if rising_edge(clk) then
            if reset = '1' then
              count <= 0;
            else
              count <= count + 1;
            end if;
          end if;
        end process;
        treats reset synchronously inside clock edge.
      4. Final Answer:

        process(clk, reset) begin if reset = '1' then count <= 0; elsif rising_edge(clk) then count <= count + 1; end if; end process; -> Option A
      5. Quick Check:

        Async reset checked first with reset in sensitivity list = A [OK]
      Hint: Put async reset first and include it in sensitivity list [OK]
      Common Mistakes:
      • Omitting reset from sensitivity list for async reset
      • Checking reset inside clock edge (sync reset)
      • Using wrong sensitivity list signals
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard