VHDL语法入门 (六) 状态机

本文介绍了状态机的基础知识,包括米勒型和摩尔型状态机的定义,以及两种常用的设计风格。在VHDL中,设计风格1将时序和组合逻辑分开,而风格2则引入内部信号以确保输出在时钟边沿更新。此外,文章还讨论了状态编码的不同方式,如二进制、双热和独热码,并提供了实际的计数器和序列检测器电路的VHDL实现示例。

状态机

如果状态机的输出信号不仅与电路当前状态有关,还与当前输入有关,则这种状态机称为米勒(Mealy)型状态机。

如果状态机的输出信号仅仅与电路当前状态有关,则称为摩尔(Moore)型状态机。

下图是一种相对通用的状态机原理图,主要由组合逻辑电路和时序逻辑电路两部分组成,

状态机的设计比较灵活多样,下面介绍两种相对常见的结构清晰,易于理解的状态机设计风格

设计风格1

该风格设计状态机时,将时序逻辑电路和组合逻辑电路进行分开设计,需要先定义一个枚举类型,包含状态机需要的所有状态。

首先时时序逻辑部分的设计

process (reset, clock)
begin
    if(reset = '1') then
        pr_state <= state0;
    elsif (clock'event and clock = '1') then
        pr_state <= nx_state;
    end if;
end process;

这种设计风格的优点是时序电路的设计方法基本上是标准的。此外,这种风格占用的寄存器数量最少。这段代码综合得到的寄存器的数量等于对状态机所有状态进行编码所需要的位数。

状态机中时序逻辑电路的设计

process(input, pr_state)
begin
    case pr_state is
        when state0 =>
            if(input=...)then
                output <= <value>;
                nx_state <= state1;
            else...
            end if;
        when state1 =>
            if(input=...)then
                output <= <value>;
                nx_state <= state2;
            else...
            end if;
        when state2 =>
            if(input=...)then
                output <= <value>;
                nx_state <= state3;
            else...
            end if;
        ...
    end case;
end process;

整个代码中,由于没有任何信号的赋值是通过其他某个信号的跳变来触发的,所以不会生成寄存器

下面给出完整的模板

library ieee;
use ieee.std_logic_1164.all;

entity <entity_name> is
    port(
        input: in <data_type>;    
        reset, clock: in std_logic;
        output: out <data_type>;
    );
end <entity_name>;

architecutre <arc_name> of <entity_name> is
    type state is (state0,state1,state2,state3...);
    signal pr_state,nx_state: state;
begin
    process(reset,clock)
    begin
        if(reset = '1') then
            pr_state <= state0;
        elsif (clock'even
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值