您好,欢迎来到微智科技网。
搜索
您的当前位置:首页有限状态机的设计

有限状态机的设计

来源:微智科技网
有限状态机设计将对象(电路)的工作过程表达为:各种不同状态在事件控制下的变迁过程这种描述方法称为有限状态机(FSM)有限状态机:实例有限状态机:要素FSM包含1.一组状态集(states)、2.一个起始状态(start state)、3.一组输入符号集(input alphabet)、4.一组输出符号集(output alphabet )5.一组映射输入符号和当前状态到下一状态的转换函数(transition function)FSM的结构Current State RegisterNext State Logic:NS =f( PS, I ) Output LogicMoore状态机& Mealy状态机1.摩尔型(Moore)输出仅是当前状态的函数米里型(Mealy)输出信号是当前状态和当前输入信号的函数2.有限状态机模型输出在输入后立即变化,不依赖时钟信号的同步INPUTNEXT STATELOGICClockMealy型输出STATEMEMORYOUTPUTOUTPUTLOGICMoore型输出必须等待时钟信号的到来,当状态变化时才导致输出变化FSM的应用举例clkrst米里型状态机状态转移图01101识别11序列outdatain=0/out=0module exp(out, datain, clk, rst);input clk, rst, datain;rst=1output out; regout;0regstate,next_state;状态变量always @(posedgeclkor posedgerst)begindatain=1/out=0if(rst) state<=1’b0;else state<=next_state;end1always @(state or datain)begincase(state)1’b0: beginout=1’b0;datain=0/out=0case语句datain=1/out=1If(!datain) next_state=1’b0;else next_state=1’b1;end1’b1 : beginout=datain; If(!datain) next_state=1’b0;else next_state=1’b1;enddefault: {next_state, out}=2’b00;endcaseendmodule必须规定状态变量,用来定义状态机的状态。必须有初态处理和默认状态处理要改变当前的状态,必须改变状态变量的值,状态变量的值的改变要与时钟沿同步。下一个状态默认状态改写为摩尔状态机datain=0rst=10out=0datain=0datain=11out=0datain=0datain=12out=1datain=1改写为摩尔状态机module exp(out, datain, clk, rst);input clk, rst, datain;output out;regout;reg[1:0] state,next_state;always@(posedgeclkor posedgerst)beginif(rst) state<=2’b0;else state<=next_state;endalways@(stateor datain)begincase(state)2’b00: beginout=1’b0;if(!datain) next_state=2’b00;else next_state=2’b01;end2’b01 : beginout=1’b0;if(datain) next_state=2’b10;else next_state=2’b00;end2’b10 : beginout=1’b1;if(!datain) next_state=2’b00;else next_state=2’b10;enddefault: {next_state,out}=3’b000;endcaseendendmodule对比datain=0rst=10out=0datain=0datain=11out=0datain=0datain=12out=1datain=1状态机设计应注意的问题1、起始状态的选择起始状态是指电路复位后所处的状态,选择一个合理的起始状态将使整个系统简洁高效。有的EDA软件会自动为基于状态机的设计选择一个最佳的起始状态。2、状态编码最常用的有三种编码方式:state0, state1, state2, state3二进制00,01,10,11格雷码Gray00,01,11,10独热编码One-hot0001,0010,0100,1000CPLD使用Gray状态码,FPGA使用one-hot编码3、状态编码的定义直接使用整数编码描述利用‘define定义利用parameter声明reg[1:0] casecase(state)0: ……1: …………endcase……不要漏掉符号“'”`define S0 2’b00;`define S1 2’b01;case(state)`S0: ….;`S1: ….;module MealyFSM(clk,reset,a,y);reg[1:0] state;Parameter S0=2’d0,S1=2’d1,S2=2’d2,S3=2’d3;……always@(stateor a)case(state)倾向采用,S0: ……可读性好,S1: ……方便!S2: …………endcase…….endmodule4、状态转换的描述一般使用case语句来描述状态之间的转换,用case语句表述比用if-else语句更清晰明了。case语句最后要加上default避免锁存器的产生作业实验四

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务