状态机VHDL讲解近年原文.doc

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

VHDL的结构非常适合编写状态机,而且编写方式不唯一,电路的集成也会随着编写的方式而改变。状态机的设计主要用到casewhen和ifelse两种语句。Casewhen用来指定并行的行为,而ifthenelse用来设计优先度的编码逻辑。

分析状态机有如下特点:

对于状态的描述一般先声明一个枚举数据类型,语句如下:

Typestate_typeis(idle,tap1,tap2,tap3,tap4);

对于存储当前状态的对象一般用是一个信号,即:

Signalstate:state_type;

对于状态机的下一个状态的判断一般是通过对时钟上升沿判断的ifthenelse语句内嵌casewhen语句

对于状态机的输出则可以用一个条件或者选择信号声明语句,或者再用一个case语句来实现信号输出。

状态机分为三大类型:

Moore状态机:次态=f(现状),输出=f(现状),即输出信号是直接由状态寄存器译码得到

Mealy状态机:次态=f(现状,输入),输出=f(现状,输入),即以现时的输入信号结合即将变成次态的现状编码成信号输出。

混合型状态机

我们用一个序列信号发生器的实例来做练习。(状态机将在以后的很多实例中加以运用,请掌握其编写方法)

序列信号就是一些串行的周期性信号,这些信号在每个循环周期内1和0数码按一定的规则顺序排列。下面所讲解的序列发生器能够按规定输出8位’0’,’1’

代码如下:

逐行解释:

10:清零复位信号,高电平复位清零。

12:序列信号输出。因为是8位的端口,但序列信号是串行的,所以相当于有8路的序列信号,任取一位端口就是一个序列信号输出。

17:用type声明一种枚举类型。共8中状态,每个状态都对应唯一的一种输出,至于在什么状态输出什么信号则由程序决定。

18:定义一个state类型信号量,其初始的状态为s0。

19-26:用constant定义一些常量,这些常量将作为在不同状态时的输出信号。

32-34:清零复位时执行的动作。33,输出为value0,34,状态为s0。

35-65:用case语句实现状态的变换。在上升沿的驱动下,状态从s0-s1-s2-s3-s4-s5-s6-s7-s0循环。61-63,若状态机跑飞,及时将状态置为为s0,这样状态机就能恢复正常了。

其状态机转换图:

仿真波形图:

可任取seq_sig的一位作为序列信号的输出,如若选择seq_sig[7]作为序列信号输出,则为,若选择seq_sig[6作为序列信号输出,则为。

还可参考串口的发送模块uart_t,串口的接收模块uart_r和spi中的相关操作。

文档评论(0)

189****0913 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档