0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MOORE型有限状态机的设计方案分析

电子设计 来源:郭婷 作者:电子设计 2019-06-10 08:03 次阅读

1 、引言

随着微电子技术的迅速发展,人们对数字系统的需求也在提高。不仅要有完善的功能,而且对速度也提出了很高的要求。对于大部分数字系统,都可以划分为控制单元和数据单元两个组成部分。通常,控制单元的主体是一个有限状态机,它接收外部信号以及数据单元产生的状态信息,产生控制信号序列。MOORE型有限状态机的设计方法有多种,采用不同的设计方法,虽然可以得到相同功能的状态机,但它们的速度、时延特性、占用资源可能有较大的差异。在某些对速度要求很高的场合,如内存控制器,则需要针对速度进行优化设计。

2 、MOORE型有限状态机的几种设计方法

2.1 输出由状态位经组合译码得到

它的实现方案是:现态与输入信号经组合逻辑得到次态,在时钟的上升沿到来时,状态寄存器将次态锁存得到现态,现态经过输出组合逻辑译码得到输出信号。如图 1所示。由于输出必须由现态的状态位经过译码得到,这就需要在现态与输出之间增加一级组合译码逻辑,从而加大了从状态位到器件输出管脚的传输延迟,同样也增加了时钟-输出时延TCO。

MOORE型有限状态机的设计方案分析

假设一个简单的内存控制器的状态转换图如图2所示。一个完整的读写周期是从空闲状态idle开始。在ready信号有效之后的下一个时钟周期转移到判断状态decision,然后根据read_write信号再转移到read或write状态。则采用这种设计方法的VHDL源程序如下:

MOORE型有限状态机的设计方案分析

signalpresent_state,next_state:std_logic_vector(1 downto 0);

process(clk,ready,read_write,present_state)

begin

if(clk‘eventandclk=’1‘)then

casepresent_stateis

when idle=>oe<=’0‘;wr<=’0‘;

if ready=’1‘ then

next_state<=decision;

else next_state<=idle;

endif;

when decision=>oe<=’0‘;wr<=’0‘;

if(read_write=’1‘)then

next_state<=read;

else next_state<=write;

endif;

when read=>oe<=’1‘;wr<=’0‘;

if(ready=’1‘)then

next_state<=idle;

else next_state<=read;

endif;

when others=>oe<=’0‘;wr<=’1‘;

if(ready=’1‘)then next_state<=idle;

else next_state<=write;

endif;

endcase;endif;

endprocess;

state_clock:process(clk)begin

if(clk’eventandclk=‘1’)then

present_state<=next_state;

endif;

endprocess;

对此程序综合出的电路如图3所示。现态present_state与次态next_state均由两个触发器构成,输出wr和oe均由 present_state经组合译码得到,因此从时钟的上升沿到状态机输出的延迟为通过逻辑阵列的时钟-输出时延TCO2,而不是较短的时钟-输出时延 TCO,且输出信号wr,oe直接来自组合逻辑电路,因而可能有毛刺发生。

MOORE型有限状态机的设计方案分析

2.2 输出由并行输出寄存器译码得到

在第一种方法中,主要由于输出组合逻辑引入了延时,从而加大了时钟-输出时延。为了缩短状态机输出到达管脚的延时,可以在锁存状态位之前,先进行输出的组合逻辑译码并将其锁存到专用寄存器中,时钟上升沿到来时,专用寄存器中直接输出wr和oe而没有了组合逻辑引入的延时,从而使状态机输出的延迟为TCO。实现该方案的方框图如图4。采用这种设计方法的VHDL源程序如下:

MOORE型有限状态机的设计方案分析

signalpresent_state:std_logic_vector(1 downto 0);

signalnext_state:std_logic_vector(1 downto 0);

signalwr_d,oe_d:std_logic;

begin

process(clk,ready,read_write)

begin

if(clk‘event and clk=’1‘)then

case present_stateis

when idle=>

if ready=’1‘thennext_state<=decision;

else next_state<=idle;

endif ;

when decision=>

if(read_write=’1‘) then next_state<=read;

else next_state<=write;

endif;

when read=>

if(ready=’1‘)then

next_state<=idle;

else next_state<=read;

endif;

when others=>

if(ready=’1‘)then

next_state<=idle;

else next_state<=write;

endif;

endcase;

endif;

endprocess;

withnext_stateselect

oe_d<=’0‘ whenidle|decision|write,’1‘when others;

withnext_stateselect

wr_d<=’0‘whenidle|decision|read,’1‘when others;

state_clock:process(clk)

begin

if(clk’eventandclk=‘1’)then

present_state<=next_state;

oe<=oe_d;

wr<=wr_d;

endif;

endprocess;

在此程序中,用到了两个新的信号oe_d和wr_d,对次态next_state进行锁存,不象第一种方案中将现态present_state进行译码从而得到在下一个时钟周期oe和wr的取值。对此程序综合出的电路如图5所示。oe_d和wr_d作为锁存器D1和D2的输入。因此D1、D2的输出为上一个次态(即现态)的值。clk的上升沿到来时,D1、D2即将oe_d和wr_d锁存,从而得输出oe和wr。因此从时钟的上升沿到状态机输出的延迟为时钟-输出时延TCO而不是通过逻辑阵列的时钟-输出时延TCO2。又由于时钟信号将输出加载到附加的D触发器中,因而消除了输出信号的毛刺。然而,这种方法存在两个缺点:(1)由于用到了输出寄存器,它比第一种设计需要多用两个寄存器;(2)虽然它的时钟-输出时延从TCO2减小到TCO,但从状态机的状态位到达oe和wr需要经过两级组合逻辑,这就影响了系统时钟的最高频率。

MOORE型有限状态机的设计方案分析

2.3 输出直接从状态位得到

为了能够把时钟-输出时延限制在TCO内,也可以将状态位本身作为输出信号。对于状态位不是很多的状态机而言,这种方法也许较前两种更为优越。某种情况下,可能会出现两种不同状态有相同的状态位,此时只需增加一位状态位加以区别即可。如此程序中,idle、decision、read、write四种状态可分别编码为000,001,100,010。采用这种方法所对应的程序如下:

signalpresent_state:std_logic_vector(2downto0);

state:process(clk,ready,read_write);

begin

if(clk‘eventandclk=’1‘)then

case present_stateis

when “000”=>ifready=’1‘ then present_state<=“001”;

else present_state<=“000”;

endif;

when “001”=>if(read_write=’1‘) then

present_state<=“100”;

else present_state<=“001”;

endif;

when “100”=>if(ready=’1‘)then

present_state<=“000”;

elsepresent_state<=“100”;

endif;

when “010”=>if(ready=’1‘) then present_state<=“000”;

else present_state<=“010”;

endif;

when others=>present_state<=“---”;

endcase;

endif;

endprocess;

oe<=present_state(2);

wr<=present_state(1);

对此程序综合出的电路如图6所示。从图中可知,输出信号未通过额外的逻辑对现态进行译码,而是直接来自状态寄存器,因而输出信号上没有毛刺,并且它所用的宏单元少于通过并行输出寄存器输出的方式。

MOORE型有限状态机的设计方案分析

3 、结论

从以上分析可知,普通MOORE型状态机时延最长,速度最慢,可应用于对速度要求不高的场合。同时,由于它的输出信号中有毛刺,更加限制了它的应用范围。后两种方案在相同的条件下,具有相同的时延,即速度是相同的,但第二 种方案所占用面积要比第三种大得多,且对时钟频率有一定限制。如果可能的话,选择“输出直接从状态位得到”类型状态机是一个理想的方案,因为其速度最快,面积最小,设计这种状态机时,必须在VHDL源码中对状态的编码加以明确的规定,使状态和输出信号的取值一致。所以只有在状态机的规模较小时,才能很好地实现这种类型的设计。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    15223

    浏览量

    171172
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117719
  • vhdl
    +关注

    关注

    30

    文章

    815

    浏览量

    127683
收藏 人收藏

    评论

    相关推荐

    FPGA有限状态机

    FPGA有限状态机
    发表于 09-08 08:45

    有限状态机有什么类型?

    在实际的应用中,根据有限状态机是否使用输入信号,设计人员经常将其分为Moore有限状态机和Mealy
    发表于 04-06 09:00

    MOORE有限状态机的几种设计方法是什么

    MOORE有限状态机的几种设计方法是什么VHDL设计MOORE有限状态机时速度问题是什么
    发表于 05-07 06:01

    什么是有限状态机

    在嵌入式,机器人领域,由于多的复杂逻辑状态,我们编写程序的时候不得不考虑很多种情况,容易造成功能间的冲突。有限状态机(finite-state machine),简称状态机,是一种表示有限
    发表于 12-20 06:51

    fsm有限状态机pdf

    利用 VHDL 设计的许多实用逻辑系统中,有许多是可以利用有限状态机设计方案来描述和实现的。无论与基于 VHDL的其它设计方案相比,还是与可完成相似功能的 CPU 相比,状
    发表于 06-04 10:33 75次下载

    有限状态机的硬件描述语言设计方法

    实验目的 1、 熟悉用硬件描述语言(VHDL)设计一般状态机所包含的几个基本部分;2、 掌握用硬件描述语言(VHDL)设计Moore型和Mealy型有限状态机的方法;3、 了解状态
    发表于 09-03 09:48 0次下载

    基于VHDL的MTM总线主模块有限状态机设计

    为了能够更简洁严谨地描述MTM总线的主模块有限状态机状态转换,同时减少FPGA芯片功耗,提高系统稳定性,文中在分析MTM总线结构和主模块有限状态机模型的基础上,基于VHDL语言采
    发表于 05-29 15:39 20次下载
    基于VHDL的MTM总线主模块<b class='flag-5'>有限状态机</b>设计

    有限状态机_FSM_的实现

    本文主要介绍了IP模块的有限状态机的实现。
    发表于 03-22 15:42 0次下载

    有限状态机FSM在PLD中的实现分析

    本文通过举例 利用VHDL 语言描述了不同模式的有限状态机 分析有限状态机在 PLD 中综合的特点 。
    发表于 03-22 15:41 3次下载

    有限状态机的建模与优化设计

    本文提出一种优秀 、高效的 Verilog HDL 描述方式来进行有限状态机设计 介绍了 有限状态机的建模原则 并通过一个可综合的实例 验证了 该方法设计的有限状态机在面积和功耗上的优势。
    发表于 03-22 15:19 1次下载

    VHDL有限状态机设计-ST

    EDA的有限状态机,广义而言是指只要涉及触发器的电路,无论电路大小都可以归结为状态机有限状态机设计在学习EDA时是很重要的一章。
    发表于 06-08 16:46 3次下载

    初学者对有限状态机(FSM)的设计的认识

    有限状态机(FSM)是一种常见的电路,由时序电路和组合电路组成。设计有限状态机的第一步是确定采用Moore状态机还是采用Mealy状态机
    发表于 02-11 13:51 3915次阅读
    初学者对<b class='flag-5'>有限状态机</b>(FSM)的设计的认识

    基于事件驱动的有限状态机介绍

    EFSM(event finite state machine,事件驱动型有限状态机),是一个基于事件驱动的有限状态机,主要应用于嵌入式设备的软件系统中。
    的头像 发表于 02-11 10:17 750次阅读

    一个基于事件驱动的有限状态机

    EFSM(event finite state machine,事件驱动型有限状态机),是一个基于事件驱动的有限状态机,主要应用于嵌入式设备的软件系统中。 EFSM的设计原则是:简单!EFSM的使用者只需要关心:
    的头像 发表于 08-30 09:28 491次阅读
    一个基于事件驱动的<b class='flag-5'>有限状态机</b>

    有限状态机分割设计

    有限状态机分割设计,其实质就是一个状态机分割成多个状态机
    的头像 发表于 10-09 10:47 352次阅读