VHDL中的FSM机器,每个状态执行特定操作

VHDL中的FSM机器,每个状态执行特定操作,vhdl,fsm,Vhdl,Fsm,我有一个具有五种状态(s1、s2、s3、s4、s5)的FSM 但是,对于每个状态,都应该执行一系列操作。例如,在s2中,计数器的计数范围应为1到10 我的问题来了:FSM怎么知道“我应该从s2变为s3”?或者换一种方式说,s2如何通知FSM“我完成了”,并根据可查找表启动新状态 如果你用一种像样的方式编写你的FSM,这真的不是问题。例如: architecture RTL of dut is type state_t is (s1, s2, s3, s4, s5); signal

我有一个具有五种状态(s1、s2、s3、s4、s5)的FSM

但是,对于每个状态,都应该执行一系列操作。例如,在s2中,计数器的计数范围应为1到10


我的问题来了:FSM怎么知道“我应该从s2变为s3”?或者换一种方式说,s2如何通知FSM“我完成了”,并根据可查找表启动新状态

如果你用一种像样的方式编写你的FSM,这真的不是问题。例如:

architecture RTL of dut is
    type state_t is (s1, s2, s3, s4, s5);
    signal state     : state_t;
    signal counter   : integer;
    signal condition : boolean;
begin
    fsm : process is
    begin
        if rising_edge(clk) then
            case state is
                when s1 =>
                -- do stuff
                when s2 =>
                    if condition then
                        counter <= 0;
                        state   <= s3;
                    end if;
                when s3 =>
                    if counter = 10 then
                        state <= s4;
                    else
                        counter <= counter + 1;
                    end if;
                when s4 =>
                    null;
                when s5 =>
                    null;
            end case;
        end if;
    end process fsm;

end architecture RTL;
dut的架构RTL是 类型状态为(s1、s2、s3、s4、s5); 信号状态:状态t; 信号计数器:整数; 信号条件:布尔; 开始 fsm:过程是 开始 如果上升沿(clk),则 案例状态为 当s1=> --做事 当s2=> 如果情况如此
柜台你好,菲利普。谢谢你的回复!下面是我尝试使用三个过程来实现FSM的内容。在过程1中,StesteReg @ RisieEnter:请考虑不要使用三个进程,按照菲利普建议的方式去做…我发现处理起来容易多了。