有限状态机设计 课件

上传人:我*** 文档编号:142459509 上传时间:2020-08-19 格式:PPT 页数:39 大小:718KB
返回 下载 相关 举报
有限状态机设计 课件_第1页
第1页 / 共39页
有限状态机设计 课件_第2页
第2页 / 共39页
有限状态机设计 课件_第3页
第3页 / 共39页
有限状态机设计 课件_第4页
第4页 / 共39页
有限状态机设计 课件_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《有限状态机设计 课件》由会员分享,可在线阅读,更多相关《有限状态机设计 课件(39页珍藏版)》请在金锄头文库上搜索。

1、第8章 有限状态机设计,有限状态机 FSM(Finite State Machine) 适于数字系统的控制模块 常用case、if-else语句描述,可编程逻辑器件,第八章 有限状态机设计,教学重点,MOORE状态机 MEALY状态机 有限状态机的几种描述方式 有限状态机的状态编码,8.1 基于状态机的设计,构成 组合逻辑 状态译码、产生输出 时序逻辑 存储状态 分类 Moore 输出是现态的函数 Mealy 输出是现态和输入的函数,摩尔型(Moore)状态机,米里型(Mealy)状态机,Moore型状态图,现态,次态,Mealy型状态图,【例10.7】状态机设计举例 module FSM(

2、clk, clr, out, start, step2, step3 ); input clk, clr, start, step2, step3; output2:0 out; reg2:0 out; reg1:0 state, next_state; parameter state0 = 2b00, state1 = 2b01, / 状态编码 state2 = 2b11, state3 = 2b10; / 格雷码 always ( posedge clk or posedge clr ) begin if( clr ) state = state0; / 定义初态 else state =

3、 next_state; end,always ( state or start or step2 or step3 ) / 状态转换 begin case (state) state0: begin if( start ) next_state = state1; else next_state = state0; end state1: begin next_state = state2; end,state2: begin if( step2 ) next_state = state3; else next_state = state0;end state3: begin if( ste

4、p3 ) next_state = state0; else next_state = state3;end default:next_state = state0; endcase end,always ( state ) / 状态译码及输出 begin case( state ) state0:out = 3b001; state1:out = 3b010; state2:out = 3b100; state3:out = 3b111; default:out = 3b001; endcase end endmodule,(1)用三个过程描述:即现态(CS)、次态(NS)、输出逻辑(OL)

5、各用一个always过程描述。 (2)双过程描述(CS+NS、OL双过程描述):使用两个always过程来描述有限状态机,一个过程描述现态和次态时序逻辑(CS+NS);另一个过程描述输出逻辑(OL)。 (3)双过程描述(CS、NS+OL双过程描述):一个过程用来描述现态(CS);另一个过程描述次态和输出逻辑(NS+OL)。 (4)单过程描述:在单过程描述方式中,将状态机的现态、次态和输出逻辑(CS+NS+OL)放在一个always过程中进行描述。,8.2 有限状态机的几种描述方式,“101”序列检测器的Verilog描述(三个过程),module fsm1_seq101(clk,clr,x,z

6、); input clk,clr,x; output reg z; reg1:0 state,next_state; parameter S0=2b00,S1=2b01,S2=2b11,S3=2b10; /*状态编码,采用格雷(Gray)编码方式*/ always (posedge clk or posedge clr) /*该过程定义当前状态*/ beginif(clr) state=S0; /异步复位,s0为起始状态 else state=next_state; end always (state or x) /*该过程定义次态*/ begin case (state) S0:begin

7、if(x) next_state=S1; else next_state=S0; end S1:beginif(x) next_state=S1; else next_state=S2; end,S2:begin if(x) next_state=S3; else next_state=S0; end S3:beginif(x) next_state=S1; else next_state=S2; end default:next_state=S0; /*default语句*/ endcase end,always (state) /*该过程产生输出逻辑*/ begin case(state)

8、 S3: z=1b1; default:z=1b0; endcase end endmodule,“101”序列检测器的Verilog描述(三个过程),“101”序列检测器(单过程描述),module fsm4_seq101(clk,clr,x,z); input clk,clr,x; output reg z; reg1:0 state; parameter S0=2b00,S1=2b01,S2=2b11, S3=2b10;/*状态编码,采用格雷(Gray)编码方式*/ always (posedge clk or posedge clr) Begin if(clr) state=S0; /

9、异步复位,s0为起始状态 else case(state) S0:begin if(x) begin state=S1; z=1b0;end else begin state=S0; z=1b0;end end S1:begin if(x) begin state=S1; z=1b0;end else begin state=S2; z=1b0;end end S2:beginif(x) begin state=S3; z=1b0;end else begin state=S0; z=1b0;end end S3:begin if(x) begin state=S1; z=1b1;end el

10、se begin state=S2; z=1b1;end end default:begin state=S0; z=1b0;end /*default语句*/ endcase end endmodule,8.3 状 态 编 码, 顺序编码 格雷编码 约翰逊编码 一位热码,常用的编码方式,一位热码编码选择对话框(Quartus ),状态编码的定义,在Verilog语言中,有两种方式可用于定义状态编码,分别用parameter和define语句实现,比如要为state0、state1、state2、state3四个状态定义码字为:00、01、11、10,可采用下面两种方式。 方式1:用param

11、eter参数定义 parameter state1=2b00,state2=2b01,state3=2b11,state4=2b10; case(state) state1:; /调用 state2:; ,要注意两种方式定义与调用时的区别,一般情况下,更倾向于采用方式1来定义状态编码。一般使用case、casez和casex语句来描述状态之间的转换,用case语句表述比用if-else语句更清晰明了。,状态编码的定义方式2:用define语句定义 define state1 2b00 /不要加分号“;” define state2 2b01 define state3 2b11 define

12、state4 2b10 case(state) state1:; /调用,不要漏掉符号“” state2:; ,状态编码的定义,8.4 有限状态机设计要点,1起始状态的选择 : 起始状态是指电路复位后所处的状态,选择一个合理的起始状态将使整个系统简洁、高效。多数EDA软件会自动为基于状态机的设计选择一个最佳的起始状态。 2有限状态机的同步复位 3有限状态机的异步复位,多余状态的处理,一般有如下两种处理多余状态的方法: (1)在case语句中用default分支决定如果进入无效状态所采取的措施; (2)编写必要的Verilog源代码明确定义进入无效状态所采取的行为。,8.6.2 频率计控制器设计

13、举例,设计一个自动转换量程的频率计控制器,用Mealy状态机实现。,进入100K量程(状态A) reset = 1; std_f_sel = 00,100K量程测量(状态B) reset = 0; std_f_sel = 00,进入100K量程(状态C) reset = 1; std_f_sel = 01,100K量程测量(状态D) reset = 0; std_f_sel = 01,进入100K量程(状态E) reset = 1; std_f_sel = 11,1K量程测量(状态D) reset = 0; std_f_sel = 11,cntlow = 1,cntlow = 1,cntlow

14、 = 1,cntlow = 1,cntover = 1,cntover = 1,【例10.8】自动转换量程频率计控制器 /* 信号定义 clk: 时钟输入 reset: 系统复位信号 half_dollar: 投入5角硬币 one_dollar: 投入1元硬币 half_out: 找零信号 dispense: 机器售出饮料 collect: 提示取走饮料 */,module FSM( clk, clr, out, start, step2, step3 ); input clk, clr, start, step2, step3; output2:0 out; reg2:0 out; reg1

15、:0 state, next_state; parameter state0 = 2b00, state1 = 2b01, / 状态编码 state2 = 2b11, state3 = 2b10; / 格雷码 always ( posedge clk or posedge clr ) begin if( clr ) state = state0; / 定义初态 else state = next_state; end,always ( state or start or step2 or step3 ) / 状态转换 begin case (state) state0: begin if( s

16、tart ) next_state = state1; else next_state = state0; end state1: begin next_state = state2; end,state2: begin if( step2 ) next_state = state3; else next_state = state0;end state3: begin if( step3 ) next_state = state0; else next_state = state3;end default:next_state = state0; endcase end,always ( state ) / 状态译码及输出 begin case( state ) state0:out = 3b001; state1:out = 3b010;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号