3.3.2 有限状态机设计例程
例1 设计实现一个序列信号检测器,当连续接收到一组“110”后输出为“1”,其他情况下输出为“0”。
第一步:明确设计对象的外部特征
·输入信号有:
接收到的序列信号d_in;
时钟信号clk。
·输出信号有:
检测结果f。
第二步:根据设计对象的操作控制步来确定有限状态机的状态:
·初始状态为S0
·接收到1个‘1’的状态为S1
·连续接收到2个或2个以上‘1’的状态为S2
·接收到“110”的状态为S3
第三步:根据设计对象的工作过程画出有限状态机的状态转移图,如图3-18。
图3-18 序列信号检测器的状态转移图
1.三进程描述方式
进程1:描述次态逻辑,即描述出各个状态之间的转移情况
进程2:描述状态寄存器,实现时钟控制下次态到现态转换
进程3:描述输出逻辑,描述各个状态下的输出信号情况
2.双进程描述方式
将以上三进程中的任意两个进程合并为一个,即可变成双进程方式;但将P1和P3合并为一个进程P13,而P2保留的方式最好,原因是这样用两个进程将组合逻辑和时序逻辑分开,便于测试。
可见,双进程描述方式比三进程源代码要短一些,这样会使模拟的过程加快,但对综合结果无影响。
3.单进程描述方式
由于以上描述的状态机的输出信号是由组合电路发出的,所以在一些特定情况下难免出现毛刺现象,如果这些输出被用于作为时钟信号,极易产生错误的操作,这是需要尽力避免的。单进程Moore状态机比较容易构成能避免出现毛刺现象的状态机。
4.本例仿真波形
本例的仿真波形如图3-19所示。
图3-19 序列信号检测器的仿真波形图
例2 设计实现一个存储控制器,该控制器能够根据微处理器的读周期或写周期,分别对存储器输出写使能信号和读使能信号,详细工作过程如下:当微处理器发出“就绪”信号时,存储控制器开始工作:在下一个时钟周期到来时判断本次工作是读还是写——如果微处理器发过来的读写信号为高电平,本次操作为读操作,存储控制器输出有效读使能信号;如果读写信号为低电平,本次操作为写操作,存储控制器输出有效写使能信号。当读或写操作完成后微处理器发出“就绪”信号标志本次处理任务完成,并使存储控制器回到空闲状态。
第一步:明确设计对象的外部特征,画出结构框图如图3-20。
图3-20 存储控制器的结构框图
·输入信号有:
微处理器发来的就绪信号ready;
微处理器发来的读写信号read_write;
时钟信号clk;
·输出信号有:
写使能信号we;
读使能信号oe;
第二步:根据设计对象的操作控制步来确定有限状态机的状态:
·设空闲状态为idle;
·“就绪”信号有效后的下一个时钟周期转入的状态为decision;
·读写信号为高电平后转入的读状态为read;
·读写信号为低电平后转入的写状态为write。
第三步:根据设计对象的工作过程画出有限状态机的状态转移图如图3-21。
图3-21 存储控制器的状态转移图
状态转移图是非常重要的概念,它表明了有限状态机的状态和转移条件,是进行VHDL描述的关键。本例状态转移图的另一种画法如图3-22,其中包含了输出逻辑。
图3-22 存储控制器的状态转移图的另一种画法
1.三进程描述方式
2.双进程描述方式
3.单进程描述方式
4.本例仿真波形
本例的仿真波形如图3-23所示。
图3-23 存储控制器的仿真波形
例3 设计一个自动售货机的逻辑电路,此机器投币口一次只能投一个一元或五角的硬币,累计投入一元五角后机器自动给出一瓶饮料,投入两元后给出一瓶饮料的同时找回一枚五角硬币。
分析:
(1)设A和B为输入,Y和Z为输出;意义如下:
·投入一元则A=‘1’,否则A=‘0’;
·投入五角则B=‘1’,否则B=‘0’;
·给出饮料则Y=‘1’,否则Y=‘0’;
·找钱五角则Z=‘1’,否则Z=‘0’;
(2)自动售货机有三个状态:
·S0:未投币时状态
·S1:投入五角时状态
·S2:投入一元时状态
(3)状态转移图如图3-24所示。
图3-24 自动售货机的状态转移图
1.VHDL描述
2.仿真波形
本例的仿真波形如图3-25所示。
图3-25 自动售货机的仿真波形
例4 设计一个灯光控制器电路,使红黄绿三色灯在时钟的控制下,按图3-26所示顺序转换,并且能够自启动。
图3-26 灯光控制电路的状态转移图
1.VHDL描述
LIBRARY IEEE;
2.仿真波形
本例的仿真波形如图3-27所示。
图3-27 灯光控制电路的仿真波形
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。