《Verilog-有限状态机设计说明课件.ppt》由会员分享,可在线阅读,更多相关《Verilog-有限状态机设计说明课件.ppt(37页珍藏版)》请在三一办公上搜索。
1、第八章 有限状态机设计,EDA技术与应用,第八章 有限状态机设计EDA技术与应用,教学重点,MOORE状态机 MEALY状态机 有限状态机的几种描述方式 有限状态机的状态编码,教学重点 MOORE状态机,8.1 有限状态机,构成 组合逻辑 状态译码、产生输出 时序逻辑 存储状态 分类Moore 输出是现态的函数Mealy 输出是现态和输入的函数,8.1 有限状态机 构成,摩尔型(Moore)状态机,米里型(Mealy)状态机,摩尔型(Moore)状态机 米里型(Mealy)状态机,Moore型状态图,现态,次态,输入 / 输出,Moore型状态图现态次态输入 / 输出,module fsm(c
2、lk,clr,z,qout);/模5计数器input clk,clr; output reg z; output reg2:0 qout;always (posedge clk or posedge clr) /此过程定义状态转换 begin if(clr) qout=0; /异步复位 else case(qout)3b000: qout=3b001;3b001: qout=3b010;3b010: qout=3b011;3b011: qout=3b100;3b100: qout=3b000;default: qout=3b000;/*default语句*/ endcase endalways
3、 (qout) /*此过程产生输出逻辑*/ begin case(qout)3b100: z=1b1;default:z=1b0; endcase endendmodule,module fsm(clk,clr,z,qout);/模,Mealy型状态图,start = 0,step3 = 0,State2out = 100,step3 = 1,step2 = 0,Mealy型状态图start = 0State0clr =,【例10.7】状态机设计举例module FSM( clk, clr, out, start, step2, step3 );input clk, clr, start, s
4、tep2, 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 )beginif( clr ) state = state0; / 定义初态else state = next_state;end,【例10.7】状态机设计举例,always ( state or start or step2 or ste
5、p3 ) / 状态转换begin case (state)state0: beginif( start ) next_state = state1;else next_state = state0;endstate1:beginnext_state = state2;end,always ( state or start or st,state2:beginif( step2 ) next_state = state3;else next_state = state0;endstate3:beginif( step3 ) next_state = state0;else next_state
6、= state3;enddefault:next_state = state0; endcaseend,state2:,always ( state ) / 状态译码及输出begincase( state )state0:out = 3b001;state1:out = 3b010;state2:out = 3b100;state3:out = 3b111;default:out = 3b001;endcaseendendmodule,always ( state ) / 状态译码及输出,(1)用三个过程描述:即现态(CS)、次态(NS)、输出逻辑(OL)各用一个always过程描述。(2)双
7、过程描述(CS+NS、OL双过程描述):使用两个always过程来描述有限状态机,一个过程描述现态和次态时序逻辑(CS+NS);另一个过程描述输出逻辑(OL)。(3)双过程描述(CS、NS+OL双过程描述):一个过程用来描述现态(CS);另一个过程描述次态和输出逻辑(NS+OL)。(4)单过程描述:在单过程描述方式中,将状态机的现态、次态和输出逻辑(CS+NS+OL)放在一个always过程中进行描述。,8.2 有限状态机的Verilog描述,(1)用三个过程描述:即现态(CS)、次态(NS)、输出逻辑,“101”序列检测器的Verilog描述(三个过程),module fsm1_seq101
8、(clk,clr,x,z);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,“101”序列检测器的Verilog描述(三个过程) mod,“101”序列检测器的Verilog描述(三个
9、过程),always (state or x) /*该过程定义次态*/begincase (state)S0:begin if(x) next_state=S1; else next_state=S0; endS1:beginif(x) next_state=S1; else next_state=S2; end,“101”序列检测器的Verilog描述(三个过程) alw,S2:beginif(x) next_state=S3;else next_state=S0; endS3:beginif(x) next_state=S1;else next_state=S2; enddefault:n
10、ext_state=S0; /*default语句*/endcaseend,always (state) /*该过程产生输出逻辑*/ begin case(state)S3: z=1b1;default:z=1b0; endcase endendmodule,“101”序列检测器的Verilog描述(三个过程),S2:beginalways (state) “101”序,“101”序列检测器(单过程描述),module fsm4_seq101(clk,clr,x,z);input clk,clr,x;output reg z; reg1:0 state;parameter S0=2b00,S1
11、=2b01,S2=2b11,S3=2b10;/*状态编码,采用格雷(Gray)编码方式*/,“101”序列检测器(单过程描述) module fsm4_,“101”序列检测器(单过程描述),always (posedge clk or posedge clr)Begin if(clr) state=S0; /异步复位,s0为起始状态else case(state)S0:begin if(x) begin state=S1; z=1b0;endelse begin state=S0; z=1b0;end endS1:begin if(x) begin state=S1; z=1b0;endels
12、e begin state=S2; z=1b0;end endS2:beginif(x) begin state=S3; z=1b0;endelse begin state=S0; z=1b0;end endS3:begin if(x) begin state=S1; z=1b1;endelse begin state=S2; z=1b1;end enddefault:begin state=S0; z=1b0;end /*default语句*/endcaseendendmodule,“101”序列检测器(单过程描述) always (pos,8.3 状 态 编 码, 顺序编码 格雷编码 约翰
13、逊编码一位热码,常用的编码方式,8.3 状 态 编 码 顺序编码常用的编码方式,一位热码编码选择对话框(Quartus ),一位热码编码选择对话框(Quartus ),状态编码的定义,在Verilog语言中,有两种方式可用于定义状态编码,分别用parameter和define语句实现,比如要为state0、state1、state2、state3四个状态定义码字为:00、01、11、10,可采用下面两种方式。方式1:用parameter参数定义 parameter state1=2b00,state2=2b01,state3=2b11,state4=2b10; case(state) stat
14、e1:; /调用 state2:; ,状态编码的定义在Verilog语言中,有两种方式可用于定义状,要注意两种方式定义与调用时的区别,一般情况下,更倾向于采用方式1来定义状态编码。一般使用case、casez和casex语句来描述状态之间的转换,用case语句表述比用if-else语句更清晰明了。,状态编码的定义方式2:用define语句定义define state1 2b00 /不要加分号“;”define state2 2b01define state3 2b11define state4 2b10case(state)state1:; /调用,不要漏掉符号“”state2:;,状态编码的
15、定义,要注意两种方式定义与调用时的区别,一般情况下,更倾向于采用方,8.4 有限状态机设计要点,1起始状态的选择 : 起始状态是指电路复位后所处的状态,选择一个合理的起始状态将使整个系统简洁、高效。多数EDA软件会自动为基于状态机的设计选择一个最佳的起始状态。2有限状态机的同步复位 3有限状态机的异步复位,8.4 有限状态机设计要点1起始状态的选择 :,多余状态的处理,一般有如下两种处理多余状态的方法:(1)在case语句中用default分支决定如果进入无效状态所采取的措施;(2)编写必要的Verilog源代码明确定义进入无效状态所采取的行为。,多余状态的处理一般有如下两种处理多余状态的方法
16、:,频率计控制器设计举例,设计一个自动转换量程的频率计控制器,用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,
17、cntlow = 1,cntlow = 1,cntlow = 1,cntlow = 1,cntover = 1,cntover = 1,进入100K量程(状态A)100K量程测量(状态B)进入10,【例10.8】自动转换量程频率计控制器/* 信号定义clk: 时钟输入reset: 系统复位信号half_dollar: 投入5角硬币one_dollar: 投入1元硬币half_out: 找零信号dispense: 机器售出饮料collect: 提示取走饮料 */,【例10.8】自动转换量程频率计控制器,module FSM( clk, clr, out, start, step2, step3
18、);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 )beginif( clr ) state = state0; / 定义初态else state = next_state;end,module FSM( clk, clr, out, s
19、ta,always ( state or start or step2 or step3 ) / 状态转换begin case (state)state0: beginif( start ) next_state = state1;else next_state = state0;endstate1:beginnext_state = state2;end,always ( state or start or st,state2:beginif( step2 ) next_state = state3;else next_state = state0;endstate3:beginif( st
20、ep3 ) next_state = state0;else next_state = state3;enddefault:next_state = state0; endcaseend,state2:,always ( state ) / 状态译码及输出begincase( state )state0:out = 3b001;state1:out = 3b010;state2:out = 3b100;state3:out = 3b111;default:out = 3b001;endcaseendendmodule,always ( state ) / 状态译码及输出,对A/D器件进行采样控
21、制,用单片机完成编程简单,控制灵活,但控制周期长,速度慢。 使用FPGA的状态机来控制A/D采样,可以充分发挥高速采样的特性。,状态机设计举例:数字电压表,对A/D器件进行采样控制,用单片机完成编程简单,1. ADC0809引脚,1. ADC0809引脚,2. ADC0809工作时序,2. ADC0809工作时序,3. 控制ADC0809采样状态图,3. 控制ADC0809采样状态图,将状态码直接输出作为控制信号,每一位的编码值都赋予了实际的控制功能。,状态位直接输出型编码,ADC0809采样控制信号状态编码表,将状态码直接输出作为控制信号,每一位的编码值都赋,4. 采样状态机结构,4. 采样状态机结构,知识回顾Knowledge Review,祝您成功!,知识回顾Knowledge Review祝您成功!,