有限状态机的设计

合集下载

第八次课-8章状态机精选全文

第八次课-8章状态机精选全文
state<=s0; endcase end endmodule
z<=0;
三、基于状态机的设计要点
1.起始状态的选择
起始状态是指电路复位后所处的状态,选择一 个合理的起始状态将使整个系统简洁高效。有的 EDA软件会自动为基于状态机的设计选择一个最佳 的起始状态。
2.状态转换的描述
一般使用case语句来描述状态之间的转换, 用case语句表述比用if-else语句更清晰明了。
有限状态机类型 有限状态机的Verilog描述 有限状态机的设计要点
一、两种有限状态机
二、有限状态机的Verilog描述
描述对象:
当前状态、下一状态、输出逻辑
描述方式: 单过程、双过程、三过程
单过程描述方式: 放在一个过程中描述,相当于采用时
钟信号同步,克服输出产生毛刺。但输出 逻辑相对于双过程,要延迟一个时钟周期。
end end
s3: begin if(x==0)
begin state<=s0; z<=0;
end else begin
state<=s4; z<=1; end end
s4: begin if(x==0)
begin state<=s0; end else begin state<=s4; z<=1; end end default:
双过程描述方式: 一个过程 由时钟信号触发的时序过程
(当时钟发生跳变时,状态机状态发生变 化。一般用case语句检查状态机的当前状态; 另一过程是组合过程,对于摩尔型,输出 只与当前状态有关,因此只需用case语句即 可,对米里型,因与当前状态和输入都有 关,因此可用case 语句和 if组合进行描述。

06 第六讲 有限状态机设计(新版)

06  第六讲 有限状态机设计(新版)

cola_out
40
y1_out
自动售货机状态转移图
自动机的状态转移图看似复杂,却非常有规律。 其中每个状态表示了当前已经投入的金额,其 中5表示已经投入5角,10表示已经投入1元等 等。其中系统复位后的初始状态为0,表示未 有钱币投入。
自动售货机状态转移图
对于从0到20的五个状态,由于已经投入的钱 币还没有达到2.5元,因此系统还能接收新的 钱币。所以,这些状态的输出均有3条不同的 路径。 以状态20为例,此时已经接收了2元,如果继 续投入5角则进入25状态,表示接收了2.5元; 如果继续投入1元则进入35状态,表示已经接 收了3.5元;如果继续投入2元,则进入40状态, 表示已经接收了4元。
第六讲 有限状态机设计
提纲
序列检测器设计 自动售货机设计
序列检测器设计
序列检测器是时序逻辑中的经典问题。 序列检测器一般有一个输入X和一个输出 Match。输入信号在不断变化,从而形成一个 与时间相关的输入序列。序列检测器的任务就 是当输入序列中包含特定串时,设置Match信 号为高,表示检测到了特定串。 本设计中需要检测的序列为”01011”。
自动售货机总体结构和状态转移图
j5 y1 y2
自动售 货机
Cola_out y1_out j5_out
clk rst
rst j5 y2
y1 1
y1 1
y1 1
y1 1
0
5 y2
j5
10
j5
15
j5
20
j5
25
y2 y1_out+cola_out j5_out+cola_out 30 35
y2
y1
y2
在如S4状态,如果进入S4状态表示前面的输 入序列为”0101”,若当前输入为0,则表示输 入序列为”01010”,与待检测序列”01011比 Байду номын сангаас,可以发现实际输入了”010”,因此应该转 移到S3状态。

有限状态机设计

有限状态机设计

实验七有限状态机设计一、实验目的1、掌握利用有限状态机实现一般时序逻辑分析的方法;2、掌握用VHDL或Verilog编写可综合的有限状态机的标准模板;3、掌握用VHDL或Verilog编写序列检测器以及其他复杂逻辑电路的设计;二、实验内容1、用MOORE型状态机设计一个具有双向步进电动机控制实验:该控制电路有三个输入信号:clk时钟信号,clr复位信号,dir方向控制信号。

输出信号为phase[3..0]用来控制步进电机的动作。

当dir=1时要求phase[3..0]按照“0001”,“0010”,“0100”,“1000”的顺序变化;当dir=0时要求phase[3..0]按照“0001”,“1000”,“0100”,“0010”的顺序变化。

2、设计一个简单的状态机,功能是检测一个5位的二进制序列“10010”。

3、设计一个串行数据检测器,要求是:连续4个或4个以上为1时输出为1,其他输入情况为0。

(选做)4、根据状态图,写出对应于结构图b,分别由主控组合进程和主控时序进程组成的VERILOG 有限状态机描述。

(选做)三、实验步骤实验一:1、建立工程2、创建Verilog HDL文件3、输入程序代码并保存module moore1(clk,clr,dir,phase);input clk,clr,dir;output[3:0] phase;reg[3:0] phase;reg[1:0] state;parameter s0='b00,s1='b01,s2='b10,s3='b11;always@(posedge clk)beginif(clr)beginphase<='b0000;state<=s0;endelsebegincase(state)s0:if(dir) beginphase<='b0010;state<=s1;endelsebeginphase<='b1000;state<=s3;ends1:if(dir) beginphase<='b0100;state<=s2;endelse beginphase<='b0001;state<=s0;ends2:if(dir) beginphase<='b1000;state<=s3;endelse beginphase<='b0010;state<=s1;ends3:if(dir) beginphase<='b0001;state<=s0;endelse beginphase<='b0100;state<=s2;endendcaseendendendmodule4、进行综合编译5、新建波形文件6、导入引脚,设置信号源并保存7、功能仿真,结果分析由仿真波形图可以看出当dir=1时,phase[3..0]按照0001,0010,0100,1000的顺序变化,当dir=0时phase[3..0]按照0001,1000,0100,0010的顺序变化。

Verilog学习----有限状态机的设计的一般步骤

Verilog学习----有限状态机的设计的一般步骤

Verilog学习----有限状态机的设计的⼀般步骤有限状态机的设计的⼀般步骤:(1)逻辑抽象,得出状态转换图。

就是把给出的⼀个实际逻辑关系表⽰为时序逻辑函数,可以⽤状态转换表来描述,也可以⽤状态转换图来描述。

这就需要:1)分析给定的逻辑问题,确定输⼊变量、输出变量以及电路的状态数。

通常是取原因(或条件)作为输⼊变量,取结果作为输出变量。

2)定义输⼊、输出逻辑状态的含意,并将电路状态顺序编号。

3)按照要求列出电路的状态转化表或画出状态图。

这样,就把给定的逻辑问题抽象到⼀个时序逻辑函数了。

(2)状态简化。

如果在状态转换图中出现这样两个状态,它们在相同的的输⼊下转换到同⼀状态去,并得到⼀样的输出,则称为等价状态。

显然等价状态是重复的,可以合并为⼀个。

电路的状态数越少,存储电路也就越简单。

状态化简的⽬的就在于将等价状态尽可能地合并,以得到最简状态图。

(3)状态分配。

状态分配⼜称状态编码。

通常有很多编码⽅法,编码⽅案选择得当,设计的电路可以简单,反之,选择的不好,则设计的电路就会复杂的多。

在实际设计中,须综合考虑电路的复杂度与电路性能之间的折衷。

在触发器资源丰富的FPGA设计中,采⽤独热码既可以使电路性能得到保障⼜可以充分利⽤其触发器数量多的优势,也可以采⽤输出编码的状态指定来简化电路结构,并提⾼状态机的运⾏速度。

(4)选定触发器的类型并求出状态⽅程、驱动⽅程和输出⽅程。

(5)按照⽅程得出逻辑图。

⽤Verilog来描述有限状态机,可以充分发挥硬件描述语⾔的抽象建模能⼒,使⽤always块语句和case(if)等条件语句及赋值语句即可⽅便实现。

verilog有限状态机的设计

verilog有限状态机的设计



8
8.5 设计一个汽车尾灯控制电路。已知汽车左右两侧各 有3个尾灯,要求控制尾灯按如下规则亮灭。 (1)汽车沿直线行驶时,两侧的指示灯全灭; (2)右转弯时,左侧的指示灯全灭,右侧的指示灯按 000,100,010,001,000循环顺序点亮; (3)左转弯时,右侧的指示灯全灭,左侧的指示灯按与 右侧同样的循环顺序点亮; (4)如果在直行时刹车,两侧的指示灯全亮;如果在转 弯时刹车,转弯这一侧的指示灯按上述的循环顺序点 亮,另一侧的指示灯全亮。
always @(state) /*该过程产生输出逻辑*/ begin case(state) S3: z=1'b1; default:z=1'b0; endcase end endmodule
“101”序列检测器(单过程描述)
module fsm4_seq101(clk,clr,x,z); input clk,clr,x; output reg z; reg[1:0] state; parameter S0=2'b00,S1=2'b01,S2=2'b11,S3=2'b10; /*状态编码,采用格雷(Gray)编码方式*/ always @(posedge clk or posedge clr) Begin if(clr) state<=S0; //异步复位,s0为起始状态 else case(state) S0:begin if(x) begin state<=S1; z=1'b0;end else begin state<=S0; z=1'b0;end end S1:begin if(x) begin state<=S1; z=1'b0;end else begin state<=S2; z=1'b0;end end S2:begin if(x) begin state<=S3; z=1'b0;end else begin state<=S0; z=1'b0;end end S3:begin if(x) begin state<=S1; z=1'b1;end else begin state<=S2; z=1'b1;end end default:begin state<=S0; z=1'b0;end /*default语句*/ endcase end endmodule

第7章 有限状态机设计

第7章 有限状态机设计

7.2 一般状态机的设计 一、 状态机建立的一般步骤
利用VHDL来设计状态机的一般步骤如下: 来设计状态机的一般步骤如下: 利用 来设计状态机的一般步骤如下 (1) 利用自定义枚举类型定义状态空间: 利用自定义枚举类型定义状态空间: TYPE state_space IS (idle,decision,read,write); SIGNAL Current_State,next_state: state_space; 状态名最好具有明显的解释性意义
process(clk) --主控时序进程 主控时序进程 begin if clk'event and clk='1' then current_state<=next_state; end if; end process; process(lock) --输出进程 输出进程 begin if lock'event and lock='1' then reg8b<=d; end if; end process; q<=reg8b; end behav;
ready Read_write
Oe(读信号) (读信号)
存储器控 制器
We(写信号) (写信号)
存储控制器状态转移图和真值表分别如下: 存储控制器状态转移图和真值表分别如下:
idle ready 空闲( 空闲(idle) ) ready decision ready write_read 判断 (decision) ) 写(write) ) read 读(read) ) 0 0 1 0 1 0 /ready 输出 状态 Oe(读) ( 0 We(写) ( 0
(3) 建立状态机主控时序进程
状态机是同步时序电路, 状态机是同步时序电路,必须包含一个对工作时钟信号敏 感的进程,作为状态机的“驱动泵” 感的进程,作为状态机的“驱动泵”。当时钟发生有效跳 变时,状态机的状态才发生变化。 变时,状态机的状态才发生变化。状态机的主控时序进程 主要负责将主控时序进程得到的下一个状态锁存到状态寄 存器中。如: 存器中。

有限状态机设计

有限状态机设计

ENTITY AD574 IS
PORT (
d:
IN STD_LOGIC_VECTOR(11 DOWNTO 0);
clk,status :
IN STD_LOGIC; --时钟CLK,状态信号STATUS
lock0 :
OUT STD_LOGIC; --内部锁存信号LOCK旳测试信号
cs,a0,rc,k12x8 : OUT STD_LOGIC; --AD574控制信号
决定进入下一种状态。
(if - then - else)
二、一般有限状态机旳设计
6.2.1 一般有限状态机构成
4. 辅助进程:
clk reset State_inputs
状态机 Current_state
Next_state
一般状态机工作示意图
Comb_output
二、一般有限状态机旳设计
【例 6-1 】一般两进程有限状态机描述
下一状态 输出
001
0
000
0


状态机旳表达措施2
措施二:算法流程图 措施与软件程序旳流程图类似
状态机旳表达措施3
措施三:状态转换图 条件控制
定序
状态1


/出
状态4
/出


状态3
/出
状态2
/出
Moore
直接控制 定序
状态机旳表达措施3
措施三:状态转换图 条件控制
定序
状态1
入 /出
入 /出
状态4
工作状态
禁止
禁止
开启12位转换 开启8位转换 12位并行输出有效 高8位并行输出有效 低4位加上尾随4个0有效

《FPGA系统设计》实验报告》有限状态机的设计

《FPGA系统设计》实验报告》有限状态机的设计

《FPGA系统设计》实验报告》有限状态机的设计一、设计任务了解有限状态机的概念;掌握Moore型有限状态机的特点和其VHDL语言的描述方法掌握Mealy型有限状态机的特点和其VHDL语言的描述方法二、设计过程1.单进程Moore型有限状态机程序代码这是一个单进程的Moore状态机, 其特点是组合进程和时序进程在同一个进程中, 此进程可以认为是一个混合进程。

2.该状态机时一个2进程Mealy型状态机, 进程COMREG是时序与组合混合型进程;进程COM1负责根据状态和输入信号给出不同的输出信号。

library ieee;use ieee.std_logic_1164.all;entity MEALY1 isport(clk,datain,reset : in std_logic;q : out std_logic_vector(4 downto 0));end MEALY1;architecture one of MEALY1 istype states is (st0,st1,st2,st3,st4);signal stx : states;begincomreg : process(clk,reset,datain,stx) --主控时序进程beginif reset = '1' then stx <= st0;elsif clk'event and clk = '1' thencase stx iswhen st0 => if datain = '1' then stx <= st1;end if;when st1 => if datain = '0' then stx <= st2;end if;when st2 => if datain = '1' then stx <= st3;end if;when st3 => if datain = '0' then stx <= st4;end if;when st4 => if datain = '1' then stx <= st0;end if;when others => stx <= st0;end case;end if;end process comreg;com1 : process(stx,datain) --主控组合进程begincase stx iswhen st0 => if datain = '1' then q <= "10000"; else q <= "01010"; end if;when st1 => if datain = '0' then q <= "10111"; else q <= "10100"; end if;when st2 => if datain = '1' then q <= "10101"; else q <= "10011"; end if;when st3 => if datain = '0' then q <= "11011"; else q <= "01001"; end if;when st4 => if datain = '1' then q <= "11101"; else q <= "01101"; end if;when others => q <= "00000";end case;end process com1;end one;3.该状态机属于Moore型状态机, 由两个主控进程构成, 其中进程REG是主控时序进程, COM是主控组合进程。

第6章有限状态机设计

第6章有限状态机设计
一、概述
第6章 有限状态机设计
VHDL综合器易于优化 易构成性能良好的时序逻辑模块 结构模式简单、层次分明、易读易懂、易排错 利用同步时序和全局时钟线可实现高速FSM 运行模式类似于CPU,易于进行顺序控制 高可靠性,非法状态易控制
二、一般有限状态机的设计
1、一般有限状态机的组成
3 一位热码编码
一位热码编码方式就是用 n 个触发器来实现具有 n个状态的状态机, 状态机中的每一个状态都由其中一个触发器的状态表示,即当处于 某状态时,对应的触发器为‘1’,其余的触发器都置‘0’。一位热码 编码方式尽管用了较多的触发器,但其简单的编码方式大为简化了 状态译码逻辑,提高了状态转换速度,这对于含有较多的时序逻辑 资源,较少的组合逻辑资源的FPGA器件是好的解决方案。
END mealy1;
ARCHITECTURE behave OF mealy1 IS
TYPE states (st0,st1,st2,st3,st4);
SIGNAL stx: states; BEGIN
IS
WHEN OTHERS =>stx<=st0;
END CASE;;
comreg: PROCESS(clk,reset) --决定转换状态的进程
END IF; END PROCESS; --由current_state 将当前状态值带出此进程,进入进 程COM COM:PROCESS(current_state,state_i nputs) --组合逻辑进程 BEGIN CASE current_state IS --确定当前状态的状态值 WHEN st0=>comb_outputs<="00"; --初始态译码输出 IF state_inputs="00" THEN --根据外部的状态控制输入“00” next_state<=st0; --在下一时钟后,进程REG的状态 维持为st0 ELSE next_state<=st1; --否则,在下一时钟后,进程REG 的状态将为st1 END IF;

有限状态机(FSM)的设计

有限状态机(FSM)的设计
有限状态机FSM 简称状态机) VHDL设计 FSM( 第4章 有限状态机FSM(简称状态机)的VHDL设计 一、有限状态机的基本概念 1、有限状态机的基本结构和功 能 有限状态机( 有限状态机(Finite Machine,简称FSM FSM) State Machine,简称FSM)是 一种十分重要的时序逻辑电路, 一种十分重要的时序逻辑电路, 由状态寄存器和组合逻辑电路 组成, 组成,是数字逻辑电路以及数 次态组合 字系统的重要组成部分, 字系统的重要组成部分,尤其 输出组合 逻辑电路 应用于数字系统核心部件( 应用于数字系统核心部件(控 逻辑电路 输 制单元)的设计, 制单元)的设计,以实现高效 输入 状态 出 输出 率高可靠性的逻辑控制。 率高可靠性的逻辑控制。 状态 状态 译 译码器 寄存器 有限状态机可实现以下两种基本操作: 有限状态机可实现以下两种基本操作: 码 反馈 器 (1)状态机内部状态转换。由状态译 )状态机内部状态转换。 码器根据当前状态和输入信号确定。 码器根据当前状态和输入信号确定。 状态机结构示意图 (2)产生输出信号序列。由输出译码 )产生输出信号序列。 器根据状态机当前状态和输入信号确定。 器根据状态机当前状态和输入信号确定。
SIGNAL CS,NS: STATE_TYPE; BEGIN REG:PROCESS(CLK,RESET) BEGIN IF RESET=‘0’ THEN CS<=S0; THEN CS<=NS; --寄存器进程 --寄存器进程
ELSIF END
CLK'EVENT AND CLK='1‘
IF;
END PROCESS; FUNC1:PROCESS(INPUT,CS) BEGIN CASE CS IS WHEN S0=>IF INPUT ELSE END IF; WHEN S1=>IF INPUT ELSE END IF; WHEN S2=>IF INPUT ELSE END IF; WHEN S3=>IF INPUT ELSE END IF; --次态组合逻辑译码进程 --次态组合逻辑译码进程

有限状态机设计与化简

有限状态机设计与化简

有限状态机设计与化简
在设计和实现有限状态机时,我们经常遇到的一个问题是状态机可能会变得复杂和冗长,导致难以管理和维护。

因此,我们需要一个方法来对有限状态机进行化简,以简化设计和提高可读性。

1.确定状态集合:首先,我们需要明确系统中可能的所有状态。

这些状态应该能够完整地描述系统的行为和状态。

2.确定输入符号集合:然后,我们需要确定能够影响状态转移的所有输入符号。

3.确定输出符号集合:接下来,我们需要确定状态机可以产生的所有输出符号。

4.确定转移函数:转移函数定义了从一个状态到另一个状态的转移条件。

我们需要根据系统要求确定转移函数的具体形式和条件。

5.绘制状态转移图:借助状态转移图,我们可以直观地表示状态之间的转移关系。

图中的节点表示状态,边表示状态之间的转移,边上的标记表示触发该转移的输入符号。

6.确定等价状态:等价状态是指在任何输入序列下,状态机的行为是相同的。

我们可以使用不同的方法(如等价关系、状态等价识别算法等)来确定等价状态。

7.合并等价状态:一旦我们确定了等价状态,我们可以将它们合并成一个新的等价状态。

通过合并等价状态,我们可以显著减少状态机的复杂性和冗余。

8.重绘状态转移图:最后,我们需要使用新的等价状态更新状态转移图。

新的状态转移图应该更简洁和易读,同时保留了原始状态机的行为。

通过以上步骤,我们可以对有限状态机进行设计和化简,从而简化复杂的状态机,并提高其可读性和可维护性。

这对于开发和设计各种自动控制系统、软件系统和电路系统等具有重要意义。

有限状态机设计

有限状态机设计
以下列出了两种不同的定义方式:
9.1 一般有限状态机的设计
9.1.1 用户自定义数据类型定义语句
TYPE m_state IS ( st0,st1,st2,st3,st4,st5 ) ; SIGNAL present_state,next_state : m_state ;
布尔数据类型的定义语句是: TYPE BOOLEAN IS (FALSE,TRUE) ;
TYPE my_logic IS ( '1' ,'Z' ,'U' ,'0' ) ; SIGNAL s1 : my_logic ; s1 <= 'Z' ;
9.1 一般有限状态机的设计
9.1.1 用户自定义数据类型定义语句
子类型SUBTYPE的语句格式如下: SUBTYPE 子类型名 IS 基本数据类型 RANGE 约束范围;
S3
S4/0
S3/0
S4
S5/0
S1/0
S5
S0/0
S6/0
S6
S0/1
S2/0
简化后状态图
程序代码: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY CHK2 IS PORT(CLK, RESET: IN STD_LOGIC; S_IN: IN STD_LOGIC; FD: OUT STD_LOGIC); END CHK2; ARCHITECTURE a OF CHK2 IS TYPE STATE_TYPE IS (S0, S1, S2,S3,S4,S5,S6); SIGNAL state: STATE_TYPE; BEGIN PROCESS (CLK,RESET) BEGIN IF RESET= '1' THEN state <= S0; ELSIF CLK'EVENT AND CLK = '1' THEN CASE state IS WHEN S0 =>FD <='0'; IF S_IN='1' THEN state <= S1;ELSE STATE <= S0; END IF; WHEN S1 =>FD<='0'; IF S_IN='1' THEN state <=S2;ELSE STATE <=S0; END IF; 接下页

有限状态机的Verilog设计与研究

有限状态机的Verilog设计与研究

谢谢观看
end
endcase
end
end
endmodule
该有限状态机使用三个寄存器来存储当前的状态,并在每个时钟周期检查输入 信号和当前状态来确定下一个状态。如果接收到读取信号,它将输出与输入相 同的数据,并在下一个时钟周期回到空闲状态。如果接收到写入信号,它也会 输出与输入相同的数据,并在下一个时钟周期回到空闲状态。该有限状态机的 设计是可综合的,因为它只包含基本的逻辑门和触发器,并且它的输出只依赖 于当前的状态和输入信号。
end else begin state <= STANDBY;
end
end
endcase
end
end
assign led = state;
endmodule
有限状态机的测试
为了确保有限状态机的正确性,需要对Verilog设计的有限状态机进行测试。 以下是测试过程中需要注意的几点:
end else begin state <= IDLE;
end
end
FLASH: begin
if (flash_timeout) begin state <= STANDBY;
end else begin state <= FLASH;
end
end
STANDBY: begin
if (activate) begin state <= FLASH;
有限状态机的Verilog设计与研究
01 引言
目录
02 有限状态机的设计
03 reg [1:0] state;
05
end else begin
04
if (rst) begin
06
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

状态化简
17个状态需要 5位的状态码 15个状态只需 要4位的状态码
重复的状态: •相同的输出,以及 •相同的转换条件 这里有两个重复的状态
用Verilog对摩尔型售货机建模
• 参照上面的结构,用Verilog建模是很容易的, 只要分别描述各个模块。 • 状态寄存器(时序逻辑的always语句块)。 • 下一个状态,组合逻辑(组合逻辑的always语 句块,使用case语句)。 • 输出组合逻辑块(组合逻辑的always语句块或 者使用assign连续赋值语句)。
系统内会出现哪些状态?
• 起始状态: • 对于不同的输入可能出现的状态: • 在交易前,售货机可以投入的最多金额是 多少?
– 售货机内已有25美分,此时只有一个25美分 25 , 25 的硬币可以使用…
• 找零的状态转换
用moore型状态机完成对控制核心的建模
•将所有可能出现的状态 罗列出来,并连接各个 状态之间的转换关系, 标注转换条件,可以得 到如左图所示的呢?能否对这一 很直观的方案作进一步 的优化?
有限状态机的设计
• 什么是状态机? 什么是状态机?
– 状态机是由寄存器组和组合逻辑构成的硬 件时序电路; 件时序电路; – 其状态(即由寄存器组的1和0的组合状态 其状态(即由寄存器组的1 所构成的有限个状态)只能在同一 同一时钟跳 所构成的有限个状态)只能在同一时钟跳 变沿的情况下, 变沿的情况下,才能从一个状态转向另一 个状态; 个状态; – 一个状态究竟转向哪一状态,不但取决于 一个状态究竟转向哪一状态, 各个输入值,还取决于当前状态。 各个输入值,还取决于当前状态。 – 状态机可用于产生在时钟跳变沿时刻开关 状态机可用于产生在时钟跳变沿时刻开关 的复杂的控制逻辑, 的复杂的控制逻辑,是数字逻辑的控制核 心。
对输出产生毛刺的修正
• 将使用assign 赋值的组合逻 辑输出模块用 always描述的 时序逻辑替换。
Mealy型的状态机可以 有效地减少状态的个数
将Moore型状态图转 换为Mealy型状态图
状态 输出
通过上面的例子做一个小结
• 使用两种类型的状态机对自动售货机控制核心 的逻辑进行了设计
– 摩尔型:输出是当前状态的函数 – 米利型:输出不但和当前状态有关还和输入有关
• 对于状态机的代码设计可以使用标准的模板。 • 以组合逻辑输出很可能会产生竞争冒险(毛刺 信号),对后续模块有影响。
练习
• 设计一个电路能侦测序列中连续出现三 个或三个以上的”1”。
设计示例
A/G=0 !Reset/F=0 G=0 !Reset /F=0 G=0
!Reset /F=0 G=0
Start
!A
Idle Stop
!Reset | !A/F=0 G=1
Clear
A/F=1
米利型和摩尔型状态机 摩尔型
•在米利型状态机里,输出值是现态和输入值两 者的函数;但在摩尔型状态机中,其输出值仅 是现态的函数。 •讨论上述状态机时,有些书籍会称这两种时序 电路为有限状态机(finite state machine, 缩写成FSM),属米利型的时序电路被称为 米利FSM或米利机,属摩尔型的时序电路被 称为摩尔FSM或摩尔机。
状态 输出
有限状态机输出的毛刺问题(glitch)
• 多位的状态码输出时,未必能精确的同时到达。 • 输出使用的组合逻辑可能会造成竞争冒险。 • 所以说,设计的有限状态机可能存在毛刺问题。
先看这两个状 态的转换过程 状态寄存器很可 能会这样变化 引起信号DC的输 出产生一个毛刺
如果这个情况发生,那么你就可以使用20美分获得一瓶饮料
区分两种状态机是由它们 输出的产生来判断
状态图
自动售货机逻辑的设计
• 项目:饮料自动售货机,请为 项目 其设计控制核心。 • 单价:所有饮料均为30美分 单价 ($0.30)。 • 找零:10美分和5美分。 找零 • 输入 输入:一次只能投入一枚硬币。 – Q: 25美分 25美分 – D: 10美分 10美分 – N: 5美分 5美分 • 输出:一次输出一件物品(饮 输出 料或硬币)。 – DC: 饮料 – DD: 10美分 10美分 – DN: 5美分 5美分
相关文档
最新文档