VHDL 5 FINITE STATE MACHINES (FSM)

Slides:



Advertisements
Similar presentations
VHDL 5 FINITE STATE MACHINES (FSM) Some pictures are obtained from FPGA Express VHDL Reference Manual, it is accessible from the machines in the lab at.
Advertisements

Lecture #24 Page 1 EE 367 – Logic Design Lecture #24 Agenda 1.State Machines Review Announcements 1.n/a.
Synchronous Sequential Logic
VHDL 4 Building blocks of a computer VHDL 4 : (ver.5a) 1.
Circuits require memory to store intermediate data
1 Lecture 13 VHDL 3/16/09. 2 VHDL VHDL is a hardware description language. The behavior of a digital system can be described (specified) by writing a.
6/12/20151 Sequence Detectors Lecture Notes – Lab 4 Sequence detection is the act of recognizing a predefined series of inputs A sequence detector is a.
George Mason University ECE 448 – FPGA and ASIC Design with VHDL Finite State Machines State Diagrams, State Tables, Algorithmic State Machine (ASM) Charts,
Introduction to VHDL (part 2)
Introduction to FPGA AVI SINGH. Prerequisites Digital Circuit Design - Logic Gates, FlipFlops, Counters, Mux-Demux Familiarity with a procedural programming.
Chapter 10 State Machine Design. 2 State Machine Definitions State Machine: A synchronous sequential circuit consisting of a sequential logic section.
Finite State Machines VHDL ET062G & ET063G Lecture 6 Najeem Lawal 2012.
VHDL Introduction. V- VHSIC Very High Speed Integrated Circuit H- Hardware D- Description L- Language.
Anurag Dwivedi. Basic Block - Gates Gates -> Flip Flops.
VHDL Discussion Finite State Machines
Finite state machines Modelling FSM in VHDL. Types of automata (FSM) A sequential automaton has: –Inputs –States (a finite number of states) –Outputs.
VHDL Discussion Finite State Machines IAY 0600 Digital Systems Design Alexander Sudnitson Tallinn University of Technology 1.
VHDL Discussion Sequential Sytems. Memory Elements. Registers. Counters IAY 0600 Digital Systems Design Alexander Sudnitson Tallinn University of Technology.
04/26/20031 ECE 551: Digital System Design & Synthesis Lecture Set : Introduction to VHDL 12.2: VHDL versus Verilog (Separate File)
CEC 220 Digital Circuit Design VHDL in Sequential Logic Wednesday, March 25 CEC 220 Digital Circuit Design Slide 1 of 13.
Digital System Design using VHDL
ENG241 Digital Design Week #7 Sequential Circuits (Part B)
1 ASIC 120: Digital Systems and Standard-Cell ASIC Design Tutorial 2: Introduction to VHDL February 1, 2006.
VHDL 7: use of signals v.5a1 VHDL 7 Use of signals In processes and concurrent statements.
ECE DIGITAL LOGIC LECTURE 21: FINITE STATE MACHINE Assistant Prof. Fareena Saqib Florida Institute of Technology Fall 2015, 11/24/2015.
VHDL 4 Building blocks of a computer VHDL 4 : (ver.6a) 1.
George Mason University Behavioral Modeling of Sequential-Circuit Building Blocks ECE 545 Lecture 8.
Algorithmic State Machine (ASM) Charts: VHDL Code & Timing Diagrams
1 Introduction to Engineering Spring 2007 Lecture 18: Digital Tools 2.
Sequential statements (1) process
Combinational logic circuit
LAB #6 Sequential Logic Design (Flip Flops, Shift Registers)
Finite State Machines (part 1)
Week #7 Sequential Circuits (Part B)
Lecture 4. Sequential Logic #2
Introduction to Sequential Logic Design
ANALYSIS OF SEQUENTIAL CIRCUITS
Clocks A clock is a free-running signal with a cycle time.
Introduction Introduction to VHDL Entities Signals Data & Scalar Types
CHAPTER 17 VHDL FOR SEQUENTIAL LOGIC
Part IV: VHDL CODING.
COMP541 Sequential Logic – 2: Finite State Machines
Learning Outcome By the end of this chapter, students are expected to refresh their knowledge on sequential logic related to HDL.
ECE 4110–5110 Digital System Design
In processes and concurrent statements
Algorithmic State Machine (ASM) Charts: VHDL Code & Timing Diagrams
ECE 434 Advanced Digital System L08
Chapter 6 Examples of Finite State Machines (FSMs)
VHDL 1. ver.7a VHDL1 INTRODUCTION TO VHDL (VERY-HIGH-SPEED-INTEGRATED-CIRCUITS HARDWARE DESCRIPTION LANGUAGE) KH WONG (w2 begins) (Some pictures are.
Building blocks of a computer
CHAPTER 17 VHDL FOR SEQUENTIAL LOGIC
Lecture 13: Sequential Circuits, FSM
RTL Style در RTL مدار ترتيبي به دو بخش (تركيبي و عناصر حافظه) تقسيم مي شود. مي توان براي هر بخش يك پروسس نوشت يا براي هر دو فقط يك پروسس نوشت. مرتضي صاحب.
VHDL (VHSIC Hardware Description Language)
332:437 Lecture 8 Verilog and Finite State Machines
IAS 0600 Digital Systems Design
Lecture #5 In this lecture we will introduce the sequential circuits.
Behavioral Modeling of Sequential-Circuit Building Blocks
Figure 8.1. The general form of a sequential circuit.
Finite State Machines (part 1)
Dr. Tassadaq Hussain Introduction to Verilog – Part-3 Expressing Sequential Circuits and FSM.
ECE 448 Lecture 6 Finite State Machines State Diagrams, State Tables, Algorithmic State Machine (ASM) Charts, and VHDL code ECE 448 – FPGA and ASIC Design.
EGR 2131 Unit 12 Synchronous Sequential Circuits
SEQUENTIAL CIRCUITS __________________________________________________
332:437 Lecture 8 Verilog and Finite State Machines
Finite state machines Modelling FSM in VHDL.
ECE 448 Lecture 6 Finite State Machines State Diagrams vs. Algorithmic State Machine (ASM) Charts.
Sequntial-Circuit Building Blocks
(Sequential-Circuit Building Blocks)
Presentation transcript:

VHDL 5 FINITE STATE MACHINES (FSM) VHDL 5. FSM ver.8a VHDL 5 FINITE STATE MACHINES (FSM) Some pictures are obtained from FPGA Express VHDL Reference Manual, it is accessible from the machines in the lab at /programs/Xilinx foundation series/VDHL reference manual /programs/Xilinx foundation series/foundation project manager/foundation help content/XVDHL compiler help pages

Contents: You will learn VHDL 5. FSM ver.8a Contents: You will learn Finite state machines FSMs Feedback using signals or variables Use of clocks, processes to make FSMs Different types of Finite State Machines Moore Mealy

Finite State machines FSM VHDL 5. FSM ver.8a Finite State machines FSM A system jumps from one state to the next within a pool of finite states upon clock edges and input transitions. (traffic light, digital watch, CPU).

VHDL 5. FSM ver.8a TO WRITE CLOCK EDGES Using if-then-else

VHDL 5. FSM ver.8a Clock edges: Use of “if Statements” or “Wait until” to represent Flip-flops Test for edge of a signal. if SIGNAL’event and SIGNAL = ’1’ -- rising edge if SIGNAL’event and SIGNAL = ’0’ -- falling edge Or In a wait statement, edge can also be wait until CLK = ’1’; -- rising edge triggered wait until CLK = ’0’;--falling edge triggered

Use of ‘Wait’ and ‘If’ for clock edge detection VHDL 5. FSM ver.8a Use of ‘Wait’ and ‘If’ for clock edge detection Clock edge detection Synchronous processes clock edge detection: Use ‘Wait’ or ‘IF’ Asynchronous processes Use ‘IF’ only

Clock edges: compare wait and if Statements VHDL 5. FSM ver.8a Clock edges: compare wait and if Statements IEEE VHDL requires that a process with a wait statement must not have a sensitivity list. In general, the following guidelines apply: Synchronous processes (processes that compute values only on clock edges) must be sensitive to the clock signal. Use wait-until or if. When Wait is used: The first statement must be wait until, E.g. Process  no sensitivity list, implies there is one clock as input Begin Wait until clock =‘1’ Asynchronous processes (processes that compute values on clock edges and when asynchronous conditions are TRUE) must be sensitive to the clock signal (if any), and to inputs that affect asynchronous behavior. Use “if” only. E.g. Process (clock, input_a, input_b…)

VHDL 5. FSM ver.8a THE FEEDBACK CONCEPT For making FSM

VHDL 5. FSM ver.8a The feedback concept So far you learned logic with feed forward paths only. Now, you will see feedback paths. The first step of the making a state machine

Feedback 1 -- direct feedback VHDL 5. FSM ver.8a Feedback 1 -- direct feedback library IEEE;--(ok Vivado 2014.4 & ISE) use IEEE.STD_LOGIC_1164.ALL; entity some_entity is port (a, clk, reset: in std_logic; c : buffer std_logic); -- or use inout end some_entity; ------------------------------------------- architecture example of some_entity is begin process(clk,reset) if reset = '1' then c <= '0'; elsif rising_edge(clk) then c<= not(a and c); end if; end process; end example; -- synthesized ok b Q D c a clk Clock reset reset If C is an IO pin connected outside, it must have type inout or buffer

VHDL 5. FSM ver.8a Concentrate on the following lines of Feedback 1 Use of signals in a clocked process 13) elsif rising_edge(clk) 14) then c<= not(a and c); ****************Note *********** Current not(a and c) affects next b

Worksheet 5.1 Initially c=0 Draw c Clock Reset a c b Q D c a Clock clk VHDL 5. FSM ver.8a Worksheet 5.1 b Q D c a Initially c=0 Draw c clk Clock Clock Reset a c reset reset

Feedback 2 -- using signals VHDL 5. FSM ver.8a Feedback 2 -- using signals b2 b1 q library IEEE;--(ok Vivado 2014.4 & ISE) use IEEE.STD_LOGIC_1164.ALL; entity some_entity is port (a, clk, reset: in std_logic; c : inout std_logic); -- or use inout end some_entity; ------------------------------------------- architecture example of some_entity is signal b: std_logic; -- internal signal b is global, begin process(clk,reset) if reset = '1' then c <= '0'; elsif rising_edge(clk) then b<= not(a and c); c <= b; end if; end process; end example; -- synthesized ok D q D a c clk Clock reset reset If C is an IO pin connected outside, it must have type inout or buffer

VHDL 5. FSM ver.8a Concentrate on the following lines of feedback 2 Use of signals in a clocked process 15) then b<= not(a and c); 16) c <= b; ****************Note *********** Current {not (a and c)} affects next b Previous (before 8 is executed) b affects c The two b’s in the process have different states

Exercise 5.2 Initially c=0,b1=1,b2=1 Draw b2,c Clock reset a b1 b2 c VHDL 5. FSM ver.8a b2 Exercise 5.2 b1 q a D q D c Initially c=0,b1=1,b2=1 Draw b2,c clk Clock reset Clock reset a b1 b2 c reset

Feedback 3 -- using variables VHDL 5. FSM ver.8a Feedback 3 -- using variables library IEEE;--(ok Vivado 2014.4 & ISE) use IEEE.STD_LOGIC_1164.ALL; entity some_entity is port (a, clk, reset: in std_logic; c : buffer std_logic); -- or use inout end some_entity; ------------------------------------------- architecture example of some_entity is begin Process -- no sensitivity list for 'wait unit' variable v: std_logic; --v is local wait until clk = '1'; if reset = '1' then v := '0'; else v := not (a and c); c <= v; end if; end process; v Q a D c clk Clock reset reset If C is an IO pin connected outside, it must have type inout or buffer

VHDL 5. FSM ver.8a Concentrate on the following lines of feedback 3 Use of signals in a clocked process 15) else v := not (a and c); 16) c <= v; ****************Note *********** Current not(a and c) affects next variable v The new variable (after line6 is executed) v affects c This is the main difference between signal and variable in a clocked process Signals do not change immediately Variables change immediately

Exercise 5.3 Initially c=0 Draw c Clock Reset a c v Q D c Clock clk VHDL 5. FSM ver.8a Exercise 5.3 v Q a D c Initially c=0 Draw c clk Clock Clock Reset a c reset reset

Use of modes : inout and buffer in feedback VHDL 5. FSM ver.8a Use of modes : inout and buffer in feedback Buffer can be read back inout allows for internal feedback, it can also read external signals. in out buffer in Inout in out

Variable: A variable in a process can update many times. VHDL 5. FSM ver.8a Important: Feedback using signals and variables will give different results. Variable: A variable in a process can update many times. Signal: “<= ” can be treated as a flip-flop (left side of “<= ” is output, right side of “<= ” is input) , it only updates once when the process executes at the triggering clock edge. When a signal is assigned to different values by different statements in a process, only the last statement is effective.

The Trick!! Inside a process Signals in a process: VHDL 5. FSM ver.8a Inside a process The Trick!! Signals in a process: Combination process=the process has no clock edge detection: only the last assignment statement for that particular signal counts, the assignment is a combinational logic circuit. Clocked process=the process has clock edge detection (e.g. if rising_edge(clk) ) Signal assignment before clock edge detection: same as combination processes (same as above). Assignment after clock edge detection: the assignment is a flip-flop. Variables in processes (only live in processes anyway): when all signals are stable, then use your old programming common sense. Assignments take effect immediately.

The difference between signal and variables in feedback processes VHDL 5. FSM ver.8a EXAMPLE TO SHOW The difference between signal and variables in feedback processes

V1 := ’1’; -- This sets the value of V1 VHDL 5. FSM ver.8a process( S1, S2 ) variable V1, V2: BIT; begin V1 := ’1’; -- This sets the value of V1 V2 := ’1’; -- This sets the value of V2 S1 <= ’1’; -- This assignment is the driver for S1 S2 <= ’1’; -- This has no effect because of the -- assignment later in this process S_OUT(1) <= V1; -- Assigns ’1’, the value assigned above S_OUT(2) <= V2; -- Assigns ’1’, the value assigned above S_OUT(3) <= S1; -- Assigns ’1’, the value assigned above S_OUT(4) <= S2; -- Assigns ’0’, the value assigned below V1 := ’0’; -- This sets the new value of V1 V2 := ’0’; -- This sets the new value of V2 S2 <= ’0’; -- This assignment overrides the -- previous one since it is the last assignment to this signal here S_OUT(5) <= V1; -- Assigns ’0’, the value assigned above S_OUT(6) <= V2; -- Assigns ’0’, the value assigned above S_OUT(7) <= S1; -- Assigns ’1’, the value assigned above S_OUT(8) <= S2; -- Assigns ’0’, the value assigned above end process; (page 6-9 xilinx foundation4.2 vhdl reference) signal S1, S2: BIT; -- signal S_OUT: BIT_VECTOR(1 to 8);

signal S_OUT: BIT_VECTOR(1 to 8); . . . process( S1, S2 ) VHDL 5. FSM ver.8a (See VHDL reference manual version : chapter 6 [sequential statements]: variable/signal assignment statements.) signal S1, S2: BIT; signal S_OUT: BIT_VECTOR(1 to 8); . . . process( S1, S2 ) variable V1, V2: BIT; begin V1 := ’1’; -- This sets the value of V1 V2 := ’1’; -- This sets the value of V2 S1 <= ’1’; -- This assignment is driver for S1 S2 <= ’1’; -- This has no effect because of the -- assignment later in this process

S_OUT(1) <= V1; -- is ’1’, the value assigned above S_OUT(3) <= S1; -- is ’1’, the value assigned above S_OUT(4) <= S2; -- is ’0’, the value assigned below V1 := ’0’; -- This sets the new value of V1 V2 := ’0’; -- This sets the new value of V2 S2 <= ’0’; -- This assignment overrides the -- previous one since it is the last -- assignment to this signal in this -- process VHDL 5. FSM ver.8a

S_OUT(5) <= V1; -- is ’0’, the value assigned above S_OUT(7) <= S1; -- is ’1’, the value assigned above S_OUT(8) <= S2; -- is ’0’, the value assigned above end process; VHDL 5. FSM ver.8a

Examples: signals and variables in process( ) See Roth p.66 VHDL 5. FSM ver.8a Examples: signals and variables in process( ) See Roth p.66 Process --a variable can change value many times in a process variable v1: integer :=1; --initialized to1 variable v2: integer :=2; --initialized to 2 variable v3: integer :=3;--iniltialized to 3 begin wait on trigger; --find results after clock edge--------------- t1 t2 t3 t4 v1:=v2+v3; -- after t1, now v1 = 2+3=5 5 10 20 40 v2:=v1; -- after t1, now v2=5 5 10 20 40 v3:=v2; -- after t1, now v3=5 5 10 20 40 sum<=v1+v2+v3; 15 30 60 120 -- so sum=5+5+5=15 after the first trigger clock edge. end process Variables case

Signal case signal s1: integer:=1; signal s2: integer:=2; VHDL 5. FSM ver.8a Exercise 5.4:Architecture sig_arc of example is signal s1: integer:=1; signal s2: integer:=2; signal s3: integer:=3; begin -- t1 is just after the first clk edge, etc process begin wait on clk;-- t1 t2 t3 t4 s1<=s2+s3; -- s1= s2<=s1; -- s2= s3<=s2; -- s3= sum<=s1+s2+s3;--sum= end process end Signal case __ __ __ __

use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; VHDL 5. FSM ver.8a library IEEE; -- successfully compiled and tested;--(syn. ok Vivado 2014.4 ) use IEEE.STD_LOGIC_1164.all; -- so use reset to set them to init values use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; entity some_entity is port ( clk : in STD_LOGIC; reset : in STD_LOGIC; sportsum: out integer); end some_entity; Architecture sig_arc of some_entity is signal t1, t2, t3 : integer; -- In Xilinx, ini. Signals cannot be done begin -- t1 is just after the first clk, etc --with clk, without clk, with s1234, in sen. list or not process(clk,reset) -- clocked process, syn. input can be in or not in the sensitivity list -- begin wait on clk;-- t1 t2 t3 t4 begin if reset = '1’ then -- use reset to set them to init values t1 <= 1; t2 <= 2; t3 <= 3; sportsum <= 0; elsif clk='1' and clk'event then t1<=t2+t3; -- s1= t2<=t1; --s2= t3<=t2; --s3= sportsum <= t1+t2+t3; -- sum= 6, 8, 9, 14 after each clock edge end if; end process; end sig_arc;

Exercise 5.5: architecture example of some_entity is VHDL 5. FSM ver.8a Exercise 5.5: architecture example of some_entity is signal con1: std_logic; -- b is global, bit is a VHDL type begin process(clk,reset) variable v1: std_logic; if reset = '1' then out1 <= '0'; out2<='0'; out3<='0';con1<='1'; elsif rising_edge(clk) then ---case 1 ----- direct feedback out1<= not(in1 and out1); -- out1 is immediate ---case 2 ----- feedback using signal con1<= not(in1 and out2); out2<= con1; -- out2 is delayed hence lower frequency ---case 3 ----- feedback using variable v1:=not(in1 and out3); -- out3 is immediate out3 <= v1; end if; end process; end example; -- synthesized Plot result. Try this in lab and explain the result

VHDL 5. FSM ver.8a Worksheet 5.5 Clock Reset Out1 Out2 Out3 Con1

Types of FSM Finite State machines -Study FSMs with inputs other than the clock Moore machine Mealy machine VHDL 5. FSM ver.8a

State machine designs, 2 types VHDL 5. FSM ver.8a State machine designs, 2 types A Moore machine’s outputs are a function of the present state only. A Mealy machine’s outputs are a function of the present-state and present-inputs.

Output is a function of the state registers. VHDL 5. FSM ver.8a Moore machine, an example F1 is B<= not (A and C) F2 is D<= not C Output is a function of the state registers. The simplest Moore machine use only one process , see next page Nand not D type Flip-Flop (FF)

process :F1 3 begin 4-- since D is purely for output, no feedback read VHDL 5. FSM ver.8a Moore machine example 1 architecture moore2_arch of system is 2 signal C: bit; -- global, can be seen by different 3 begin 4-- since D is purely for output, no feedback read 5 -- requirement, so it has the type out 6 D <= not C; -- F2 = combination logic 7-- 8 process -- sequential logic 9 begin 10 wait until clock; 11 C <= not (A and C); --F1 = combination logic 12 end process; 13 end moore2_arch; process :F1

use IEEE.std_logic_1164.all; VHDL 5. FSM ver.8a library IEEE; -- Moore2 example ,-- synthesized ok. (ISE % Vivado 2014.4) use IEEE.std_logic_1164.all; entity some_entity is ---------------------------------------------- port ( clock: in std_logic; A,reset: in std_logic; D: inout std_logic -- no need to use inout or buffer type, since there is no need to read. ); end some_entity; architecture moore2_arch of some_entity is signal B,C: std_logic; ---------------------------------------------- begin process (C) -- combinational logic D <= not C; -- F2 = combination logic end process; process(clock,reset) -- sequential logic if reset = '1' then c <= '0'; elsif rising_edge(clock)then C <= not (A and C); --F1 = combination logic end if; end moore2_arch;

Moore machine using 2 processes VHDL 5. FSM ver.8a Moore machine using 2 processes It is more flexible and easier to design. You can make it formal that F1 is an operation (a concurrent line of code) and F2 is another operation (a process)

Exercise 5.6 ,exercise on Moore machine, draw c (init. c=0) VHDL 5. FSM ver.8a Exercise 5.6 ,exercise on Moore machine, draw c (init. c=0) clock C=/D when A=1 C=/D when A=0 not Nand D type FF

VHDL 5. FSM ver.8a Mealy machine A Mealy machine’s outputs are a function of the present state and the inputs.

Mealy machine, an example VHDL 5. FSM ver.8a Mealy machine, an example A Mealy Machine can use two processes, since its timing is a function of both the clock and data inputs. F1 is C <= not(A or C); F2 is D <= (A or C) In the diagram we can say that B is the current output of not( A and C), but B does not need to exist, writing C <= not(A or C) is enough F1 is B <= not(A or C); F2 is D <= (A or C) Nor or D Q D-Flip-Flop

Operation :F2 Operation :F1 VHDL 5. FSM ver.8a Mealy machine outputs are a function of the present state and the inputs. Operation :F2 library IEEE; -- Mealy example ,-- synthesized ok. ( Vivado 2014.4) use IEEE.std_logic_1164.all; entity some_entity is ---------------------------------------------- port ( clock: in std_logic; A,reset: in std_logic; D: inout std_logic -- no need to use inout or buffer type, since there is no need to read. ); end some_entity; architecture mealy_arch of some_entity is signal C: std_logic; ---------------------------------------------- begin process (A,C) -- combinational logic process D <= (A or C);--F2 = combination logic end process; --------------------------------------------- process(clock,reset) -- sequential logic if reset = '1' then c <= '0'; elsif rising_edge(clock)then C <=not(A or C);--F1 = combination logic end if; end mealy_arch; Operation :F1

Exercise 5.7: on Mealy machine, Plot C,D (init. c=0) VHDL 5. FSM ver.8a Exercise 5.7: on Mealy machine, Plot C,D (init. c=0) clock F1 is B <= not(A or C); F2 is D <= (A or C) A C D Nor or D Q D-Flip-Flop

Quick revision You should know How to write a clock edge detector VHDL 5. FSM ver.8a Quick revision You should know How to write a clock edge detector Feedback theory and implementation Design Moore and Mealy machine Use of signal and variables and understand their differences