Finite State Machine (FSM)  When the sequence of actions in your design depend on the state of sequential elements, a finite state machine (FSM) can be.

Slides:



Advertisements
Similar presentations
Finite State Machine (FSM) Quando a sequencia das ações no seu projeto dependem do estado de um elemento sequüencial, uma máquina de estados finitos (FSM)
Advertisements

Synchronous Sequential Logic
Combinational Logic.
//HDL Example 5-1 // //Description of D latch (See Fig.5-6) module D_latch (Q,D,control); output Q; input.
Verilog. 2 Behavioral Description initial:  is executed once at the beginning. always:  is repeated until the end of simulation.
FSM Revisit Synchronous sequential circuit can be drawn like below  These are called FSMs  Super-important in digital circuit design FSM is composed.
TOPIC : Finite State Machine(FSM) and Flow Tables UNIT 1 : Modeling Module 1.4 : Modeling Sequential circuits.
1 Verilog Digital System Design Z. Navabi, 2006 Sequential Circuit Description  This chapter concentrates on:  Using Verilog constructs for description.
Digital Design - Sequential Logic Design Chapter 3 - Sequential Logic Design.
Classification of Digital Circuits  Combinational. Output depends only on current input values.  Sequential. Output depends on current input values and.
Introduction to Sequential Logic Design Bistable elements Latches.
Circuits require memory to store intermediate data
FSM examples.
Spring 20067W. Rhett Davis with minor modifications by Dean Brock ECE 406 at UNASlide 1 ECE 406 Design of Complex Digital Systems Lecture 10: 9: State.
ELEN468 Lecture 101 ELEN 468 Advanced Logic Design Lecture 10 Behavioral Descriptions IV.
OUTLINE Introduction Basics of the Verilog Language Gate-level modeling Data-flow modeling Behavioral modeling Task and function.
Sequential Logic 1  Combinational logic:  Compute a function all at one time  Fast/expensive  e.g. combinational multiplier  Sequential logic:  Compute.
Embedded Systems Hardware:
Verilog Sequential Circuits Ibrahim Korpeoglu. Verilog can be used to describe storage elements and sequential circuits as well. So far continuous assignment.
ELEN 468 Lecture 161 ELEN 468 Advanced Logic Design Lecture 16 Synthesis of Language Construct II.
Give qualifications of instructors: DAP
Contemporary Logic Design Finite State Machine Design © R.H. Katz Transparency No Chapter #8: Finite State Machine Design Finite State.
ENEE 408C Lab Capstone Project: Digital System Design Fall 2005 Sequential Circuit Design.
Embedded Systems Hardware: Storage Elements; Finite State Machines; Sequential Logic.
ELEN 468 Advanced Logic Design
COE 202 Introduction to Verilog Computer Engineering Department College of Computer Sciences and Engineering King Fahd University of Petroleum and Minerals.
Sequential Circuit  It is a type of logic circuit whose output depends not only on the present value of its input signals but on the past history of its.
Lecture 10 Topics: Sequential circuits Basic concepts Clocks
Sequential Logic in Verilog
Registers & Counters M. Önder Efe
ECE 551 Digital System Design & Synthesis Fall 2011 Midterm Exam Overview.
Chapter 11: System Design Methodology Digital System Designs and Practices Using Verilog HDL and 2008, John Wiley11-1 Ders 8: FSM Gerçekleme ve.
1 CSE370, Lecture 15 Lecture 15 u Logistics n HW5 due this Friday n HW6 out today, due Friday Feb 20 n I will be away Friday, so no office hour n Bruce.
1 CSE370, Lecture 17 Lecture 17 u Logistics n Lab 7 this week n HW6 is due Friday n Office Hours íMine: Friday 10:00-11:00 as usual íSara: Thursday 2:30-3:20.
Register Transfer Level & Design with ASM
Introduction to State Machine
1 COMP541 Sequential Circuits Montek Singh Feb 1, 2012.
Verilog for Synthesis Ing. Pullini Antonio
Workshop Topics - Outline
DLD Lecture 26 Finite State Machine Design Procedure.
Finite State Machine (FSM) Nattha Jindapetch December 2008.
VHDL Discussion Finite State Machines
VHDL Discussion Finite State Machines IAY 0600 Digital Systems Design Alexander Sudnitson Tallinn University of Technology 1.
M.Mohajjel. Structured Procedures Two basic structured procedure statements always initial All behavioral statements appear only inside these blocks Each.
1 COMP541 State Machines – 2 Registers and Counters Montek Singh Feb 11, 2010.
Copyright © 2007 Elsevier3- Sequential Logic Circuits Design.
Chapter 11: System Design Methodology Digital System Designs and Practices Using Verilog HDL and 2008, John Wiley11-1 Chapter 11: System Design.
ACCESS IC LAB Graduate Institute of Electronics Engineering, NTU 99-1 Under-Graduate Project Design of Datapath Controllers Speaker: Shao-Wei Feng Adviser:
Lab5-1 張明峰 交大資工系 Lab 5: FSM and BCD counters Implement the vending machine of lab 2 A two-digit BCD counter –two BCD counters –can load data in parallel.
1 Modeling of Finite State Machines Debdeep Mukhopadhyay Associate Professor Dept of Computer Science and Engineering NYU Shanghai and IIT Kharagpur.
EMT 351/4 DIGITAL IC DESIGN Verilog Behavioral Modeling  Finite State Machine -Moore & Mealy Machine -State Encoding Techniques.
Pusat Pengajian Kejuruteraan Mikroelektronik EMT 351/4 DIGITAL IC DESIGN Verilog Behavioural Modeling (Part 4) Week #
1 Lecture 3: Modeling Sequential Logic in Verilog HDL.
Exp#7 Finite State Machine Design in Verilog COE203 Digital Logic Laboratory Dr. Ahmad Almulhem KFUPM Spring 2009.
Lecture 10 Flip-Flops/Latches
Supplement on Verilog FF circuit examples
Class Exercise 1B.
Figure 8.1. The general form of a sequential circuit.
Chapter #6: Sequential Logic Design
EMT 351/4 DIGITAL IC DESIGN Week # Synthesis of Sequential Logic 10.
FIGURE 5.1 Block diagram of sequential circuit
Introduction to Sequential Logic Design
CS Fall 2005 – Lec. #5 – Sequential Logic - 1
SYNTHESIS OF SEQUENTIAL LOGIC
FSM MODELING MOORE FSM MELAY FSM. Introduction to DIGITAL CIRCUITS MODELING & VERIFICATION using VERILOG [Part-2]
COE 202 Introduction to Verilog
Finite State Machines (part 1)
Dr. Tassadaq Hussain Introduction to Verilog – Part-3 Expressing Sequential Circuits and FSM.
The Verilog Hardware Description Language
Presentation transcript:

Finite State Machine (FSM)  When the sequence of actions in your design depend on the state of sequential elements, a finite state machine (FSM) can be implemented  FSMs are widely used in applications that require prescribed sequential activity  Example: Sequence Detector Fancy counters Traffic Light Controller Data-path Controller Device Interface Controller etc.

Finite State Machine (FSM) (cont.) Next-State Logic Memory Inputs Current State Next State  All state machines have the general feedback structure consisting of:  Combinational logic implements the next state logic Next state (ns) of the machine is formed from the current state (cs) and the current inputs  State register holds the value of current state

Types of State Machines Moore State Machine  Next state depends on the current state and the inputs but the output depends only on the present state  next_state(t) = h(current_state(t), input(t))  output = g(current_state(t)) Inputs Outputs ns cs State Register Next-State Logic Output Logic

Types of State Machines (cont.) Mealy State Machine  Next state and the outputs depend on the current state and the inputs  next_state(t) = h(current_state(t), input(t))  output(t) = g(current_state(t), input(t)) Inputs Outputs Next-State Logic State Register Output Logic ns cs

Typical Structure of a FSM module mod_name ( … ); input … ; output … ; parameter size = … ; reg [size-1: 0] current_state; wire [size-1: 0] next_state; // State definitions `define state_0 2'b00 `define state_1 2b01 (current_state or the_inputs) begin // Decode for next_state with case or if statement // Use blocked assignments for all register transfers to ensure // no race conditions with synchronous assignments end (negedge reset or posedge clk) begin if (reset == 1'b0) current_state <= state_0; else current_state <= next_state; end //Output assignments endmodule Next State Logic State Register

Sequence Detector FSM Functionality: Detect two successive 0s or 1s in the serial input bit stream read_1_zeroread_1_one read_2_zeroread_2_one reset_state reset out_bit = 0 out_bit = 1 FSM Flow-Chart

Sequence Detector FSM (cont.) module seq_detect (clock, reset, in_bit, out_bit); input clock, reset, in_bit; output out_bit; reg [2:0] state_reg, next_state; // State declaration parameter reset_state = 3'b000; parameter read_1_zero = 3'b001; parameter read_1_one = 3'b010; parameter read_2_zero = 3'b011; parameter read_2_one = 3'b100; // state register (posedge clock or posedge reset) if (reset == 1) state_reg <= reset_state; else state_reg <= next_state; // next-state logic (state_reg or in_bit) case (state_reg) reset_state: if (in_bit == 0) next_state = read_1_zero; else if (in_bit == 1) next_state = read_1_one; else next_state = reset_state; read_1_zero: if (in_bit == 0) next_state = read_2_zero; else if (in_bit == 1) next_state = read_1_one; else next_state = reset_state; read_2_zero: if (in_bit == 0) next_state = read_2_zero; else if (in_bit == 1) next_state = read_1_one; else next_state = reset_state;

Sequence Detector FSM (cont.) read_1_one: if (in_bit == 0) next_state = read_1_zero; else if (in_bit == 1) next_state = read_2_one; else next_state = reset_state; read_2_one: if (in_bit == 0) next_state = read_1_zero; else if (in_bit == 1) next_state = read_2_one; else next_state = reset_state; default: next_state = reset_state; endcase assign out_bit = ((state_reg == read_2_zero) || (state_reg == read_2_one)) ? 1 : 0; endmodule

Clock Domain Synchronization  Larger designs generally consists of several parts that operate at independent clocks – clock domains  Clock domain synchronization is required when ever a signal traverses from one clock domain to another clock domain  Problem can be treated as the case where flip-flop data input is asynchronous  Can cause metastabilty in the receiving flip-flop  Rupture the sequential behavior  This can be avoided by using synchronization circuits

Clock Domain Synchronization (cont.)  Note:  Metastability can not be avoided  Metastability causes the flip-flop to take longer time than t clock-output to recover  Solution: Let the signal become stable before using it (i.e. increase the MTBF) DB D clkA DA Flip-flop1Flip-flop2 clkB

Types of Synchronization Techniques  Case-1: When the width of asynchronous input pulse is greater than the clock period i.e. T async_in > T clock sync_out async_in clock q1 reset Flip-flop1Flip-flop2

Flip_flop2 latches the stable value of flip_flop1 (q1), thus delaying async_in by 3 clock cycles* Simulation Results Presence of Metastable State The flip flips get reset reset q1 async_in sync_out clock The reset is de-asserted async_in becomes high simultaneously with the posedge of the clock, thus violating the setup time Flip-flop1 enters metastability Flip-flop1 comes back to a stable state, latching async_in metastable not metastable Flip-flop1 gets a stable input at this (2 nd ) edge * As sync_out will be available to latch only at the next clock edge

Simulation Results (cont.) Absence of Metastable State The flip flips get reset The reset is de-asserted async_in becomes high before the posedge of the clock, thus meeting the setup time Flip-flop1 enters stable state latching async_in Flip_flop2 latches the stable value of flip_flop1 (q1), thus delaying async_in by 2 clock cycles reset q1 async_in sync_out clock

Types of Synchronization Techniques (cont.)  Case-2: When the width of asynchronous input pulse is less than the clock period i.e. T async_in < T clock sync_out clock q2 async_in Flip-flop2Flip-flop3Flip-flop1 q1 reset V DD

Sync_out becomes high after 2 clocks and causes flip-flop1 to reset Simulation Results Reset Sequence for the synchronization circuit reset q2 async_in sync_out clock q1 first_reset Flip-flop1 latches 1 Flip-flop1 gets a stable posedge of async_in

First-in First-out Memory (FIFO)  When the source clock is higher than the destination clock, loss of data can occur due to inability of the destination to sample at the source speed  How to avoid this?  Use handshake signals (i.e. supply data only when the destination is ready to receive e.g. master-slave protocol) Transfer rates are lower  High performance parallel interfaces between independent clock domains are implemented with first-in first-out memory called FIFO.

FIFO Features  A FIFO consists of block of memory and a controller that manages the traffic of data to and from the FIFO  A FIFO provides access to only one register cell at a time (not the entire array of registers)  A FIFO has two address pointers, one for writing to the next available cell, and another one for reading the next unread cell  The pointers for reading and writing are relocated dynamically as commands to read or write are received  A pointer is moved after each operation  A FIFO can receive data until it is full and can be read until it is empty

FIFO Features (cont.)  A FIFO has:  Separate address pointers and datapaths for reading and writing data  Status lines indicating the condition of the stack (full, almost full, empty etc.)  The input (write) and output (read) domains can be synchronized by two separate clocks, allowing the FIFO to act as a buffer between two clock domains  A FIFO can allow simultaneous reading and writing of data (however synchronization is necessary if read/write parts are different clock domains)  The write signal is synchronized to the read clock using clock synchronizers  FIFOs are usually implemented with dual-port RAMs with independent read- and write-address pointers and registered data ports (see

FIFO Structure FIFO Buffer stack_width -10 stack_height -1 0 data_in write_to_stack rst clk_write stack_half stack_empty stack_full data_out read_from_stack clk_read write_ptr read_ptr Input-output Ports Internal Signals

FIFO Model  Note: Prohibit write if the FIFO is full and Prohibit read if the FIFO is empty module FIFO_Buffer (clk, rst, write_to_stack, data_in, read_from_stack, data_out, stack_full, stack_half_full, stack_empty); parameter stack_width= 32; parameter stack_height= 8; parameter stack_ptr_width= 3; parameter HF_level= 4; input clk, rst, write_to_stack, read_from_stack; input [stack_width-1:0] data_in; output stack_full, stack_half_full, stack_empty; output [stack_width-1:0] data_out; reg [stack_ptr_width-1:0] read_ptr, write_ptr; reg [stack_ptr_width:0] ptr_gap; // Gap between the pointers reg [stack_width-1:0] data_out; reg [stack_width:0] stack [stack_height-1:0]; // stack status signals assign stack_full = (ptr_gap == stack_height); assign stack_half_full = (ptr_gap == HF_level); assign stack_empty = (ptr_gap == 0);

FIFO Model (cont.) (posedge clock or posedge reset) if (rst == 1) begin data_out <= 0; read_ptr <= 0; write_ptr <= 0; ptr_gap <= 0; begin else if (write_to_stack && (!read_from_stack) && (!stack_full)) begin stack [write_ptr] <= data_in; write_ptr <= write_ptr + 1; ptr_gap <= ptr_gap + 1; end else if ((!write_to_stack) && read_from_stack && (!stack_empty)) begin data_out <= stack[read_ptr]; read_ptr <= read_ptr + 1; ptr_gap <= ptr_gap - 1; end else if (write_to_stack && read_from_stack && stack_empty) begin stack [write_ptr] <= data_in; write_ptr <= write_ptr + 1; ptr_gap <= ptr_gap + 1; end

FIFO Model (cont.) else if (write_to_stack && read_from_stack && stack_full) begin data_out <= stack[read_ptr]; read_ptr <= read_ptr + 1; ptr_gap <= ptr_gap - 1; end else if (write_to_stack && read_from_stack && (!stack_empty) && (!stack_full)) begin stack [write_ptr] <= data_in; data_out <= stack[read_ptr]; write_ptr <= write_ptr + 1; read_ptr <= read_ptr + 1; end endmodule