VHDL中的FSM机器,每个状态执行特定操作
我有一个具有五种状态(s1、s2、s3、s4、s5)的FSM 但是,对于每个状态,都应该执行一系列操作。例如,在s2中,计数器的计数范围应为1到10VHDL中的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
我的问题来了: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:请考虑不要使用三个进程,按照菲利普建议的方式去做…我发现处理起来容易多了。