状态机近年原文.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

可综合状态机设计

状态机在某种程度上可以称是一种时序电路,如前面的触发器、计数器等,都可以看成是功能固定的状态机。在状态机中常使用以状态图及状态表描述的方式,然后根据这个状态图去设计符合要求的电路。本章将介绍状态机、状态的编码方式及状态机的设计范例。

状态机简介

状态机简写为FSM(FiniteStateMachine),主要分为2大类:第一类,若输出只和状态有关而与输入无关,则称为Moore状态机:第二类,输出不仅和状态有关而且和输入有关系,则称为Melay状态机。要特别注意的是,因为Melay状态机和输入有关,输出会受到输入的干扰,所以可能会产生毛刺(Gitch)现象,使用时应当注意。事实上现在市面上有很多EDA工具可以很方便的将采用状态图的描述转换成可以综合的VHDL程序代码。

Moore状态机

其Moore状态图如图1所示。

S

S0/0

S1/1

S3/0

S2/0

0

0

1

1

0

0

1

1

其中S0/0所代表的意思为现在是状态S0且输出为0,状态图最主要是将每个状态都给予一个编号,详细描述如下:

在某状态时,列出所有的输出条件。

在某状态时,当输入信号是什么则会跳至哪一个状态。

在某状态时,当输入信号是什么则会维持原状态不变。

可以将图1的Moore状态机写成状态表如表1.

表1Moore状态表

状态

次态

输出

X=0

X=1

S0

S0

S1

0

S1

S1

S2

1

S2

S3

S0

0

S3

S0

S3

0

状态表主要描述它与状态图的关系,再设计状态机电路是,需要先定义状态机的变量,定义状态机的变量时使用枚举类型来定义,如下范例所示:

Type

接下来,状态会被加以编码。其状态编码方式如下:

时序编码(Sequential)

将每个状态以二进制来做编码。

格雷码(Gray)

也是将四个State以二进制来编码,不过不同的是每次编码只会差一个位,其主要缺点是状态改变是要依据改变才可以,若状态不是依序是,则Gray编码不适用。

独热码(Onehot)

独热码状态编码的特色为每一个状态均有自己的触发器,所以若有N个状态就也存在有N个触发器,在任一时刻只会有一组状态编码,缺点是会产生较大的电路,但是相对的使用独热码状态编码对帧错相当有帮助。

三种格式之状态编码如表2所示。

状态

时序编码

Gray编码

Onehot编码

S0

00

00

0001

S1

01

01

0010

S2

10

11

0100

S3

11

10

1000

从状态编码表可以看出时序编码和Gray编码均是用二个位来做编码,而以独热码作为编码方式则编码位增加至四个位,所以电路比其他两种编码方式都大一些。

所以可以使用属性来定义编码方式,若要编码成独热码编码,则可加上:

Type

Attributeencodingofstate;

Typeis“00010010

在设计状态机时,通常使用进程语句来描述状态机,其中进程语句又可以分为三种方式:

一个进程

利用一个进程来描述状态的转换及输出信号的定义。

两个进程

一个为时序电路主要负责状态变量的更新,此进程为同步电路,而另一个进程语句主要是描述下次态变量和输出的更新。

三个进程

第一个进程主要负责状态变量的更新,第二个进程语句负责描述次态变量,而最后一个则是负责输出信号的更新。

有了以上的初步观念,可以设计图1四个状态的Moore状态机。

范例

首先根据之前的状态表编写VHDL程序如下所示:

Libraryieee;

Useieee.std_logic_1164.all;

Useieee.numeric_std.all;

Entitymoore_fsmis

Port(

clk:instd_logic;

rstn:instd_logic;

x:instd_logic;

output:outstd_logic

);

Endmoore_fsm;

Architecturertlofmoore_fsmis

Typestateis(s0,s1,s2,s3);---状态定义

Signalcurrent_state:state;---现态

Signalnext_state:state;---次态

Begin

Statefsm:process(rstn,x,current_state)

Begin

Ifrstn=‘0’

next_state=s0;

output=‘0’

else

casecurrent_stateis

whens0=

ifx=’0

文档评论(0)

胖叔 + 关注
实名认证
内容提供者

好文档大家享受

1亿VIP精品文档

相关文档