有限状态机课程设计报告EDASodaMachine自动售货机.docx

上传人:b****4 文档编号:5724864 上传时间:2023-05-09 格式:DOCX 页数:15 大小:1.02MB
下载 相关 举报
有限状态机课程设计报告EDASodaMachine自动售货机.docx_第1页
第1页 / 共15页
有限状态机课程设计报告EDASodaMachine自动售货机.docx_第2页
第2页 / 共15页
有限状态机课程设计报告EDASodaMachine自动售货机.docx_第3页
第3页 / 共15页
有限状态机课程设计报告EDASodaMachine自动售货机.docx_第4页
第4页 / 共15页
有限状态机课程设计报告EDASodaMachine自动售货机.docx_第5页
第5页 / 共15页
有限状态机课程设计报告EDASodaMachine自动售货机.docx_第6页
第6页 / 共15页
有限状态机课程设计报告EDASodaMachine自动售货机.docx_第7页
第7页 / 共15页
有限状态机课程设计报告EDASodaMachine自动售货机.docx_第8页
第8页 / 共15页
有限状态机课程设计报告EDASodaMachine自动售货机.docx_第9页
第9页 / 共15页
有限状态机课程设计报告EDASodaMachine自动售货机.docx_第10页
第10页 / 共15页
有限状态机课程设计报告EDASodaMachine自动售货机.docx_第11页
第11页 / 共15页
有限状态机课程设计报告EDASodaMachine自动售货机.docx_第12页
第12页 / 共15页
有限状态机课程设计报告EDASodaMachine自动售货机.docx_第13页
第13页 / 共15页
有限状态机课程设计报告EDASodaMachine自动售货机.docx_第14页
第14页 / 共15页
有限状态机课程设计报告EDASodaMachine自动售货机.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

有限状态机课程设计报告EDASodaMachine自动售货机.docx

《有限状态机课程设计报告EDASodaMachine自动售货机.docx》由会员分享,可在线阅读,更多相关《有限状态机课程设计报告EDASodaMachine自动售货机.docx(15页珍藏版)》请在冰点文库上搜索。

有限状态机课程设计报告EDASodaMachine自动售货机.docx

有限状态机课程设计报告EDASodaMachine自动售货机

 

1有限状态机

有限状态机(FiniteStateMachine)是一种具有内部记忆的抽象机器模型,是时序电路的一种,通过有限状态机课实现高效率高可靠逻辑控制。

根据输出与输入关系、系统状态的关系,有限状态机又可以分为Moore型有限状态机

和Mealy型有限状态机。

Moore型状态机的输出信号只于当前的状态有关;Mealy型状态机

是输出信号不仅与当前的状态有关,还与输入信号有关。

Mealy机的示意图如图二所示:

 

Mealy

图二Mealy机的示意图

Moore机的示意图如图三所示:

Moore

图三Moore机的示意图

Moore型有限状态机和Mealy型有限状态机的区别:

•在Moore机中,输出的时钟活动沿到达后的几个门电路的延迟时间之后即到达,并

且在该时钟周期的剩余时间内保持不变,即使输入在该时钟周期内发生变化,输出值也保持

不变。

然而,因为输出与当前的输入无关,当前输出产生的任何效果将延迟到下一个时钟周

期。

Moore机的优点是将输出与输入分隔开。

•在Mealy机中,因为输出是输入的函数,如果输入改变,则输出可以在下一个时钟周期的中间发生改变。

这使得Mealy机比Moore机,对输入变化的响应要早一个时钟周期,一旦输入信号或状态发生变化,输出信号随着输入信号变化。

•实现同样功能,Moore机要比Mealy机需要更多的状态。

通过分析本次实验,利用Mealy机更加容易理解,并且使用Moore会使用更多的状态,所以本次实验使用Mealy型有限状态机。

2SodaMachine机的设计

2.1SodaMachine机的状态转换图

SodaMachine机的状态转换图如图四所示。

SodaMachine

图四SodaMachine机的状态转换图

图中共有10个状态,为ST0—ST9。

在状态转换图中00代表无输入,11代表输入Q(25c),

10代表输入D(10c),01代表输入N(5c)。

在输出中000代表无输出,001代表输出DN(5C),010代表输出的DD(10C),100代表输出DC(1can)。

ST0是初始态。

当没有硬币投入时,状态机始终保持STO状态不变。

当投入5分(即

01)时,状态机跳转到ST1状态,无输出(即000);当投入10分时(即10),跳转到S2

状态,无输出(即000);当投入25分时(即11)跳转到S5状态,无输出(即000)。

ST1是有投入5分后的状态。

当没有硬币投入时,状态机始终保持ST1状态不变,无输出(即000);当投入5分(即01)时,状态机跳转到ST2状态,无输出(即000);当投入10分(即10)时,跳转到ST3状态,无输出(即000);当投入25分(即11)时,跳转到ST0状态,输出一瓶饮料(即100)。

ST2是投入10分后的状态。

当没有硬币投入时,状态机始终保持ST2状态不变,无输

出(即000);当投入5分(即01)时,状态机跳转到ST3状态,无输出(即000);当投入10分(即10)时,跳转到ST4状态,无输出(即000);当投入25分(即11)时,跳转到ST6状态,输出一瓶饮料(即100),在下一个时钟到来ST6再跳转到ST0,输出5分(即001)。

这样可保证每个时钟只输出一个(饮料或10分或5分)。

ST3是投入15分后的状态。

当没有硬币投入时,状态机始终保持ST3状态不变,无输

出(即000);当投入5分(即01)时,状态机跳转到ST4状态,无输出(即000);当投入10分(即10)时,跳转到ST5状态,无输出(即000);当投入25分(即11)时,跳转到ST7状态,输出一瓶饮料(即100),在下一个时钟到来ST7再跳转到ST0,输出10分(即010)。

输出正确,同样可保证每个时钟只输出一个(饮料或10分或5分)。

ST4是投入20分后的状态。

当没有硬币投入时,状态机始终保持ST4状态不变,无输

出(即000);当投入5分(即01)时,状态机跳转到ST5状态,无输出(即000);当投入10分(即10)时,跳转到ST0状态,输出一瓶饮料(即100);当投入25分(即11)时,跳转到ST8状态,输出一瓶饮料(即100),在下一个时钟到来ST8再跳转到ST6,输出10分(即010),在下一个时钟到来ST6再跳转到ST0,输出10分(即001)。

输出正确,同样可保证每个时钟只输出一个(饮料或10分或5分)。

ST5是投入25分后的状态。

当没有硬币投入时,状态机始终保持ST3状态不变,无输

出(即000);当投入5分(即01)时,状态机跳转到ST0状态,输出一瓶饮料(即100);当投入10分(即10)时,跳转到ST6状态,输出一瓶饮料(即100),在下一个时钟到来ST6再跳转到ST0,输出5分(即001);当投入25分(即11)时,跳转到ST9状态输出一瓶饮料(即100),在下一个时钟到来ST9再跳转到ST7,输出10分(即010),在下一个时钟到来ST7再跳转到ST0,输出10分(即010)。

输出正确,同样可保证每个时钟只输出一个(饮料或10分或5分)。

2.2SodaMachine机的状态分配与编码

2.2.1状态编码方式

在状态机的设计中,对状态编码有多种,常用编码的方式有:

有限状态机中常用的编码

主要有二进制编码、格雷码和One-Hot编码。

表1二进制编码、格雷码和One-Hot编码的比较

比较

二进制编码

格雷码编码

一位热码编码

触发器数量

时序条件

一般

最好

非法状态

译码电路

复杂

复杂

简单

F面是对这三种编码方式的仿真。

222—位热码编码方式

由一位热码编码形成的RTL如图五所示。

图五一位热码编码形成的RTL

2.2.2二进制编码方式

二进制编码代码为:

SIGNALCURRENT_STATE,NEXT_STATE:

STD_LOGIC_VECTOR(3DOWNTO0);

CONSTANTST0:

STD_LOGIC_VECTOR(3DOWNTO0):

="0000";

CONSTANTST1:

STD_LOGIC_VECTOR(3DOWNTO0):

="0001";

CONSTANTST2:

STD_LOGIC_VECTOR(3DOWNTO0):

="0010";

CONSTANTST3:

STD_LOGIC_VECTOR(3DOWNTO0):

="0011";

CONSTANTST4:

STD_LOGIC_VECTOR(3DOWNTO0):

="0100";

CONSTANTST5:

STD_LOGIC_VECTOR(3DOWNTO0):

="0101";

CONSTANTST6:

STD_LOGIC_VECTOR(3DOWNTO0):

="0110";

CONSTANTST7:

STD_LOGIC_VECTOR(3DOWNTO0):

="0111";

CONSTANTST8:

STD_LOGIC_VECTOR(3DOWNTO0):

="1000";

CONSTANTST9:

STD_LOGIC_VECTOR(3DOWNTO0):

="1001";

由二进制码形成的RTL如图六所示。

223格雷码编码方式

格雷码编码代码为:

SIGNALCURRENT_STATE,NEXT_STATE:

STD_LOGIC_VECTOR(3DOWNTO0);

CONSTANTST0:

STD_LOGIC_VECTOR(3DOWNTO0):

="0000";

CONSTANTST1:

STD_LOGIC_VECTOR(3DOWNTO0):

="0001";

CONSTANTST2:

STD_LOGIC_VECTOR(3DOWNTO0):

="0011";

CONSTANTST3:

STD_LOGIC_VECTOR(3DOWNTO0):

="0010";

CONSTANTST4:

STD_LOGIC_VECTOR(3DOWNTO0):

="0110";

CONSTANTST5:

STD_LOGIC_VECTOR(3DOWNTO0):

="0111";

CONSTANTST6:

STD_LOGIC_VECTOR(3DOWNTO0):

="0101";

CONSTANTST7:

STD_LOGIC_VECTOR(3DOWNTO0):

="0100";

CONSTANTST8:

STD_LOGIC_VECTOR(3DOWNTO0):

="1100";

CONSTANTST9:

STD_LOGIC_VECTOR(3DOWNTO0):

="1101";

由格雷码形成的RTL如图七所示:

从以上3个图可知:

采用一位热码编码,虽然这种方法的用的的触发器不是最少,但是

可以使次态逻辑变得简单,由于一般的可编程器件,触发器的比率高于组合逻辑,所以采用一位热码编码的系统占用的资源反而少于采用最少触发器的系统。

因此采用一位热码编码的

编码方式。

224对输入信号编码

两位二进制数对输入信号进行编码的RTL如图八所示,及00代表无输入,01代表输

入为5分,10代表输入10分,11代表输入25分。

图八两位二进制数对输入信号进行编码的RTL

三位二进制数对输入信号进行编码的RTL如图所示,及000代表无输入,001代表输

入为5分,010代表输入10分,100代表输入25分。

从上面的两个RTL图中可以看出,用两位二进制数对输入信号进行编码电路简单,并且完全避免的输入的非法状态,所以使用两位二进制数对输入信号进行编码。

2.3SodaMachine机状态最少化

状态最少化采用的方法一般是手动法,只有当两个状态在相同的输入条件下,有相同的次态和输出,那么这两个状态就可以合并,状态最少化是基于观察完成的。

2.3.1SodaMachine机状态转换及输出表

根据图写出状态转换及输出表,见表2。

表2SodaMachine机的状态转换及输出表

现态

相应转移条件下的次态

输出

状态名称

25美分

10美分

5美分

0美分

饮料

10美分

5美分

ST0

ST5

ST2

ST1

ST0

0

0

0

ST1

ST0

ST3

ST2

ST1

0

0

0

ST2

ST6

ST4

ST3

ST2

0

0

0

ST3

ST7

ST5

ST4

ST3

0

0

0

ST4

ST8

ST0

ST5

ST4

0

0

0

ST5

ST11

ST10

ST0

ST5

0

0

0

ST6

没有输入,次态为ST0

0

0

1

ST7

没有输入,次态为ST0

0

1

0

ST8

没有输入,次态为ST9

0

1

0

ST9

没有输入,次态为ST0

0

1

0

ST10

没有输入,次态为ST0

0

0

1

ST11

没有输入,次态为ST12

0

1

0

ST12

没有输入,次态为ST0

0

1

0

注:

ST2跳转到ST6的过程中,输出一瓶饮料;ST3跳转到ST7的过程中,输出一瓶饮料;ST4跳转到ST8的过程中,输出一瓶饮料;ST5跳转到ST6的过程中,输出一瓶饮料;ST5跳转到ST9的过程中,输出一瓶饮料。

2.3.2SodaMachine机的状态合并

根据上面的状态转换表及输出表,基于观察,发现st6、st10的次态转移和输出完全相

同,st7、st9、st12的次态转移和输出完全相同,因此可以将这几个状态进行合并,见表3。

表3合并状态st6和st10为st6,合并状态st7,st9、st12为st7

现态

相应转移条件下的次态

输出

状态名称

25美分

10美分

5美分

0美分

饮料

10美分

5美分

ST0

ST5

ST2

ST1

ST0

0

0

0

ST1

ST0

ST3

ST2

ST1

0

0

0

ST2

ST6

ST4

ST3

ST2

0

0

0

ST3

ST7

ST5

ST4

ST3

0

0

0

ST4

ST8

ST0

ST5

ST4

0

0

0

ST5

ST9

ST6

ST0

ST5

0

0

0

ST6

没有输入,次态为ST0

0

0

1

ST7

没有输入,次态为ST0

0

1

0

2.4SodaMachine机的VHDL语言

2.4.1实体设计

ENTITYSodaIS

PORT(CLK,RESET:

INSTD_LOGIC;--时钟、复位信号

STATE_INPUTS:

INSTD_LOGIC_VECTOR(0TO1);--输入信号

COMB_OUTPUTS:

OUTSTD_LOGIC_VECTOR(0TO2));--输出信号

ENDSoda;

2.4.2结构体设计(部分代码)

TYPESTATESIS(ST0,ST1,ST2,ST3,ST4,ST5,ST6,ST7,ST8,ST9);--定义数据

类型

SIGNALCURRENT_STATE,NEXT_STATE:

STATES;--将现态和次态定义为新的数据类型

REG:

PROCESS(CLK,RESET)

BEGIN

IFRESET='1'THENCURRENT_STATE<=ST0;

ELSIFCLK'EVENTANDCLK='1'

THENCURRENT_STATE<=NEXT_STATE;

ENDIF;

ENDPROCESS;

COM:

PROCESS(CURRENT_STATE,STATE_INPUTS)

VARIABLECOMB_OUTPUTS2:

STD_LOGIC_VECTOR(0TO2);

BEGIN

CASECURRENT_STATEIS

WHENST0=>

IFSTATE_INPUTS="00"

THENNEXT_STATE<=ST0;COMB_OUTPUTS2:

="000";

ELSIFSTATE_INPUTS="01"

THENNEXT_STATE<=ST1;COMB_OUTPUTS2:

="000";

ELSIFSTATE_INPUTS="10"

THENNEXT_STATE<=ST2;COMB_OUTPUTS2:

="000";

ELSENEXT_STATE<=ST5;COMB_OUTPUTS2:

="000";

ENDIF;

2.5SodaMachine机的RTL描述

图十SodaMachine的RTL描述

2.6SodaMachine在QuartusII中形成的状态转图

SodaMachine在QuartusII中形成的状态转图如图^一所示。

2.7SodaMachine的时序仿真

SodaMachine的时序仿真图如图十二所示:

)庐EO.J酩】il0咋河0as珈』nsM〔0us100.0us5E0.0皿珈0咔?

20.Cm800.0能

n.KSr.5

图十二SodaMachine的时序仿真图

时序逻辑说明:

复位信号后,状态为ST0;连续来两个时钟,每次输入25分,第四个

时钟输出一瓶饮料,第五个时钟输出10分,第六个时钟输出10分。

符合逻辑设计要求。

SodaMachine的时序仿真图如图十三所示:

图十三SodaMachine的时序仿真图

10分,即共输入35分,第四个时钟输出一瓶饮料,第五个时钟输出5分。

每个时钟输出

个,符合逻辑设计要求。

3结束语

通过本次实验,对EDA技术和VHDL语言有了更深的了解和认识,会利用QuartusII对

设计电路进行功能仿真、时序仿真和优化,掌握了设计有限状态机的方法。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2