第九章 有限状态机
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2)双进程描述方式
第一种形式最好,原因是该描述用两个进程组合 逻辑和时序逻辑分开。
将三进程描述方式中的NEXTSTATE-LOGIC和 OUTPUT-LOGIC合成一个进程STATE-TRANSFEN的 的双进程描述方式的VHDL描述。
这种方式比三进程描述方式要简单得多,VHDL 源代码也要短一些,这样就会使摸拟过程速度加快, 而对综合结果却没有什么影响,因此一般情况下,我 们常采用这种双进程描述方式。 下面用双进程方式描述存储控制器的VHDL程序。
Begin
nextstate_logic: process( prestent_state, ready, read_write )
begin
case
present_state
is
when idle=>if (ready=‘1’) then next_state<=decision; else next_state<=idle; end if; when decision=>if (read_write=‘1’) then next_state<=read; else next_state<=write; end if; when read=>if (ready=‘1’) then next_state<=idle;
when read=> we <=‘0’;
re<=‘1’; when write=> we <=‘1’; re<=‘0’; end case; end process; End state_machine;
从上面的描述 中,可以总结出用VHDL描述有限 状态机的步骤:
1.用定义的状态类型去定义信号,状态类型为可枚举 类型; 2.在进程中描述有限状态转移,由于状态是当前状态 和输入信号的函数,所以将它们作为进程的敏感信号。 3.在进程中描述状态寄存器的逻辑,状态寄存器功能 是将状态转化为现代。由于转化时在时钟边 ,感想时 钟应为敏感量。 4.在进程中描述输出逻辑,由于输出逻辑是根据当前 状态给输出信号进行赋值,所以进程的敏感信号是当 前状态信号。
注意:由于附加了一个时钟同步的寄存器,所以 这时的输出信号将比不加寄存器时的输出信号晚一个 时钟周期。 用时钟信号同步输出信号的MOORE型有限状态机 VHDL描述——存储控制器。
Library ieee; Use ieee.std_logic_1164.all; Entity store_controller is port ( ready : in std_logic; clk : in std_logic; read_write : in std_logic; we, re : out std_loigc); End store_controller; Architecture state_machine of store_controller is
2、有限状态机逻辑通常十分适用于可编程逻辑器件。通过恰当 的VHDL描述和EDA工具的综合,一般可以生成性能极优的有限 状态机,使其在执行时间、运行速度和占用资源等方面优于由 CPU实现的设计方案。 有限状态机分为两类: Moore型----输出信号仅与当前状态有关
Mealy型----输出信号不仅与当前状态有关,还与所有的输入信号 有关
第九章 有限状态机
9.1 概述
有限状态机主要功能是用来实现一个数字电路设计中的控制 部分,它与CPU的功能相似。状态机优于CPU的地方:
1、CPU在实现控制功能的过程中,需要很多的操作指令步骤和 硬件操作单元(如ALU);而有限状态机中,控制状态存储在多 个触发器中,表示状态转移和控制功能的代码存储在门级网络中。
9.3 有限状态机的同步输出和复位
从有限状态机的结构可以知道,时钟信号和复位 信号对每一个有限状态机来说都是很重要的,特别是 时钟信号是不可缺少的。 8.2.1同步输出信号 无论是MOORE型有限状态机还是MEALY型有 限状态机,它们的输出信号都是经由组合逻辑电路输 出的,因此输出信号会产生“毛刺”现象。对于同步 电路输出来说,由于“毛刺”只是发生在时钟跳变沿 之后的一小段时间里,因此在下一个时钟跳变沿没到 来时“毛刺”已经消失,所以这时“毛刺”现象不会 对电路产生影响。
when write=>if (ready=‘1’) then
next_state<=idle; else next_state<=write; end if; End case; End process;
State_rigister:
Process( clk ) begin if ( clk’event and clk=‘1’) then present_state<=next_state; end if;
三进程描述方式
双进程描述方式
形式2
形式3
单进程描述方式
进程1:描述次态逻辑、状态寄存器和输出逻辑。
利用三进程描述方法和双进程描述方式的 形式来描述有限状态机时,可以把有限状态的 组合逻辑部分和时序逻辑部分分开,这样有利 于有限状态机的组合逻辑部分和时序逻辑部分 进行测试。
不同的描述方式对于综合的结果影响很大, 一般来说,三进程描述方式和双进程描述方式 中的形式和单进程描述方式的综合结果是比较 好的,而双进程描述方式中的形式2和形式3并 不常用。
else
next_state<=read; end if;
End process;
Output_logic: process( present_state ) begin case present_state is when idle=> we <=‘0’;
re<=‘0’;
when decision=> we <=‘0’; re<=‘0’;
next_state<=idle;
else next_state<=write;
next_state<=write;
end if; when read=> we<=„0‟; re<=„1‟
end if;
end case; End process;
if (ready=„1‟) then
next_sta来自百度文库e<=idle;
9.2 有限状态机的基本描述
为了使综合工具可以将一个完整的VHDL源代 码识别为有限状态机,必须还要遵循一定的描述规 则规定,一个有限状态机的描述应该包括以下内容: ◆至少包括一个状态信号,它们用来指定有限状态 机状态。
◆状态转移指定和输出指定,它们对应于控制步的 转移条件。
◆时钟信号,它是用来进行同步的。 ◆同步或异步复位信号。 只要遵循了上面的描述规则,我们编写的 VHDL源代码都是合法的。
9.2.2一个MOORE型有限状态机的描述
现要求设计一个存储控制器,它能够根据微处理 器的读周期或者写周期,分别对存储器输出写使能信 号WE和读使能信号RE。该控制器的输入信号有三个: 微处理的准备就绪信号READY,微处理的读写信号 READ—WRITE和时钟信号CLK。
工作过程:
READY有效(或上电复位时)控制器开始工 作并在下一个时钟周期到来时判断本次工作是读M还 是写M(READ-WRITE有效为读,无效时为写) 控 制器的输出写使能信号WE在操作中有效,而读写使 能信号RE在读操作中有效。 读写完毕后READY标 态本次处理任务完成,回到空闲状态。
但是如果设计人员在设计电路的过程中,需要 把有限状态机的输出作为使能信号,片选信号,复 位信号或时钟信号等来使用时,“毛刺”现象将会 对电路设计造成很大的影响,甚至烧毁电路板。因 此在这种情况下,我们必须保证有限状态机的输出 信号没有“毛刺”产生。 在设计中消除“毛刺”现象的方法很多,这里 介绍一种信号来同步输出信号的消除“毛刺”现象 的方法。利用的方法是用时钟信号将有限状态机的 输出信号加载到另一个寄存器中,该寄存器一般是 由D触发器构成的,它的时钟信号就是有限状态机 的时钟信号。
(1)三进程描述方式
Library ieee;
Use ieee.std_logic_1164.all;
Entity store_controller is port ( ready : in std_logic; clk : in std_logic; read_write : in std_logic; we, re : out std_loigc); End store_controller; Architecture state_machine of store_controller is type state_type is ( idle, decision, read, write ); signal present_state, next_state : state_type;
9.2.1描述方法
☆三进程描述 1.状态逻辑描述;2.状态寄存器描述;3.输出逻辑 描述。 ☆双进程描述
1.一个进程描述三个中的任何两个;2.另外一个用 一个进程
☆单进程描述 状态逻辑,状态寄存器,输出逻辑 程。 描述用一个进
有限状态机的描述列表
描述方式 进程描述功能 进程1:描述次态逻辑; 进程2:描述状态寄存器; 进程3:描述输出逻辑。 形式1 进程1:描述次态逻辑、输出逻辑; 进程2:描述状态寄存器。 进程1:描述次态逻辑、状态寄存器; 进程2:描述输出逻辑。 进程1:描述状态寄存器、输出逻辑; 进程2:描述次态逻辑。
begin
case
present_state is
when idle=>we<=„0‟; re<=„0‟
if (ready=„1‟) then next_state<=decision; else next_state<=idle; end if; when decision=> we<=„0‟; re<=„0‟ if (read_write=„1‟) then next_state<=read; else else next_state<=read; end if; when write=> we<=„1‟; re<=„0‟ if (read_write=„1‟) then
设计步骤:
1.根据有限状态机与控制器的对应关系。 首先根据控制器的控制步来确定有限状态机的状态。
◆空闲状态IDLE
◆判断状态DECISION
◆读状态READ
◆写状态WRITE
2.根据状态画出状态转移图。
状态转移图是一个非常重要的概念,它表明了有限 状态机的状态和转移条件,有了状态转移图就可以很 容易地写出有限状态机的VHDL描述。
/read idle read ready read decision
/read_write
read_write read /ready /ready write
3.状态机的输出逻辑
所处状态 idle decision read write re 0 0 1 0 we 1 0 0 1
4.用VHDL语言进行描述
Library ieee;
Use ieee.std_logic_1164.all;
Entity store_controller is port ( ready : in std_logic;
clk : in std_logic;
read_write : in std_logic; we, re : out std_loigc); End store_controller; Architecture state_machine of store_controller is type state_type is ( idle, decision, read, write ); signal present_state, next_state : state_type; Begin State_transfer: process( prestent_state, ready, read_write )
State_rigister: Process( clk ) begin
if ( clk‟event and clk=„1‟) then
present_state<=next_state; end if; End process; End state_machine;
(3) 三进程描述方式是把次态逻辑,状态寄存器和 输出逻辑方在一个进程中,那么这个进程的敏感 信号量应该是时钟clk。