ece5440_topic4_VerilogSequential
Download
Report
Transcript ece5440_topic4_VerilogSequential
Verilog for
Digital Design
Chapter 3:
Sequential Logic Design
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
1
3.1
Introduction
• Sequential circuit
– Output depends not just on present inputs (as in
combinational circuit), but on past sequence of inputs
1
a
b
1
0
Combinational
F
digital circuit
• Stores bits, also known as having “state”
– Simple example: a circuit that counts up in binary
• In this chapter, we will:
– Design a new building block, a flip-flop, that stores
one bit
si
– Combine that block to build multi-bit storage –ansis
a
register
– Describe the sequential behavior using a finite state
e
z
machine
– Convert a finite state machine to a controller – a
sequential circuit having a register and combinational
logic
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Note: Slides with animation are denoted with a small red "a" near the animated items
1
a
b
0
Sequential
?
digital circuit
Must know
sequence of
past inputs to
know output
2
F
3.2
Example Needing Bit Storage
Call
button
• Flight attendant call button
Cancel
button
– Press call: light turns on
• Stays on after button released
– Press cancel: light turns off
– Logic gate circuit to implement this?
Q
Bit
Storage
1. Call button pressed – light turns on
Call
button
Cancel
button
Call
Blue light
Blue light
Bit
Storage
a
2. Call button released – light stays on
Cancel
a
Doesn’t work. Q=1 when Call=1, but
doesn’t stay 1 when Call returns to 0
Need some form of “feedback” in the circuit
Call
button
Cancel
button
Blue light
Bit
Storage
3. Cancel button pressed – light turns off
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Clocks
• Clock period: time interval between pulses
– Above signal: period = 20 ns
• Clock cycle: one such time interval
– Above signal shows 3.5 clock cycles
• Clock frequency: 1/period
– Above signal: frequency = 1 / 20 ns = 50 MHz
• 1 Hz = 1/s
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Freq
100 GHz
10 GHz
1 GHz
100 MHz
10 MHz
Period
0.01 ns
0.1 ns
1 ns
10 ns
100 ns
4
D Flip-Flop
• Flip-flop: Bit storage that stores on clock edge, not level
• One design -- master-servant
– Two latches, output of first goes to input of second, master
latch has inverted clock signal
– So master loaded when C=0, then servant when C=1
– When C changes from 0 to 1, master disabled, servant
loaded with value that was at D just before C changed -- i.e.,
value at D during rising edge of C
rising edges
Clk
Note:
Hundreds of
different flipflop designs
exist
D flip-flop
D latch
D
Dm
Qm
Cm
master
D latch
Ds
’
Qs
Cs
Qs
Q’
Q
servant
Clk
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
5
D Flip-Flop
D
The triangle
means clock input,
edge triggered
Q’
D
Q
Q’
Q
Internal design: Just
invert servant clock
rather than master
Symbol for rising-edge
Symbol for falling-edge
triggered D flip-flop
triggered D flip-flop
rising edges
Clk
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
falling edges
Clk
6
D Flip-Flop
• Solves problem of not knowing through how many latches a signal
travels when C=1
– In figure below, signal travels through exactly one flip-flop, for Clk_A or
Clk_B
– Why? Because on rising edge of Clk, all four flip-flops are loaded
simultaneously -- then all four no longer pay attention to their input, until the
next rising edge. Doesn’t matter how long Clk is 1.
Y
D1
Q1
D2
Q2
D3
Q3
D4
Q4
fli
T
w
ol
at
Two latches inside
each flip-flop
Clk
Clk_A
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Clk_B
7
Flight-Attendant Call Button Using D Flip-Flop
• D flip-flop will store bit
• Inputs are Call, Cancel, and present value
of D flip-flop, Q
• Truth table shown below
Call
button
Cancel
attendant
light
system
Circuit derived from truth table,
using Chapter 2 combinational
logic design process
Call
but ton
Cancel
but ton
Call -- make D=1
Blue
call-button
button
Preserve value: if
Q=0, make D=0; if
Q=1, make D=1
Cancel -- make
D=0
Flight
Call
D
Q’
light
Cancel
Q
Blue
Clk
Q
Let’s give priority
to Call -- make
D=1
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
8
Basic Register
• Typically, we store multi-bit items
– e.g., storing a 4-bit binary number
• Register: multiple flip-flops sharing clock signal
– From this point, we’ll use registers for bit storage
• No need to think of latches or flip-flops
• But now you know what’s inside a register
I3
I2
I1
I0
4-bit register
D
D
Q
D
Q
I3 I2 I1 I0
reg(4)
D
Q
Q
clk
Q3 Q2 Q1 Q0
Q3
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Q2
Q1
Q0
9
Example Using Registers: Temperature Display
• Temperature history display
– Sensor outputs temperature as 5-bit binary number
– Timer pulses C every hour
– Record temperature on each pulse, display last three recorded values
x4
x3
x2
x1
x0
er
tu
ar
sensor
empe
t
timer
Present
1 hour ago
2 hours ago
Display
Display
Display
a4 a3 a2 a1 a0
b4 b3 b2 b1 b0
c4 c3 c2 c1 c0
TemperatureHistoryStorage
C
(In practice, we would actually avoid connecting the timer output
C to a clock input, instead only connecting an oscillator output to a clock input.)
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
10
Example Using Registers: Temperature Display
• Use three 5-bit registers
a4 a3 a2 a1 a0
x4
x3
x2
x1
x0
C
I4
I3
I2
I1
I0
Q4
Q3
Q2
Q1
Q0
b4 b3 b2 b1 b0
I4
I3
I2
I1
I0
Ra
Q4
Q3
Q2
Q1
Q0
c4 c3 c2 c1 c0
I4
I3
I2
I1
I0
Q4
Q3
Q2
Q1
Q0
Rb
Rc
TemperatureHistoryStorage
x4...x0
15 18 20 21 21 22 24 24 24 25 25 26 26 26 27 27 27 27
C
Ra
0
18
21
24
25
26
27
Rb
0
0
18
21
24
25
26
0
0
18
21
24
25
Rc
0
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
11
D Latch vs. D Flip-Flop
• Latch is level-sensitive: Stores D when C=1
• Flip-flop is edge triggered: Stores D when C changes from 0 to 1
– Saying “level-sensitive latch,” or “edge-triggered flip-flop,” is redundant
– Two types of flip-flops -- rising or falling edge triggered.
• Comparing behavior of latch and flip-flop:
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
12
Register Behavior
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
13
Register Behavior
• Sequential circuits have storage
• Register: most common storage component
I3 I2 I1 I0
reg(4)
– N-bit register stores N bits
– Structure may consist of connected flip-flops
I3
I2
I1
Rst
Q3 Q2 Q1 Q0
I0
4-bit register
D
D
D
Q
Clk
D
Q
R
Q
R
Q
R
R
Rst
Q3
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Q2
Q1
Q0
14
Register Behavior
Vectors
•
Typically just describe register
behaviorally
– Declare output Q as reg variable
to achieve storage
•
I3 I2 I1 I0
reg(4)
Rst
Q3 Q2 Q1 Q0
Uses vector types
– Collection of bits
• More convenient than declaring
separate bits like I3, I2, I1, I0
– Vector's bits are numbered
• Options: [0:3], [1:4], etc.
• [3:0]
– Most-significant bit is on left
– Assign with binary constant (more
on next slide)
module Reg4(I3,I2,I1,I0,Q3,...);
input I3, I2, I1, I0;
I3 I2 I1 I0
module Reg4(I, Q, ...);
input [3:0] I;
I:
I[3]I[2]I[1]I[0]
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
`timescale 1 ns/1 ns
module Reg4(I, Q, Clk, Rst);
input [3:0] I;
output [3:0] Q;
reg [3:0] Q;
input Clk, Rst;
always @(posedge Clk) begin
if (Rst == 1 )
Q <= 4'b0000;
else
Q <= I;
end
endmodule
vldd_ch3_Reg4.v
15
Register Behavior
Constants
•
Binary constant
–
4'b0000
•
•
•
•
Rst
Q3 Q2 Q1 Q0
Other constant bases possible
–
–
d: decimal base, o: octal base, h: hexadecimal
base
12'hFA2
•
•
•
–
–
'h: hexadecimal base
12: 3 hex digits require 12 bits
FA2: hex value
Size is always in bits, and optional
•
'hFA2 is OK
For decimal constant, size and 'd optional
•
•
•
4: size, in number of bits
'b: binary base
0000: binary value
I3 I2 I1 I0
reg(4)
8'd255 or just 255
In previous uses like “A <= 1;” 1 and 0 are
actually decimal numbers. ‘b1 and ‘b0 would
explicitly represent bits
Underscores may be inserted into value for
readability
–
–
12'b1111_1010_0010
8_000_000
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
`timescale 1 ns/1 ns
module Reg4(I, Q, Clk, Rst);
input [3:0] I;
output [3:0] Q;
reg [3:0] Q;
input Clk, Rst;
always @(posedge Clk) begin
if (Rst == 1 )
Q <= 4'b0000;
else
Q <= I;
end
endmodule
vldd_ch3_Reg4.v
16
Register Behavior
• Procedure's event control
involves Clk input
– Not the I input. Thus,
synchronous
– "posedge Clk"
• Event is not just any change
on Clk, but specifically
change from 0 to 1 (positive
edge)
• negedge also possible
• Process has synchronous
reset
– Resets output Q only on rising
edge of Clk
• Process writes output Q
– Q declared as reg variable,
thus stores value too
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
I3 I2 I1 I0
reg(4)
Rst
Q3 Q2 Q1 Q0
`timescale 1 ns/1 ns
module Reg4(I, Q, Clk, Rst);
input [3:0] I;
output [3:0] Q;
reg [3:0] Q;
input Clk, Rst;
always @(posedge Clk) begin
if (Rst == 1 )
Q <= 4'b0000;
else
Q <= I;
end
endmodule
vldd_ch3_Reg4.v
17
Register Behavior
Testbench
• reg/wire declarations and
module instantiation similar to
previous testbenches
• Module uses two procedures
– One generates 20 ns clock
• 0 for 10 ns, 1 for 10 ns
• Note: always procedure
repeats
– Other provides values for
inputs Rst and I (i.e., vectors)
• initial procedure executes just
once, does not repeat
•
(more on next slide)
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
`timescale 1 ns/1 ns
module Testbench();
reg [3:0] I_s;
reg Clk_s, Rst_s;
wire [3:0] Q_s;
Reg4 CompToTest(I_s, Q_s, Clk_s, Rst_s);
// Clock Procedure
always begin
Clk_s <= 0;
#10;
Clk_s <= 1;
#10;
end
// Note: Procedure repeats
// Vector Procedure
initial begin
Rst_s <= 1;
I_s <= 4'b0000;
@(posedge Clk_s);
#5 Rst_s <= 0;
I_s <= 4'b0000;
@(posedge Clk_s);
#5 Rst_s <= 0;
I_s <= 4'b1010;
@(posedge Clk_s);
#5 Rst_s <= 0;
I_s <= 4'b1111;
end
endmodule
vldd_ch3_Reg4TB.v
18
Register Behavior
Testbench
•
Variables/nets can be shared
between procedures
– Only one procedure should write
to variable
• Variable can be read by many
procedures
• Clock procedure writes to Clk_s
• Vector procedures reads Clk_s
•
Event control "@(posedge Clk_s)"
– May be prepended to statement
to synchronize execution with
event occurrence
• Statement may be just ";" as in
example
• In previous examples, the
“statement” was a sequential
block (begin-end)
– Test vectors thus don't include the
clock's period hard coded
•
Care taken to change input values
away from clock edges
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
`timescale 1 ns/1 ns
module Testbench();
reg [3:0] I_s;
reg Clk_s, Rst_s;
wire [3:0] Q_s;
Reg4 CompToTest(I_s, Q_s, Clk_s, Rst_s);
// Clock Procedure
always begin
Clk_s <= 0;
#10;
Clk_s <= 1;
#10;
end
// Note: Procedure repeats
// Vector Procedure
initial begin
Rst_s <= 1;
I_s <= 4'b0000;
@(posedge Clk_s);
#5 Rst_s <= 0;
I_s <= 4'b0000;
@(posedge Clk_s);
#5 Rst_s <= 0;
I_s <= 4'b1010;
@(posedge Clk_s);
#5 Rst_s <= 0;
I_s <= 4'b1111;
end
endmodule
vldd_ch3_Reg4TB.v
19
Register Behavior
Testbench
• Simulation results
– Note that Q_s updated only
on rising clock edges
– Note Q_s thus unknown until
first clock edge
• Q_s is reset to “0000” on
first clock edge
...
// Vector Procedure
initial begin
Rst_s <= 1;
I_s <= 4'b0000;
@(posedge Clk_s);
#5 Rst_s <= 0;
I_s <= 4'b0000;
@(posedge Clk_s);
#5 Rst_s <= 0;
I_s <= 4'b1010;
@(posedge Clk_s);
#5 Rst_s <= 0;
I_s <= 4'b1111;
end
vldd_ch3_Reg4TB.v
Clk_s
Rst_s
I_s
0000
Q_s xxxx
1010
0000
1111
1010
...
always @(posedge Clk) begin
if (Rst == 1 )
Q <= 4'b0000;
Remember that Q_s is connected to
else
Q, and I_s to I, in the testbench
Q <= I;
end
1111
10 20 30 40 50 60 70 80
time (ns)
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
...
vldd_ch3_Reg4.v
Initial value of a bit is the
unknown value x
20
Common Pitfalls
// Vector Procedure
always begin
Rst_s <= 1;
I_s <= 4'b0000;
@(posedge Clk_s);
...
@(posedge Clk_s);
#5 Rst_s <= 0;
I_s <= 4'b1111;
end
• Using "always" instead of "initial"
procedure
– Causes repeated procedure execution
• Not including any delay control or event
control in an always procedure
– May cause infinite loop in the simulator
• Simulator executes those statements
over and over, never executing
statements of another procedure
• Simulation time can never advance
– Symptom – Simulator appears to just
hang, generating no waveforms
// Vector Procedure
always begin
Rst_s <= 1;
I_s <= 4'b0000;
end
Clk_s
Rst_s
I_s
Q_s
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
10 20 30 40 50 60 70 80
time (ns)
21
Common Pitfalls
• Not initializing all module inputs
– May cause undefined outputs
– Or simulator may initialize to default
value. Switching simulators may cause
design to fail.
– Tip: Immediately initialize all module
inputs when first writing procedure
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
// Vector Procedure
always begin
Rst_s <= 1;
I_s <= 4'b0000;
@(posedge Clk_s);
...
@(posedge Clk_s);
#5 Rst_s <= 0;
I_s <= 4'b1111;
end
22
Common Pitfalls
•
Forgetting to explicitly declare as a wire
an indentifier used in a port connection
– e.g., Q_s
– Verilog implicitly declares identifier as a
net of the default net type, typically a
one-bit wire
• Intended as shortcut to save typing for
large circuits
• May not give warning message during
compilation
• Works fine if a one-bit wire was desired
• But may be mismatch – in this example,
the wire should have been four bits, not
one bit
• Unexpected simulation results
`timescale 1 ns/1 ns
module Testbench();
reg [3:0] I_s;
reg Clk_s, Rst_s;
wire [3:0] Q_s;
Reg4 CompToTest(I_s, Q_s, Clk_s, Rst_s);
...
– Always explicitly declare wires
• Best to avoid use of Verilog's implicit
declaration shortcut
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
23
Finite-State Machines (FSMs)—Sequential
Behavior
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
24
3.3
Finite-State Machines (FSMs) and Controllers
• Want sequential circuit with particular
behavior over time
• Example: Laser timer
b Controller
x
laser
clk
– Push button: x=1 for 3 clock cycles
– How? Let’s try three flip-flops
• b=1 gets stored in first D flip-flop
• Then 2nd flip-flop on next cycle, then
3rd flip-flop on next
• OR the three flip-flop outputs, so x
should be 1 for three cycles
patient
b
D
Q
D
Q
D
Q
clk
x
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Need a Better Way to Design Sequential Circuits
•
Trial and error is not a good design method
–
Will we be able to “guess” a circuit that works for other desired behavior?
•
–
And, a circuit built by guessing may have undesired behavior
•
•
How about counting up from 1 to 9? Pulsing an output for 1 cycle every 10
cycles? Detecting the sequence 1 3 5 in binary on a 3-bit input?
Laser timer: What if press button again while x=1? x then stays one another 3
cycles. Is that what we want?
Combinational circuit design process had two important things
1. A formal way to describe desired circuit behavior
•
Boolean equation, or truth table
2. A well-defined process to convert that behavior to a circuit
•
We need those things for sequence circuit design
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Describing Behavior of Sequential Circuit: FSM
• Finite-State Machine (FSM)
– A way to describe desired
behavior of sequential circuit
• Akin to Boolean equations for
combinational behavior
– List states, and transitions among
states
• Example: Make x change toggle
(0 to 1, or 1 to 0) every clock
cycle
• Two states: “Off” (x=0), and “On”
(x=1)
• Transition from Off to On, or On to
Off, on rising clock edge
• Arrow with no starting state points
to initial state (when circuit first
starts)
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Outputs: x
x=0
clk^
Off
x=1
On
clk^
FSM Example: 0,1,1,1,repeat
• Want 0, 1, 1, 1, 0, 1, 1, 1, ...
– Each value for one clock cycle
• Can describe as FSM
Outputs: x
x=0
Off
clk^
x=1
clk^
On1
– Four states
– Transition on rising clock edge to
next state
x=1
On2
clk^
x=1
On3
clk^
clk
State Off On1On2On3 Off On1On2 On3 Off
Outputs:
x
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Extend FSM to Three-Cycles High Laser Timer
• Four states
• Wait in “Off” state while b is 0 (b’)
• When b is 1 (and rising clock
edge), transition to On1
– Sets x=1
– On next two clock edges,
transition to On2, then On3,
which also set x=1
• So x=1 for three cycles after
button pressed
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Inputs: b; Outputs: x
x=0
Off
clk^
^
b’*clk
b*clk^
x=1 clk^
x=1
On1
On2
clk^
x=1
On3
FSM Simplification: Rising Clock Edges Implicit
• Showing rising clock on every
transition: cluttered
Inputs: b; Outputs: x
x=0
Off
– Make implicit -- assume every edge
has rising clock, even if not shown
– What if we wanted a transition
without a rising edge
• We don’t consider such
asynchronous FSMs -- less common,
and advanced topic
• Only consider synchronous FSMs -rising edge on every transition
clk^
b’ *clk^
b*clk ^
x=1 clk^
x=1
On1
On2
clk^
x=1
On3
Inputs: b; Outputs: x
x=0
Off
b’
a
b
Note: Transition with no associated condition thus
transistions to next state on next clock cycle
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
x=1
x=1
x=1
On1
On2
On3
FSM Definition
• FSM consists of
– Set of states
Inputs: b; Outputs: x
x=0
• Ex: {Off, On1, On2, On3}
Off
– Set of inputs, set of outputs
• Ex: Inputs: {x}, Outputs: {b}
b’
b
– Initial state
x=1
x=1
x=1
• Ex: “Off”
On1
On2
On3
– Set of transitions
• Describes next states
• Ex: Has 5 transitions
– Set of actions
• Sets outputs while in states
• Ex: x=0, x=1, x=1, and x=1
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
We often draw FSM graphically,
known as state diagram
Can also use table (state table), or
textual languages
Standard Controller Architecture
How implement FSM as sequential circuit?
– Use standard architecture
• State register -- to store the present state
• Combinational logic -- to compute outputs,
and next state
• For laser timer FSM
Inputs: b; Outputs: x
x=0
Off
b’
b
– 2-bit state register, can represent four states
– Input b, output x
x=1
x=1
x=1
On1
On2
On3
I
O
Combinational
logic
S
a
clk
m-bit
state register
N
Verilog for Digital Design
Copyright © 2007
General
Frank Vahid and Roman Lysecky
version
m
State register
outputs
FSM
FSM
outputs
Combinational n1
logic
n0
s1
s0
clk
m
x
b
FSM
outputs
FSM
inputs
– Known as controller
FSM
inputs
•
Finite-State Machines (FSMs)—Sequential Behavior
• Finite-state machine (FSM) is a
common model of sequential
behavior
– Example: If B=1, hold X=1 for 3
clock cycles
Inputs: B; Outputs: X
X=0
Off
B
B
• Note: Transitions implicitly ANDed
with rising clock edge
X=1
X=1
X=1
On1
On2
On3
– HDL model will reflect those two
parts
X
B
Combinational
logic
FSM
outputs
• State register
• Combinational logic
FSM
inputs
– Implementation model has two parts:
State
Clk
State register
StateNext
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
33
Finite-State Machines (FSMs)—Sequential Behavior
Modules with Multiple Procedures and Shared Variables
`timescale 1 ns/1 ns
Inputs: B; Outputs: X
X=0
Off
module LaserTimer(B, X, Clk, Rst);
B
input B;
output reg X;
input Clk, Rst;
B
X=1
X=1
X=1
On1
On2
On3
parameter S_Off = 0, S_On1 = 1,
S_On2 = 2, S_On3 = 3;
X
B
Combinational
logic
FSM
outputs
FSM
inputs
reg [1:0] State, StateNext;
State
Clk
State register
StateNext
// CombLogic
end
always @(State, B) begin
case (State)
// StateReg
S_Off: begin
always @(posedge Clk) begin
X <= 0;
if (Rst == 1 )
if (B == 0)
State <= S_Off;
StateNext <= S_Off;
else
else
State <= StateNext;
StateNext <= S_On1;
end
end
endmodule
...
•
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
...
S_On1: begin
X <= 1;
StateNext <= S_On2;
end
S_On2: begin
X <= 1;
StateNext <= S_On3;
end
S_On3: begin
X <= 1;
StateNext <= S_Off;
end
endcase
Code will be
explained on
following slides
vldd_ch3_LaserTimerBeh.v
34
Finite-State Machines (FSMs)—Sequential Behavior
• Modules has two procedures
X
B
Combinational
logic
FSM
outputs
FSM
inputs
– One procedure for combinational
logic
– One procedure for state register
– But it's still a behavioral
description
`timescale 1 ns/1 ns
module LaserTimer(B, X, Clk, Rst);
input B;
output reg X;
input Clk, Rst;
parameter S_Off = 0, S_On1 = 1,
S_On2 = 2, S_On3 = 3;
reg [1:0] State, StateNext;
// CombLogic
always @(State, B) begin
...
end
State
Clk
State register
StateNext
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
// StateReg
always @(posedge Clk) begin
...
end
endmodule
vldd_ch3_LaserTimerBeh.v
35
Finite-State Machines (FSMs)—Sequential Behavior
Parameters
• parameter declaration
– Not a variable or net, but rather a
constant
– A constant is a value that must be
initialized, and that cannot be
changed within the module’s
definition
– Four parameters defined
• S_Off, S_On1, S_On2, S_On3
• Correspond to FSM’s states
– Should be initialized to unique
values
`timescale 1 ns/1 ns
module LaserTimer(B, X, Clk, Rst);
input B;
output reg X;
input Clk, Rst;
parameter S_Off = 0, S_On1 = 1,
S_On2 = 2, S_On3 = 3;
reg [1:0] State, StateNext;
// CombLogic
always @(State, B) begin
...
end
// StateReg
always @(posedge Clk) begin
...
end
endmodule
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
vldd_ch3_LaserTimerBeh.v
36
Finite-State Machines (FSMs)—Sequential Behavior
Module declares two reg variables
–
–
–
•
CombLogic procedure
–
–
Event control sensitive to State and input B
Will output StateNext and X
StateReg procedure
–
–
FSM
inputs
•
State, StateNext
Each is 2-bit vector (need two bits to
represent four unique state values 0 to 3)
Variables are shared between CombLogic
and StateReg procedures
Sensitive to Clk input
Will output State, which it stores
X
B
Combinational
logic
FSM
outputs
•
State
Clk
State register
`timescale 1 ns/1 ns
module LaserTimer(B, X, Clk, Rst);
input B;
output reg X;
input Clk, Rst;
parameter S_Off = 0, S_On1 = 1,
S_On2 = 2, S_On3 = 3;
reg [1:0] State, StateNext;
// CombLogic
always @(State, B) begin
...
end
// StateReg
always @(posedge Clk) begin
...
end
endmodule
StateNext
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
vldd_ch3_LaserTimerBeh.v
37
Finite-State Machines (FSMs)—Sequential Behavior
Procedures with Case Statements
• Procedure may use case statement
– Preferred over if-else-if when just one
expression determines which statement
to execute
– case (expression)
• Execute statement whose case item
expression value matches case
expression
– case item expression : statement
– statement is commonly a begin-end
block, as in example
– First case item expression that matches
executes; remaining case items ignored
– If no item matches, nothing executes
– Last item may be "default : statement"
• Statement executes if none of the
previous items matched
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
// CombLogic
always @(State, B) begin
case (State)
S_Off: begin
X <= 0;
if (B == 0)
StateNext <= S_Off;
else
StateNext <= S_On1;
end
S_On1: begin
X <= 1;
StateNext <= S_On2;
end
S_On2: begin
X <= 1;
StateNext <= S_On3;
end
S_On3: begin
X <= 1;
StateNext <= S_Off;
end
endcase
end
vldd_ch3_LaserTimerBeh.v
38
Finite-State Machines (FSMs)—Sequential Behavior
Procedures with Case Statements
•
FSM’s CombLogic procedure
– Case statement describes states
– case (State)
• Executes corresponding statement
(often a begin-end block) based on
State's current value
– A state's statements consist of
• Actions of the state
• Setting of next state (transitions)
•
Ex: State is S_On1
– Executes statements for state On1,
jumps to endcase
Inputs: X; Outputs: B
X=0
Off
B'
B
X=1
X=1
On1
On2
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
reg [1:0] State, StateNext;
// CombLogic
always @(State, B) begin
case (State)
Suppose State is
S_Off: begin
X <= 0;
S_On1
if (B == 0)
StateNext <= S_Off;
else
StateNext <= S_On1;
end
S_On1: begin
X <= 1;
StateNext <= S_On2;
end
S_On2: begin
X <= 1;
StateNext <= S_On3;
end
S_On3: begin
X <= 1;
StateNext <= S_Off;
X=1
end
endcase
On3
end
vldd_ch3_LaserTimerBeh.v
39
Finite-State Machines (FSMs)—Sequential Behavior
• FSM StateReg Procedure
...
parameter S_Off = 0, S_On1 = 1,
S_On2 = 2, S_On3 = 3;
– Similar to 4-bit register
• Register for State is 2-bit vector reg
variable
– Procedure has synchronous reset
reg [1:0] State, StateNext;
...
• Resets State to FSM’s initial state,
S_Off
// StateReg
always @(posedge Clk) begin
if (Rst == 1 )
State <= S_Off;
else
State <= StateNext;
end
...
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
vldd_ch3_LaserTimerBeh.v
40
Finite-State Machines (FSMs)—Sequential Behavior
Modules with Multiple Procedures and Shared Variables
`timescale 1 ns/1 ns
Inputs: B; Outputs: X
X=0
Off
module LaserTimer(B, X, Clk, Rst);
B
input B;
output reg X;
input Clk, Rst;
B
X=1
X=1
X=1
On1
On2
On3
parameter S_Off = 0, S_On1 = 1,
S_On2 = 2, S_On3 = 3;
X
B
Combinational
logic
FSM
outputs
FSM
inputs
reg [1:0] State, StateNext;
State
Clk
State register
StateNext
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
...
S_On1: begin
X <= 1;
StateNext <= S_On2;
end
S_On2: begin
X <= 1;
StateNext <= S_On3;
end
S_On3: begin
X <= 1;
StateNext <= S_Off;
end
endcase
// CombLogic
end
always @(State, B) begin
case (State)
// StateReg
S_Off: begin
always @(posedge Clk) begin
X <= 0;
if (Rst == 1 )
if (B == 0)
State <= S_Off;
StateNext <= S_Off;
else
else
State <= StateNext;
StateNext <= S_On1;
end
end
endmodule
...
• Code should
now be clear
vldd_ch3_LaserTimerBeh.v
41
Finite-State Machines (FSMs)—Sequential Behavior
Self-Checking Testbenches
...
•
FSM testbench
– First part of file (variable/net declarations,
module instantiations) similar to before
– Vector Procedure
• Resets FSM
• Sets FSM's input values (“test vectors”)
• Waits for specific clock cycles
– We observe the resulting waveforms to
determine if FSM behaves correctly
Clk_s
Rst_s
B_s
X_s
// Clock Procedure
always begin
Clk_s <= 0;
#10;
Clk_s <= 1;
#10;
end
// Note: Procedure repeats
// Vector Procedure
initial begin
Rst_s <= 1;
B_s <= 0;
@(posedge Clk_s);
#5 Rst_s <= 0;
@(posedge Clk_s);
#5 B_s <= 1;
@(posedge Clk_s);
#5 B_s <= 0;
@(posedge Clk_s);
@(posedge Clk_s);
@(posedge Clk_s);
end
endmodule
10 20 30 40 50 60 70 80 90 100 110
time (ns)
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
vldd_ch3_LaserTimerTB.v
42
Finite-State Machines (FSMs)—Sequential Behavior
Self-Checking Testbenches
• Reading waveforms is error-prone
• Create self-checking testbench
– Use if statements to check for
expected values
• If a check fails, print error message
• Ex: if X_s fell to 0 one cycle too
early, simulation might output:
– 95: Third X=1 failed
Clk_s
Rst_s
B_s
X_s
10 20 30 40 50 60 70 80 90 100 110
// Vector Procedure
initial begin
Rst_s <= 1;
B_s <= 0;
@(posedge Clk_s);
#5 if (X_s != 0)
$display("%t: Reset failed", $time);
Rst_s <= 0;
@(posedge Clk_s);
#5 B_s <= 1;
@(posedge Clk_s);
#5 B_s <= 0;
if (X_s != 1)
$display("%t: First X=1 failed", $time);
@(posedge Clk_s);
#5 if (X_s != 1)
$display("%t: Second X=1 failed", $time);
@(posedge Clk_s);
#5 if (X_s != 1)
$display("%t: Third X=1 failed", $time);
@(posedge Clk_s);
#5 if (X_s != 0)
$display("%t: Final X=0 failed", $time);
end
time (ns)
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
vldd_ch3_LaserTimerTBDisplay.v
43
Finite-State Machines (FSMs)—Sequential Behavior
$display System Procedure
•
$display – built-in Verilog system
procedure for printing information to
display during simulation
–
A system procedure interacts with the
simulator and/or host computer system
• To write to a display, read a file, get the
current simulation time, etc.
• Starts with $ to distinguish from regular
procedures
•
String argument is printed literally...
– $display("Hello") will print "Hello"
– Automatically adds newline character
•
...except when special sequences appear
– %t: Display a time expression
– Time expression must be next argument
• $time – Built-in system procedure that
returns the current simulation time
– 95: Third X=1 failed
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
// Vector Procedure
initial begin
Rst_s <= 1;
B_s <= 0;
@(posedge Clk_s);
#5 if (X_s != 0)
$display("%t: Reset failed", $time);
Rst_s <= 0;
@(posedge Clk_s);
#5 B_s <= 1;
@(posedge Clk_s);
#5 B_s <= 0;
if (X_s != 1)
$display("%t: First X=1 failed", $time);
@(posedge Clk_s);
#5 if (X_s != 1)
$display("%t: Second X=1 failed", $time);
@(posedge Clk_s);
#5 if (X_s != 1)
$display("%t: Third X=1 failed", $time);
@(posedge Clk_s);
#5 if (X_s != 0)
$display("%t: Final X=0 failed", $time);
end
vldd_ch3_LaserTimerTBDisplay.v
44
Controller Example:
Button Press Synchronizer
bi
Button press
synchronizer
controller
bo
• Want simple sequential circuit that converts button press to single cycle
duration, regardless of length of time that button actually pressed
– We assumed such an ideal button press signal in earlier example, like the
button in the laser timer controller
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Controller Example:
bi’
A
bi
bo=0
B
bi
C bi’
bi’
bi
bo=1
bo=0
bi
bo
Combinational
logic
FSM
outputs
FSM inputs: bi; FSM outputs: bo
FSM
inputs
Button Press Synchronizer (cont)
Step 2: Create architecture
n1
n0
s1
clk
n1 = s1’s0bi + s1s0bi
n0 = s1’s0’bi
bo = s1’s0bi’ + s1’s0bi = s1s0
s0
State register
a
Combinational logic
Step 1: FSM
bo
bi
n1
FSM inputs: bi; FSM outputs: bo
bi’
00
bo=0
bi
01
bo=1
bi’
bi
n0
bi
10 bi’
s1
bo=0
clk
s0
State register
Step 3: Encode states
Step 4: State table
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Step 5: Create
combinational circuit
Step 5: Create combinational circuit
outpu
FSM
Controller Example: Sequence Generator
•
Want generate sequence 0001, 0011, 1100, 1000, (repeat)
–
–
Each value for one clock cycle
Common, e.g., to create pattern in 4 lights, or control magnets of a “stepper motor”
w
x
y
z
Inputs: none; Outputs: w,x,y,z
wxyz=0001
wxyz=1000
A
D
Combinational
logic
s1
B
C
wxyz=0011
wxyz=1100
Step 1: Create FSM
clk
Inputs: none; Outputs: w,x,y,z
n1
n0
wxyz=0001
wxyz=1000
A
D
s0
00
01
State register
Step 2: Create architecture
10
B
C
wxyz=0011
wxyz=1100
Step 3: Encode states
w
x
w = s1
x = s1s0’
y = s1’s0
z = s1’
n1 = s1 xor s0
n0 = s0’
clk
FSM outputs
y
z
a
s1
Verilog for DigitalStep
Design
4: Create state table
Copyright © 2007
Frank Vahid and Roman Lysecky
11
s0
State register
n0
n1
Step 5: Create combinational circuit
Controller Example: Sequence Generator
•
Want generate sequence 0001, 0011, 1100, 1000, (repeat)
–
–
Each value for one clock cycle
Common, e.g., to create pattern in 4 lights, or control magnets of a “stepper motor”
w
x
y
z
Inputs: none; Outputs: w,x,y,z
wxyz=0001
wxyz=1000
A
D
Combinational
logic
s1
B
C
wxyz=0011
wxyz=1100
Step 1: Create FSM
clk
Inputs: none; Outputs: w,x,y,z
n1
n0
wxyz=0001
wxyz=1000
A
D
s0
00
01
State register
Step 2: Create architecture
10
B
C
wxyz=0011
wxyz=1100
Step 3: Encode states
w
x
w = s1
x = s1s0’
y = s1’s0
z = s1’
n1 = s1 xor s0
n0 = s0’
clk
FSM outputs
y
z
a
s1
Verilog for DigitalStep
Design
4: Create state table
Copyright © 2007
Frank Vahid and Roman Lysecky
11
s0
State register
n0
n1
Step 5: Create combinational circuit
FSM Example: Secure Car Key (cont.)
Inputs: a; Outputs: r
• Nice feature of FSM
– Can evaluate output behavior for
different input sequence
– Timing diagrams show states and
output values for different input
waveforms
Wait
r=0
a
a’
K1
K2
K3
K4
r=1
r=1
r=0
r=1
Q: Determine states and r value for
given input waveform:
clk
clk
Inputs
a
Inputs
a
State
Wait Wait
K1
K2
Outputs
r
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
K3
K4 Wait Wait
State
Wait Wait
Output
K1
K2
K3
K4 Wait K1
a
r
Controller Example: Secure Car Key
•
Inputs: a; Outputs: r
Step 1
Wait
r=0 a
(from earlier example)
a’
K1
K2
K3
K4
r=1
r=1
r=0
r=1
a
a
r
Combinational
logic
Step 2
FSM
inputs
outputs
FSM
n2
n1
n0
s2 s1 s0
clk
State register
Inputs: a; Outputs: r
000
Step 3
r=0
a’
a
001
010
011
100
r=1
r=1
r=0
r=1
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
We’ll omit Step 5
Step 4
FSM Example: Code Detector
•
Unlock door (u=1) only when buttons
pressed in sequence:
Start
– start, then red, blue, green, red
•
a
Input from each button: s, r, g, b
– Also, output a indicates that some
colored button pressed
•
Red
Green
Blue
s
u
r
g
b
a
FSM
– Wait for start (s=1) in “Wait”
– Once started (“Start”)
•
•
•
•
If see red, go to “Red1”
Then, if see blue, go to “Blue”
Then, if see green, go to “Green”
Then, if see red, go to “Red2”
– In that state, open the door (u=1)
• Wrong button at any step, return to
“Wait”, without opening door
a
Start
u=0
s’ ar’ ab’ ag’
ar’
a’
ar
Red1
u=0
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Inputs: s,r,g,b,a;
Outputs: u
Wait
u=0 s
Door
lock
Code
detector
ab
a’
Blue
u=0
ag
a’
Green
u=0
ar
a’
Red2
u=1
Q: Can you trick this FSM to open the door,
without knowing the code?
a
A: Yes, hold all buttons simultaneously
Improve FSM for Code Detector
Wait
u=0 s
Start
u=0
s’
ar’ ab’ ag’
ar’
a
a’
ar
Red1
u=0
•
•
Inputs: s,r,g,b,a;
Outputs: u
ab
a’
Blue
u=0
ag
a’
Green
u=0
ar
a’
Red2
u=1
Note: small problem still
remains; we’ll discuss later
New transition conditions detect if wrong button pressed, returns to “Wait”
FSM provides formal, concrete means to accurately define desired behavior
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Common Pitfalls Regarding Transition Properties
a
• Only one condition should be true
– For all transitions leaving a state
– Else, which one?
b
ab=11 –
next state?
a
• One condition must be true
– For all transitions leaving a state
– Else, where go?
a
a
a’b
what if
ab=00?
a’b
a’b’
a
a’b
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Verifying Correct Transition Properties
• Can verify using Boolean algebra
Answer:
a * a’b
– Only one condition true: AND of each condition pair (for
= (a * a’) * b
transitions leaving a state) should equal 0 proves pair can
=0*b
never simultaneously be true
=0
a
– One condition true: OR of all conditions of transitions leaving a OK!
state) should equal 1 proves at least one condition must be
a + a’b
true
= a*(1+b) + a’b
– Example
= a + ab + a’b
a
a’b
= a + (a+a’)b
=a+b
Fails! Might not
be 1 (i.e., a=0,
b=0)
Q: For shown transitions, prove whether:
* Only one condition true (AND of each pair is always 0)
* One condition true (OR of all transitions is always 1)
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Evidence that Pitfall is Common
• Recall code detector FSM
– We “fixed” a problem with the
transition conditions
– Do the transitions obey the two
required transition properties?
Wait
u=0 s
s’
Start
a’
u=0
• Consider transitions of state Start,
ar
and the “only one true” property
ag
ab
Red1
Blue
Green
a’
a’
u=0
u=0
u=0
ar * a’
a’ * a(r’+b+g)
= (a*a’)r = 0*r
=0
=0
a
ar
a’
u=1
ar * a(r’+b+g)
Intuitively: press red and blue
= (a’*a)*(r’+b+g) = 0*(r’+b+g)
buttons at same time: conditions
= (a*a)*r*(r’+b+g) = a*r*(r’+b+g)
ar, and a(r’+b+g) will both be
true. Which one should be taken?
= arr’+arb+arg
= 0 + arb+arg
a
Q: How to solve?
= arb + arg
= ar(b+g)
A: ar should be arb’g’
Fails! Means that two of Start’s (likewise for ab, ag, ar)
transitions could be true
Note: As evidence the pitfall is common,
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Red2
we admit the mistake was not intentional.
A reviewer of the book caught it.
Simplifying Notations
• FSMs
– Assume unassigned output
implicitly assigned 0
a=0
b=1
c=0
a=0
b=0
c=1
a
clk
a
• Sequential circuits
– Assume unconnected clock inputs
connected to same external clock b=1
c=1
a
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
3.5
More on Flip-Flops and Controllers
• Other flip-flop types
– SR flip-flop: like SR latch, but edge triggered
– JK flip-flop: like SR (SJ, RK)
• But when JK=11, toggles
• 10, 01
– T flip-flop: JK with inputs tied together
• Toggles on every rising clock edge
– Previously utilized to minimize logic outside flip-flop
• Today, minimizing logic to such extent is not as important
• D flip-flops are thus by far the most common
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Non-Ideal Flip-Flop Behavior
•
Can’t change flip-flop input too close to clock edge
– Setup time: time that D must be stable before edge
• Else, stable value not present at internal latch
– Hold time: time that D must be held stable after edge
• Else, new value doesn’t have time to loop around and
stabilize in internal latch
Setup time violation
Leads to oscillation!
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Metastability
•
Violating setup/hold time can lead to bad
situation known as metastable state
– Metastable state: Any flip-flop state other than
stable 1 or 0
• Eventually settles to one or other, but we don’t
know which
– For internal circuits, we can make sure
observe setup time
– But what if input comes from external
(asynchronous) source, e.g., button press?
•
Partial solution
– Insert synchronizer flip-flop for asynchronous
input
• Special flip-flop with very small setup/hold time
– Doesn’t completely prevent metastability
a
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Metastability
•
•
One flip-flop doesn’t completely solve problem
How about adding more synchronizer flip-flops?
– Helps, but just decreases probability of metastability
•
So how solve completely?
– Can’t! May be unsettling to new designers. But we just can’t guarantee a design that
won’t ever be metastable. We can just minimize the mean time between failure
(MTBF) -- a number often given along with a circuit
Probability of flip-flop being metastable is…
very
very
very
low
low
low
ai
synchronizers
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
incredibly
low
Flip-Flop Set and Reset Inputs
• Some flip-flops have additional
inputs
– Synchronous reset: clears Q to 0 on
next clock edge
– Synchronous set: sets Q to 1 on
next clock edge
– Asynchronous reset: clear Q to 0
immediately (not dependent on clock
edge)
• Example timing diagram shown
– Asynchronous set: set Q to 1
immediately
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
D
Q’
R
Q
D
Q’
AR
Q
D
AR
AS
Q’
Q
Initial State of a Controller
• All our FSMs had initial state
Inputs: x; Outputs: b
x=0
– But our sequential circuit designs did
not
– Can accomplish using flip-flops with
reset/set inputs
Off
b
• Shown circuit initializes flip-flops to 01
– Designer must ensure reset input is 1
during power up of circuit
b’
x=1
x=1
x=1
On1
On2
On3
b
x
Combinational
logic
• By electronic circuit design
n1
n0
clk
s1
State register
D
reset
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Q’
R
Q
s0
D
Q’
S
Q
Top-Down Design – FSMs to Controller Structure
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
63
Top-Down Design – FSMs to Controller Structure
• Capture behavior, and simulate
• Capture structure (circuit),
simulate again
• Gets behavior right first,
unfettered by complexity of
creating structure
•
•
Capture behavior: FSM
Capture structure: Controller
– Create architecture (state
register and combinational logic)
– Encode states
– Create stable table (describes
combinational logic)
– Implement combinational logic
Capture
behavior
Simulate
Capture
structure
Simulate
Combinational N1
logic
N0
S1 S0
Should be
the same
K_s
P_s
S_s
W_s
X
B
Clk
K_s
P_s
S_s
W_s
outputs
FSM
FSM
outputs
Recall from Chapter 2
– Top-down design
FSM
inputs
•
State register
Inputs: B; Outputs: X
X=0
00
B'
Off
LaserTimer example
B
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
X=1
01 On1
X=1
10 On2
X=1
11 On3
64
Top-Down Design – FSMs to Controller Structure
•
Recall from Chapter 2
– Top-down design
• Capture behavior, and simulate
• Capture structure (circuit),
simulate again
• Gets behavior right first,
unfettered by complexity of
creating structure
•
•
Inputs: B; Outputs: X
X=0
00
B'
Off
M
S
F
Combinational n1
logic
n0
s1
s0
clk
State register
B
X=1
01 On1
X=1
10 On2
X=1
11 On3
Capture behavior: FSM
Capture structure: Controller
– Create architecture (state
register and combinational logic)
– Encode states
– Create stable table (describes
combinational logic)
– Implement combinational logic
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
FSM
outputs
FSM
inputs
s
tp
u
o
x
b
65
outpu
FSM
Top-Down Design – FSMs to Controller Structure
•
Recall from Chapter 2
– Top-down design
• Capture behavior, and simulate
• Capture structure (circuit),
simulate again
• Gets behavior right first,
unfettered by complexity of
creating structure
•
•
Inputs: B; Outputs: X
X=0
00
B'
Off
M
S
F
Combinational n1
logic
n0
s1
s0
clk
State register
B
X=1
01 On1
X=1
10 On2
X=1
11 On3
Capture behavior: FSM
Capture structure: Controller
– Create architecture (state
register and combinational logic)
– Encode states
– Create stable table (describes
combinational logic)
– Implement combinational logic
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
X = S1 + S0
N1 = S1’S0 + S1S0’
N0 = S1’S0’B + S1S0’
FSM
outputs
FSM
inputs
s
tp
u
o
x
b
66
outpu
FSM
Controller
Structure
•
•
`timescale 1 ns/1 ns
module LaserTimer(B, X, Clk, Rst);
Structural description
Test with LaserTimerTB
– Same results
Clk
State register
parameter S_Off = 2'b00;
// CombLogic
always @(State, B)
X <= State[1] |
StateNext[1] <=
|
outputs StateNext[0] <=
X
FSM
|
end
FSM
outputs
FSM
inputs
Combinational N1
logic
N0
S1 S0
outpu
FSM
reg [1:0] State, StateNext;
// State encodings:
//
S_Off 00, S_On1 01, S_On2 10, S_On3 11
X = S1 + S0
N1 = S1’S0 + S1S0’
N0 = S1’S0’B + S1S0’
B
input B;
output reg X;
input Clk, Rst;
begin
State[0];
(~State[1] & State[0])
(State[1] & ~State[0]);
(~State[1] & ~State[0] & B)
(State[1] & ~State[0]);
// StateReg
always @(posedge Clk) begin
if (Rst == 1 )
State <= S_Off;
else
State <= StateNext;
end
endmodule
Clk_s
Rst_s
B_s
X_s
10 20 30 40 50 60 70 80 90 100 110
time (ns)
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
vldd_ch3_LaserTimerStruct.v
67
Controller
Structure
•
Initial state is S_Off
– Encoded as "00"
– State register set to
S_Off during FSM
reset
•
Note that CombLogic
uses equations, not
case statement
– Actually CombLogic
is still behavioral
– Do top-down design
again, this time on
CombLogic, to get
structure
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
`timescale 1 ns/1 ns
module LaserTimer(B, X, Clk, Rst);
input B;
output reg X;
input Clk, Rst;
outpu
FSM
parameter S_Off = 2'b00;
reg [1:0] State, StateNext;
// State encodings:
//
S_Off 00, S_On1 01, S_On2 10, S_On3 11
// CombLogic
always @(State, B)
X <= State[1] |
StateNext[1] <=
|
StateNext[0] <=
|
end
begin
State[0];
(~State[1] & State[0])
(State[1] & ~State[0]);
(~State[1] & ~State[0] & B)
(State[1] & ~State[0]);
// StateReg
always @(posedge Clk) begin
if (Rst == 1 )
State <= S_Off;
else
State <= StateNext;
end
endmodule
vldd_ch3_LaserTimerStruct.v
68
Common Pitfall: Not Assigning Every Output in Every State
• FSM outputs should be
combinational function of
current state (for Moore FSM)
• Not assigning output in given
state means previous value is
remembered
– Output has memory
– Behavior is not an FSM
• Solution 1
– Be sure to assign every output
in every state
• Solution 2
– Assign default values before
case statement
– Later assignment in state
overwrites default
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
// CombLogic
always @(State, B) begin
X <= 0;
case (State)
S_Off: begin
X <= 0;
if (B == 0)
StateNext <= S_Off;
Could delete this
else
without changing
StateNext <= S_On1;
behavior (but
probably clearer to end
S_On1: begin
keep it)
X <= 1;
StateNext <= S_On2;
end
S_On2: begin
X <= 1;
StateNext <= S_On3;
end
S_On3: begin
X <= 1;
StateNext <= S_Off;
end
endcase
end
69
Common Pitfall: Not Assigning Every Output in Every State
• Solution 2
– Assign default values before
case statement
– Later assignment in state
overwrites default
– Helps clarify which actions are
important in which state
– Corresponds directly to the
common simplifying FSM
diagram notation of implicitly
setting unassigned outputs to 0
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
case State
S: begin
A <= 0;
B <= 1;
C <= 0;
end
T: begin
A <= 0;
B <= 0;
C <= 1;
end
endcase
A <= 0;
B <= 0;
C <= 0;
case State
S: begin
B <= 1;
end
T: begin
C <= 1;
end
endcase
S
T
A=0
B=1
C=0
A=0
B=0
C=1
S
T
B=1
C=1
70
More Simulation Concepts
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
71
The Simulation Cycle
• Instructive to consider how an HDL
simulator works
– HDL simulation is complex; we'll introduce
simplified form
• Consider example SimEx1
– Three reg variables – Q, Clk, S
– Three procedures – P1, P2, P3
• Simulator's job: Determine values for
nets and variables over time
– Repeatedly executes and suspends
procedures
• Note: Actually considers more objects,
known collectively as processes, but we'll
keep matters simple here to get just the
basic idea of simulation
– Maintains a simulation time Time
`timescale 1 ns/1 ns
module SimEx1(Q);
output reg Q;
reg Clk, S;
// P1
always begin
Clk <= 0;
#10;
Clk <= 1;
#10;
end
// P2
always @(S) begin
Q <= ~S;
end
// P3
initial begin
@ (posedge Clk);
S <= 1;
@ (posedge Clk);
S <= 0;
end
endmodule
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
vldd_ch3_SimEx1.v
72
The Simulation Cycle
•
`timescale 1 ns/1 ns
module SimEx1(Q);
Start of simulation
– Simulation time Time is 0
– Bit variables/nets initialized to the unknown value x
– Execute each procedure
Procedures
• In any order, until stops at a delay or event control
Clk <= 0, then stop.
Activate when Time is 0+10=10 ns.
No actions, then stop.
Activate when S changes.
No actions, then stop.
Activate when Clk changes to 1
P1
P2
P3
Variables
Time (ns): Start 0
Q
x
x
Clk
x
0
S
x
x
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
output reg Q;
reg Clk, S;
We'll use arrow
to show where a
procedure stops
// P1
always begin
Clk <= 0;
#10;
Clk <= 1;
#10;
end
// P2
always @(S) begin
Q <= ~S;
end
// P3
initial begin
@ (posedge Clk);
S <= 1;
@ (posedge Clk);
S <= 0;
end
endmodule
vldd_ch3_SimEx1.v
73
The Simulation Cycle
•
module SimEx1(Q);
Simulation cycle
–
Set time to next time at which a procedure activates
(note: could be same as current time)
•
Procedures
–
output reg Q;
reg Clk, S;
In this case, time = 10 ns (P1 activates)
Execute active procedures (in any order) until stops
P1
Activate when Time is 10 ns.
Clk <= 1, stop, activate when Time=10+10=20 ns.
P2
Activate when S changes.
P3
Activate when Clk changes to 1.
Time (ns): Start 0
Variables
`timescale 1 ns/1 ns
10
Q
x
x
x
Clk
x
0
1
S
x
x
x
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
// P1
always begin
Clk <= 0;
#10;
Clk <= 1;
#10;
end
// P2
always @(S) begin
Q <= ~S;
end
// P3
initial begin
@ (posedge Clk);
S <= 1;
@ (posedge Clk);
S <= 0;
end
endmodule
vldd_ch3_SimEx1.v
74
The Simulation Cycle
•
`timescale 1 ns/1 ns
module SimEx1(Q);
Simulation cycle
– Set time to next time at which a procedure activates
• Still 10 ns; Clk just changed to 1 (P3 activates)
Procedures
– Execute active procedures (in any order) until stops
P1
Activate when Time is 20 ns.
P2
Activate when S changes.
P3
Activate when Clk changes to 1
S <= 1, stop, activate when Clk changes to 1 again
Variables
Time (ns): Start 0
10 10
Q
x
x
x
x
Clk
x
0
1
1
S
x
x
x
1
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
output reg Q;
reg Clk, S;
// P1
always begin
Clk <= 0;
#10;
Clk <= 1;
#10;
end
// P2
always @(S) begin
Q <= ~S;
end
// P3
initial begin
@ (posedge Clk);
S <= 1;
@ (posedge Clk);
S <= 0;
end
endmodule
vldd_ch3_SimEx1.v
75
The Simulation Cycle
•
module SimEx1(Q);
Simulation cycle
– Set time to next time at which a procedure
activates
• Still 10 ns; S just changed (P2 activates)
Procedures
– Execute active procedures until stops
P1
Activate when Time is 20 ns.
P2
Activate when S changes.
Q <= 0 (~S), stop, activate when S changes.
P3
Activate when change on Clk to 1.
Variables
Time (ns): Start 0
`timescale 1 ns/1 ns
10 10 10
Q
x
x
x
x
0
Clk
x
0
1
1
1
S
x
x
x
1
1
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
output reg Q;
reg Clk, S;
// P1
always begin
Clk <= 0;
#10;
Clk <= 1;
#10;
end
// P2
always @(S) begin
Q <= ~S;
end
// P3
initial begin
@ (posedge Clk);
S <= 1;
@ (posedge Clk);
S <= 0;
end
endmodule
vldd_ch3_SimEx1.v
76
The Simulation Cycle
•
module SimEx1(Q);
Simulation cycle
– Set time to next time at which a procedure
activates
• In this case, set Time = 20 ns (P1 activates)
Procedures
– Execute active procedures until stops
P1
Activate when Time is 20 ns.
Clk <= 0, stop, activate when T=20+10=30ns.
P2
Activate when S changes.
P3
Activate when change on Clk to 1.
Variables
Time (ns): Init 0
`timescale 1 ns/1 ns
10 10 10 20
Q
x
x
x
x
0
0
Clk
x
0
1
1
1
0
S
x
x
x
1
1
1
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
output reg Q;
reg Clk, S;
// P1
always begin
Clk <= 0;
#10;
Clk <= 1;
#10;
end
// P2
always @(S) begin
Q <= ~S;
end
// P3
initial begin
@ (posedge Clk);
S <= 1;
@ (posedge Clk);
S <= 0;
end
endmodule
vldd_ch3_SimEx1.v
77
The Simulation Cycle
•
•
`timescale 1 ns/1 ns
Simulation ends when user-specified time is
reached
Variable/net values translate to waveforms
Variables
Q
Clk
x
// P2
always @(S) begin
Q <= ~S;
end
0 10 20 30 40 50 Time (ns)
Variables
Time (ns): Init 0
output reg Q;
reg Clk, S;
// P1
always begin
Clk <= 0;
#10;
Clk <= 1;
#10;
end
x
S
module SimEx1(Q);
10 10 10 20 30 30 30 40 50
Q
x
x
x
x
0
0
0
0
1
1
1
Clk
x
0
1
1
1
0
1
1
1
0
1
S
x
x
x
1
1
1
1
0
0
0
0
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
// P3
initial begin
@ (posedge Clk);
S <= 1;
@ (posedge Clk);
S <= 0;
end
endmodule
vldd_ch3_SimEx1.v
78
Variable Updates
•
Assignment using "<=" ("non blocking assignment") •
doesn't change variable's value immediately
– Instead, schedules a change of value by placing an
event on an event queue
– Scheduled changes occur at end of simulation cycle
•
Important implications
– Procedure execution order in a simulation cycle doesn't
matter
• Assume procedures 1 and 2 are both active
– Proc1 schedules B to be 1, but does not change the present
value of B. B is still 0.
– Proc2 schedules A to be 0 (the present value of B).
– At end of simulation cycle, B is updated to 1 and A to 0
– Order of assignments to different variables in a
procedure doesn't matter
• Assume C was 0. Scheduled values will be C=1 and D=0,
for either Proc3a or Proc3b.
– Later assignment in procedure effectively overwrites
earlier assignment
• E will be updated with 0, but then by 1; so E is 1 at the
end of the simulation cycle.
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Recall FSM output assignment example,
in which default assignments were added
before the case statement.
Simulation cycle (revised)
– Set time to next time at
which a procedure resumes
– Execute active procedures
– Update variables with
schedule values
Assume B is 0.
Proc1:
B <= ~B;
Proc2:
A <= B;
A will be 0, not 1.
Same
Proc3a:
C <= ~C;
D <= C;
Proc3b:
D <= C;
C <= ~C;
Proc4:
E <= 0;
...
E <= 1;
79
Resets
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
80
Resets
•
•
•
•
Reset – Behavior of a register when
a reset input is asserted
Good practice dictates having
defined reset behavior for every
register
Reset behavior should always have
priority over normal register behavior
Reset behavior
– Usually clears register to 0s
– May initialize to other value
• e.g., state register of a controller
may be initialized to encoding of
initial state of FSM
•
Reset usually asserted externally at
start of sequential circuit operation,
but also to restart due to failure, user
request, or other reason
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
I3 I2 I1 I0
reg(4)
Rst
Q3 Q2 Q1 Q0
`timescale 1 ns/1 ns
module Reg4(I, Q, Clk, Rst);
input [3:0] I;
output [3:0] Q;
reg [3:0] Q;
input Clk, Rst;
always @(posedge Clk) begin
if (Rst == 1 )
Q <= 4'b0000;
else
Q <= I;
end
endmodule
vldd_ch3_Reg4.v
81
Synchronous Reset
• Previous examples used
synchronous resets
– Rst input only considered
during rising clock
I3 I2 I1 I0
reg(4)
Rst
Q3 Q2 Q1 Q0
`timescale 1 ns/1 ns
module Reg4(I, Q, Clk, Rst);
I
Q xxxx
Clk
Rst
input [3:0] I;
output [3:0] Q;
reg [3:0] Q;
input Clk, Rst;
Rst=1 has no effect until rising clock
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
always @(posedge Clk) begin
if (Rst == 1 )
Q <= 4'b0000;
else
Q <= I;
end
endmodule
vldd_ch3_Reg4.v
82
Asynchronous Reset
• Can also use asynchronous
reset
– Rst input considered
independently from clock
• Add "posedge Rst" to
sensitivity list
Rst
Q3 Q2 Q1 Q0
`timescale 1 ns/1 ns
module Reg4(I, Q, Clk, Rst);
input [3:0] I;
output [3:0] Q;
reg [3:0] Q;
input Clk, Rst;
I
Q
Clk
Rst
Asynchronous reset
Rst=1 has almost immediate effect
I
Q xxxx
Clk
Rst
I3 I2 I1 I0
reg(4)
always @(posedge Clk, posedge Rst) begin
if (Rst == 1 )
Q <= 4'b0000;
else
Q <= I;
end
endmodule
Synchronous reset
Rst=1 has no effect until next rising clock
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
vldd_ch3_Reg4AsyRst.v
83
Asynchronous Reset
• Could have used
asynchronous reset for FSM
state register too
...
// StateReg
always @(posedge Clk) begin
if (Rst == 1 )
State <= S_Off;
else
State <= StateNext;
end
Synchronous
...
...
// StateReg
always @(posedge Clk, posedge Rst) begin
if (Rst == 1 )
State <= S_Off;
else
Asynchronous
State <= StateNext;
end
...
vldd_ch3_LaserTimerBehAsyRst.v
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
84
Synchronous versus Asynchronous Resets
• Which is better – synchronous or asynchronous reset?
– Hotly debated in design community
• Each has pros and cons
– e.g., asynchronous can still reset even if clock is not functioning,
synchronous avoids timing analysis problems sometimes
accompanying asynchronous designs
• We won’t try to settle the debate here
– What’s important is to be consistent throughout a design
• All registers should have defined reset behavior that takes priority
over normal register behavior
• That behavior should all be synchronous reset or all be
asynchronous reset
– We will use synchronous resets in all of our remaining examples
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
85
Describing Safe FSMs
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
86
Describing Safe FSMs
• Safe FSM – If enters illegal state,
transitions to a legal state
• Example
– Suppose example has only three
states
– Two-bit encoding has illegal state
encoding "11"
• Also known as "unreachable" state
• Not possible to enter that state under
normal FSM operation
• But actually possible to enter that
state due to circuit error – e.g.,
electrical noise that causes state
register bit to switch
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
Inputs: B; Outputs: X
X=0
00
B'
Off
B
X=1
01 On1
X=1
10 On2
87
Describing Safe FSMs
• Safe FSM – If enters illegal state,
transitions to a legal state
• Example
– Suppose example has only three
states
– Two-bit encoding has illegal state
encoding "11"
– Safe implementation
• Transition to appropriate legal state
• Even though that undefined state
appears to be unreachable
• Thus, FSM recovers from the error
Inputs: B; Outputs: X
X=0
00
B'
Off
B
X=1
01 On1
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
X=0
11
X=1
10 On2
88
Describing Safe FSMs in Verilog HDL
• Unsafe FSM description
...
reg [1:0] State, StateNext;
– Only describes legal states, ignores
illegal states
always @(State, B) begin
case (State)
S_Off: begin
X <= 0;
if (B == 0)
StateNext <= S_Off;
else
StateNext <= S_On1;
end
S_On1: begin
X <= 1;
StateNext <= S_On2;
end
S_On2: begin
X <= 1;
StateNext <= S_Off;
end
endcase
end
• Some synthesis tools support "safe"
option during synthesis
– Automatically creates safe FSM from
an unsafe FSM description
...
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
89
Describing Safe FSMs in Verilog HDL
•
Explicitly describing a safe FSM
...
reg [1:0] State, StateNext;
– Include case item(s) to describe illegal
states
– Can use "default" case item
always @(State, B) begin
case (State)
S_Off: begin
X <= 0;
if (B == 0)
StateNext <= S_Off;
else
StateNext <= S_On1;
end
S_On1: begin
X <= 1;
StateNext <= S_On2;
end
S_On2: begin
X <= 1;
StateNext <= S_Off;
end
default: begin
X <= 0;
StateNext <= S_Off;
end
endcase
end
• Executes if State equals anything other
than S_Off, S_On1, or S_On2
•
Note: Use of default is wise regardless
of number of states
– Even if number is power of two,
because state encoding may use more
than minimum number of bits
• e.g., one-hot encoding has many more
illegal states than legal states
•
Note: If synthesis tool support "safe"
option, use it
– Otherwise, tool may automatically
optimize away unreachable states to
improve performance and size, but
making state machine unsafe
Verilog for Digital Design
Copyright © 2007
Frank Vahid and Roman Lysecky
...
vldd_ch3_LaserTimerBehSafe.v
90