What are the three blocks in the Three-block FSM coding style?
The three blocks are: 1) State register block (holds the current state), 2) Next state logic block (decides the next state based on inputs and current state), 3) Output logic block (generates outputs based on the current state).
Click to reveal answer
beginner
Why do we separate FSM code into three blocks in Verilog?
Separating FSM code into three blocks improves readability, makes debugging easier, and clearly separates state storage, state transitions, and output generation.
Click to reveal answer
beginner
In the Three-block FSM style, which block uses a clock edge to update the state?
The state register block uses the clock edge (usually posedge) to update the current state to the next state.
Click to reveal answer
beginner
What is the role of the next state logic block in the Three-block FSM style?
The next state logic block calculates the next state based on the current state and inputs, without using clock edges.
Click to reveal answer
intermediate
How does the output logic block differ between Moore and Mealy FSMs in the Three-block style?
In Moore FSMs, outputs depend only on the current state and are in the output logic block. In Mealy FSMs, outputs depend on current state and inputs, so output logic block uses both.
Click to reveal answer
Which block in the Three-block FSM style holds the current state?
AState register block
BNext state logic block
COutput logic block
DInput logic block
✗ Incorrect
The state register block stores the current state and updates it on clock edges.
What triggers the update of the current state in the state register block?
AReset only
BInput change
COutput change
DClock edge
✗ Incorrect
The current state updates on the clock edge, typically the rising edge.
In the Three-block FSM style, which block decides the next state?
AOutput logic block
BNext state logic block
CState register block
DInput register block
✗ Incorrect
The next state logic block computes the next state based on current state and inputs.
Which FSM type has outputs depending only on the current state?
AMealy FSM
BBoth Mealy and Moore
CMoore FSM
DNeither
✗ Incorrect
Moore FSM outputs depend only on the current state.
Why is the Three-block FSM style recommended?
AIt separates concerns for clarity and easier debugging
BIt mixes state and output logic for speed
CIt uses fewer lines of code
DIt avoids using clock signals
✗ Incorrect
Separating state register, next state logic, and output logic makes the FSM easier to understand and debug.
Explain the purpose of each of the three blocks in the Three-block FSM coding style.
Think about what happens on clock edges, how next state is decided, and how outputs are created.
You got /3 concepts.
Describe how the Three-block FSM style improves code readability and debugging in Verilog.
Consider how dividing tasks helps when reading or fixing code.
You got /4 concepts.
Practice
(1/5)
1. In the three-block FSM coding style in Verilog, which block is responsible for storing the current state?
easy
A. The next state combinational logic block
B. The output combinational logic block
C. The state register block using always_ff
D. The reset logic block
Solution
Step 1: Understand the role of each FSM block
The three-block FSM style divides the design into state storage, next state logic, and output logic.
Step 2: Identify the block that stores the current state
The state register block uses always_ff to store the current state in flip-flops.
Final Answer:
The state register block using always_ff -> Option C
Quick Check:
State storage = always_ff block [OK]
Hint: State storage always uses always_ff block [OK]
Common Mistakes:
Confusing next state logic with state storage
Thinking output logic stores state
Mixing combinational and sequential blocks
2. Which of the following is the correct syntax for the next state logic block in a three-block FSM style?
easy
A. always_comb begin next_state = ... end
B. always_ff @(posedge clk) begin next_state = ... end
C. always @(posedge clk or posedge reset) begin state <= next_state; end
D. always @(negedge clk) begin output = ... end
Solution
Step 1: Identify the block type for next state logic
Next state logic is combinational and should use always_comb for clean synthesis and readability.
Step 2: Match the syntax with the correct block
always_comb begin next_state = ... end uses always_comb with next_state assignment, which is correct for next state logic.
Final Answer:
always_comb begin next_state = ... end -> Option A
Quick Check:
Next state logic = always_comb block [OK]
Hint: Next state logic uses always_comb block [OK]
Common Mistakes:
Using always_ff for next state logic
Mixing sensitivity lists manually
Assigning state in next state block
3. Given the following three-block FSM code snippet, what will be the value of state after the rising edge of clk if reset is 0 and current state is 2?
typedef enum logic [1:0] {S0=0, S1=1, S2=2} state_t;
state_t state, next_state;
// State register
always_ff @(posedge clk or posedge reset) begin
if (reset) state <= S0;
else state <= next_state;
end
// Next state logic
always_comb begin
case(state)
S0: next_state = S1;
S1: next_state = S2;
S2: next_state = S0;
default: next_state = S0;
endcase
end
// Output logic (not shown)
medium
A. S0 (0)
B. S1 (1)
C. S2 (2)
D. Reset state
Solution
Step 1: Analyze current state and next state logic
Current state is S2 (2). According to next state logic, from S2 next_state = S0.
Step 2: Determine state after clock edge with reset=0
Since reset=0, state updates to next_state, which is S0 (0).
Final Answer:
S0 (0) -> Option A
Quick Check:
From S2, next_state = S0, so state = S0 after clk [OK]
Hint: Trace next_state from current state, then update on clk [OK]
Common Mistakes:
Confusing current and next state
Ignoring reset condition
Assuming state stays the same
4. Identify the error in this three-block FSM snippet:
always_ff @(posedge clk or posedge reset) begin
if (reset) state <= S0;
else state = next_state;
end
always_comb begin
case(state)
S0: next_state = S1;
S1: next_state = S0;
default: next_state = S0;
endcase
end
medium
A. Incorrect case statement syntax
B. Using blocking assignment (=) instead of non-blocking (<=) in always_ff block
C. Missing sensitivity list in always_comb block
D. No reset condition in always_ff block
Solution
Step 1: Check assignments in always_ff block
In sequential blocks (always_ff), non-blocking assignment (<=) must be used to avoid race conditions.
Step 2: Identify the incorrect assignment
The line state = next_state; uses blocking assignment (=), which is incorrect here.
Final Answer:
Using blocking assignment (=) instead of non-blocking (<=) in always_ff block -> Option B
Quick Check:
always_ff requires <= for state updates [OK]
Hint: Use <= in always_ff blocks for state updates [OK]
Common Mistakes:
Using = instead of <= in sequential blocks
Forgetting reset condition
Incorrect sensitivity list in always_comb
5. You want to design a three-block FSM that has an output signal flag which is high only when the FSM is in state S2. Which block should you put the flag assignment in, and what is the correct style?
hard
A. In the reset logic block, assign flag = 0; only
B. In the state register block using always_ff, assign flag <= (state == S2);
C. In the next state logic block using always_comb, assign flag = (next_state == S2);
D. In the output logic block using always_comb, assign flag = (state == S2);
Solution
Step 1: Identify where output signals are assigned in three-block FSM
Output signals based on current state are assigned in the output logic block, which is combinational and uses always_comb.
Step 2: Write the correct assignment for flag
Assign flag = (state == S2); inside the output logic block to reflect current state.
Final Answer:
In the output logic block using always_comb, assign flag = (state == S2); -> Option D
Quick Check:
Output logic uses always_comb with flag = (state == S2) [OK]
Hint: Assign outputs combinationally based on current state [OK]
Common Mistakes:
Assigning outputs in always_ff block
Using next_state instead of state for outputs
Ignoring combinational output logic block
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.