Sequential Machines 2
Download
Report
Transcript Sequential Machines 2
Verilog for sequential machines
FPGA-Based System Design: Chapter 5
Copyright 2004 Prentice Hall PTR
Verilog always statement
Use always to wait for clock edge:
always @(posedge clock) // start execution
at the clock edge
begin
// insert combinational logic here
end
FPGA-Based System Design: Chapter 5
Copyright 2004 Prentice Hall PTR
Verilog state machine
always @(posedge clock) // start execution at the clock edge
begin
if (rst == 1)
begin
// reset code
end
else begin // state machine
case (state)
‘state0: begin
o1 = 0;
state = ‘state1;
end
‘state1: begin
if (i1) o1 = 1; else o1 = 0;
state = ‘state0;
endcase
end // state machine
end
FPGA-Based System Design: Chapter 5
Copyright 2004 Prentice Hall PTR
Traffic light controller
Intersection of two roads:
– highway (busy);
– farm (not busy).
Want to give green light to highway
– as much as possible.
Want to give green to farm
– when needed.
Must always have
– at least one red light.
FPGA-Based System Design: Chapter 5
Copyright 2004 Prentice Hall PTR
Traffic light system
traffic
light
farm road
highway
sensor
FPGA-Based System Design: Chapter 5
Copyright 2004 Prentice Hall PTR
System operation
Sensor on farm road
– indicates when cars on farm road are waiting
for green light.
Must obey
– required lengths for green, yellow lights.
FPGA-Based System Design: Chapter 5
Copyright 2004 Prentice Hall PTR
Traffic light machine
Build controller out of two machines:
– sequencer which sets colors of lights, etc.
– timer which is used to control durations of
lights.
Separate counter isolates logical design
from clock period.
Separate counter greatly reduces number of
states in sequencer.
FPGA-Based System Design: Chapter 5
Copyright 2004 Prentice Hall PTR
Sequencer state transition graph
(cars & long)’ / 0 green red
short/ 1 red yellow
short’ /
0 red yellow
hwygreen
cars & long / 1 green red
hwyyellow
farmyellow
short’ /
0 yellow red
short / 1 yellow red
cars’ & long / 1 red green
farmgreen
cars & long’ / 0 red green
FPGA-Based System Design: Chapter 5
Copyright 2004 Prentice Hall PTR
Verilog model of controller
module sequencer(rst,clk,cars,long,short,hg,hy,hr,fg,fy,fr,count_reset);
input rst, clk; /* reset and clock */ input cars; // high when a car is present at the farm road
input long, short; /* long and short timers */ output hg, hy, hr; // highway light: green, yellow, red
output fg, fy, fr; /* farm light: green, yellow, red */ reg hg, hy, hr, fg, fy, fr; // remember these outputs
output count_reset; /* reset the counter */ reg count_reset; // register this value for simplicity
// define the state codes
‘define HWY_GREEN 0
‘define HWY_YX 1
‘define HWY_YELLOW 2
‘define HWY_YY 3
‘define FARM_GREEN 4
‘define FARM_YX 5
‘define FARM_YELLOW 6
‘define FARM_YY 7
reg [2:0] state; // state of the sequencer
always @(posedge clk)
begin
if (rst == 1)
begin
state = ‘HWY_GREEN; // default state
count_reset = 1;
end
FPGA-Based System Design: Chapter 5
Copyright 2004 Prentice Hall PTR
Verilog model of controller, cont’d.
else begin // state machine
count_reset = 0;
case (state)
‘HWY_GREEN: begin
if (~(cars & long)) state = ‘HWY_GREEN;
else begin
state = ‘HWY_YX;
count_reset = 1;
end
hg = 1; hy = 0; hr = 0; fg = 0; fy = 0; fr = 1;
end
‘HWY_YX: begin
state = ‘HWY_YELLOW;
hg = 0; hy = 1; hr = 0; fg = 0; fy = 0; fr = 1;
end
‘HWY_YELLOW: begin
if (~short) state = ‘HWY_YELLOW;
else begin
state = ‘FARM_YY;
end
hg = 0; hy = 1; hr = 0; fg = 0; fy = 0; fr = 1;
end
‘FARM_YY: begin
state = ‘FARM_GREEN;
hg = 0; hy = 0; hr = 1; fg = 1; fy = 0; fr = 0;
FPGA-Based System Design: Chapter 5end
Copyright 2004 Prentice Hall PTR
Verilog model of system
‘FARM_GREEN: begin
if (cars & ~long) state = ‘FARM_GREEN;
else begin
state = ‘FARM_YX;
count_reset = 1;
end
hg = 0; hy = 0; hr = 1; fg = 1; fy = 0; fr = 0;
end
‘FARM_YX: begin
state = ‘FARM_YELLOW;
hg = 0; hy = 0; hr = 1; fg = 1; fy = 0; fr = 0;
end
‘FARM_YELLOW: begin
if (~short) state = ‘FARM_YELLOW;
else begin
state = ‘HWY_GREEN;
end
hg = 0; hy = 0; hr = 1; fg = 0; fy = 1; fr = 0;
end
‘HWY_YY: begin
state = ‘HWY_GREEN;
hg = 1; hy = 0; hr = 0; fg = 0; fy = 0; fr = 1;
end
endcase
end // state machine
end // always
endmodule
FPGA-Based System Design: Chapter 5
Copyright 2004 Prentice Hall PTR
Verilog model of timer
module timer(rst,clk,long,short);
input rst, clk; // reset and clock
output long, short; // long and short timer outputs
reg [3:0] tval; // current state of the timer
always @(posedge clk) // update the timer and outputs
if (rst == 1)
begin
tval = 4’b0000;
short = 0;
long = 0;
end // reset
else begin
{long,tval} = tval + 1; // raise long at rollover
if (tval == 4’b0100)
short = 1’b1; // raise short after 2^2
end // state machine
endmodule
FPGA-Based System Design: Chapter 5
Copyright 2004 Prentice Hall PTR
Verilog model of system
module tlc(rst,clk,cars,hg,hy,hr,fg,fy,fr);
input rst, clk; // reset and clock
input cars; // high when a car is present at the farm road
output hg, hy, hr; // highway light: green, yellow, red
output fg, fy, fr; // farm light: green, yellow, red
wire long, short, count_reset; // long and short
// timers +
counter reset
sequencer s1(rst,clk,cars,long,short,
hg,hy,hr,fg,fy,fr,count_reset);
timer t1(count_reset,clk,long,short);
endmodule
FPGA-Based System Design: Chapter 5
Copyright 2004 Prentice Hall PTR
The synchronous philosophy
All operation is controlled by the clock.
– All timing is relative to clock.
– Separates functional, performance
optimizations.
Put a lot of work into designing the clock
network so you don’t have to worry about it
throughout the combinational logic.
FPGA-Based System Design: Chapter 5
Copyright 2004 Prentice Hall PTR
Register characteristics
Form of clock signal
– used to trigger the register.
How the behavior of data around the clock
trigger affects the stored value.
When the stored value is presented at the
output.
Whether there is ever a combinational path
from input to output.
FPGA-Based System Design: Chapter 5
Copyright 2004 Prentice Hall PTR
Types of registers
Latch: transparent when internal memory is
being set.
Flip-flop: not transparent, reading and
changing output are separate.
FPGA-Based System Design: Chapter 5
Copyright 2004 Prentice Hall PTR
Types of registers
D-type (data). Q output is determined by the
D input at the clocking event.
T-type (toggle). Toggles its state at input
event.
SR-type (set/reset). Set or reset by inputs
(S=R=1 not allowed).
JK-type. Allows both J and K to be 1,
otherwise similar to SR.
FPGA-Based System Design: Chapter 5
Copyright 2004 Prentice Hall PTR
Clock event
Change in clock signal that controls register
behavior.
– 0-1 transition or 1-0 transition.
Data must generally be held constant
around the clock event.
FPGA-Based System Design: Chapter 5
Copyright 2004 Prentice Hall PTR
Setup and hold times
setup
event
hold
clock
D
changing
stable
time
FPGA-Based System Design: Chapter 5
Copyright 2004 Prentice Hall PTR
Duty cycle
Percentage of time that clock is active.
50%
FPGA-Based System Design: Chapter 5
Copyright 2004 Prentice Hall PTR