当前位置:文档之家› PLD第8章 有限状态机的设计

PLD第8章 有限状态机的设计


有限状态机设计要点 1、起始状态的选择
起始状态是指电路复位后所处的状态,选择一个合理的起始 状态将使整个系统简洁高效。
有限状态机设计要点 有限状态机的复位
2.同步复位 3.异步复位
状态转换的描述
一般使用case语句来描述状态之间的转换 ,用case语句表述比用if-else语句更清 晰明了。 case语句最后要加上default避免锁存器 的产生
作业

实验四
状态编码的定义

直接使用整数编码描述 利用‘define定义 利用parameter声明
reg [1:0] case case(state) case(state) 0: …… 1: …… …… endcase …… 不要漏掉符号“'” `define S0 2’b00; 2’ `define S1 2’b01; 2’ case(state) case(state) `S0: ….; `S1: ….; module MealyFSM(clk,reset,a,y); MealyFSM( clk,reset,a,y); reg[1:0] state; Parameter S0=2’d0,S1=2’d1,S2=2’d2,S3=2’d3; S0=2’ d0,S1=2’ d1,S2=2’ d2,S3=2’ …… always@(state or a) case(state) case(state) 倾向采用, S0: …… 可读性好, S1: …… 方便! S2: …… …… endcase ……. ……. endmodule
有限状态机设计
将对象(电路)的工作过程表达为:
各种不同状态 在 事件控制下 的变迁过程
这种描述方法称为有限状态机(FSM)
有限状态机:实例
有限状态机:要素
FSM包含 1. 一组状态集(states)、 2. 一个起始状态(start state)、 3. 一组输入符号集(input alphabet)、 4. 一组输出符号集(output alphabet ) 5. 一组映射输入符号和当前状态到下一状 态的转换函数(transition function)
对比
0/0
rst=1 S0
1/0
0/0
S1
1/1
8.3 状态编码
最常用的有四种编码方式: state0, state1, state2, state3 二进制 00, 01, 10, 11 格雷码 Gray 00, 01, 11, 10 约翰逊编码 000, 001, 011, 111 一位热码One-hot 0001,0010, 0100,1000 CPLD适合使用Gray状态码,FPGA适合使用one-hot 编码
2.
有限状态机模型
输出在输入后立即变化,不依赖时钟信号的同步 输入 次态逻辑
组合逻辑
Mealy 型输出
现态
时序逻辑
输出逻辑
输出
时钟
Moore型 输出
必须等待时钟信号的到来,当状态变化时才导致输出变化
8.2 有限状态机的几种描述方式
(1)用三个过程描述:即现态(CS)、次态(NS)、 输出逻辑(OL)各用一个always过程描述。 (2)双过程描述(CS+NS、OL双过程描述):使用两 个always过程来描述有限状态机,一个过程描述现态和次 态时序逻辑(CS+NS);另一个过程描述输出逻辑(OL)。 (3)双过程描述(CS、NS+OL双过程描述):一个过 程用来描述现态(CS);另一个过程描述次态和输出逻辑 (NS+OL)。 (4)单过程描述:在单过程描述方式中,将状态机的现 态、次态和输出逻辑(CS+NS+OL)放在一个always过程 中进行描述。
FSM的应用举例
clk rst
01101
识别11序列
out
米里型状态机状态转移图
0/0
module exp(out, datain, clk, rst); input clk, rst, datain; output out; reg out; 状态变量 reg state,next_state; parameter S0=1'b0, S1=1'b1; always @(posedge clk or posedge rst) begin if(rst) state<=S0; else state<=next_state; end always @(state or datain) begin case语句 case(state) S0: begin
rst=1 S0
1/0
0/0
S1
1/1
If(!datain) begin next_state=S0; out=1’b0; end else begin next_state=S1; ; out=1’b0; end end S1 : begin If(!datain) begin next_state=S0; out=1’b0; end else begin next_state=S1;out=1’b1; end 下一个状态 end default: begin 默认状态 out= 1’b0; next_state=S0; endcase endmodule 必须规定状态变量,用来定义状态机的状态。 必须有初态处理和默认状态处理 要改变当前的状态,必须改变状态变量的值,状态变量的值的改变要与 时钟沿同步。

改写为摩尔状态机
0/ rst=1 S0/0 1/ S1/0 0/ 1/ S2/1 0/
1/
改写为摩尔状态机
module exp(out, datain, clk, rst); input clk, rst, datain; output out; reg out; reg[1:0] state,next_state; out=1’b0; if(datain) next_state=S2; else next_state=S0; parameter S0=2'b00, S1=2'b01, S2=2'b10; always@(posedge clk or posedge rst) end begin S2 : begin if(rst) state<=S0; out=1’b1; else state<=next_state; if(!datain) end next_state=S0; else next_state=S2; always@(state or datain) end begin case(state) default: S0: begin begin out=1’b0; out=1’b0; if(!datain) next_state=S0; next_state=S0; end else endcase next_state=S1; end end endmodule S1 : begin
FSM的结构

Current State Register Next State Logic: NS = f( PS, I ) Output Logic
Moore状态机 &a当前状态 的函数 米里型(Mealy) 输出信号是 当前状态 和 当前输入信号 的函数
相关主题