第10章VHDL有限状态机设计2015
- 格式:ppt
- 大小:2.09 MB
- 文档页数:6
VHDL的结构非常适合编写状态机,而且编写方式不唯一,电路的集成也会随着编写的方式而改变。
状态机的设计主要用到case when 和if else 两种语句。
Case when 用来指定并行的行为,而if then else 用来设计优先度的编码逻辑。
分析状态机有如下特点:1.对于状态的描述一般先声明一个枚举数据类型,语句如下:Type state_type is(idle,tap1,tap2,tap3,tap4);2.对于存储当前状态的对象一般用是一个信号,即:Signal state: state_type;3.对于状态机的下一个状态的判断一般是通过对时钟上升沿判断的if then else 语句内嵌case when 语句4.对于状态机的输出则可以用一个条件或者选择信号声明语句,或者再用一个case语句来实现信号输出。
状态机分为三大类型:1.Moore状态机:次态=f(现状),输出=f(现状),即输出信号是直接由状态寄存器译码得到2.Mealy状态机:次态=f(现状,输入),输出=f(现状,输入),即以现时的输入信号结合即将变成次态的现状编码成信号输出。
3.混合型状态机我们用一个序列信号发生器的实例来做练习。
(状态机将在以后的很多实例中加以运用,请掌握其编写方法)序列信号就是一些串行的周期性信号,这些信号在每个循环周期内1和0数码按一定的规则顺序排列。
下面所讲解的序列发生器能够按规定输出8位’0’,’1’序列。
代码如下:逐行解释:10:清零复位信号,高电平复位清零。
12:序列信号输出。
因为是8位的端口,但序列信号是串行的,所以相当于有8路的序列信号,任取一位端口就是一个序列信号输出。
17:用type声明一种枚举类型。
共8中状态,每个状态都对应唯一的一种输出,至于在什么状态输出什么信号则由程序决定。
18:定义一个state类型信号量,其初始的状态为s0。
19-26:用constant定义一些常量,这些常量将作为在不同状态时的输出信号。
用VHDL设计有限状态机的方法现代数字系统的设计一般都采用自顶向下的模块化设计方法。
即从整个系统的功能出发,将系统分割成若干功能模块。
在自顶向下划分的过程中,最重要的是将系统或子系统按计算机组成结构那样划分成控制器和若干个受控制的功能模块。
受控部分通常是设计者们所熟悉的各种功能电路,设计较为容易。
主要任务是设计控制器,而其控制功能可以用有限状态机来实现。
因而有必要深入探讨有限状态机的设计方法。
1 状态机设计的一般方法 传统的设计方法是首先绘制出控制器的状态利用VHDL设计状态机,不需要进行繁琐的状态分配、绘制状态表和化简次态方程。
设计者不必使用卡诺(1)根据系统要求确定状态数量、状态转移的条件和各状态输出信号的赋值,并画出状态转移(2)按照状态转移(3)利用EDA工具对状态机的功能进行仿真验证。
下面以离心机定时顺序控制器的设计为例,说明状态机的设计方法。
2 定时顺序控制状态机的设计 在化工生产中,离心机用于固、液分离的工艺流程,如系统工作方式如下:当系统处于初始状态或复位信号reset有效时,系统处于复位状态。
按下自动工作键C0,系统进入加料工序并开始自动控制离心机的运行。
以加水工序为例,首先在加水预置数状态(water_ld)时,状态机输出信号FO,开启加水电磁阀及指示灯,同时输出信号G控制选通加水时间预置数,在LD1信号的控制下,将预置数送入COUNTER1。
此时ENA1=1,J=1,使计数器为减计数状态。
然后,在下一个时钟周期进入加水工作状态(water),并开始减计时。
当计时为零时,计数器发出借位信号R1作为此工序结束的信号送入状态机,使其转入。