【发布时间】:2021-11-06 01:48:36
【问题描述】:
我正在创建一个简单的有限状态机。
编译器好像没有识别出它是FSM。
网上不断引用FSM的例子,之前也写过简单的FSM代码。
但是,我感觉不到我之前写的 FSM 和现在不工作的 FSM 之间的区别。
为什么下面写的代码不能识别状态,FSM不工作?
为什么signal_test通过IF输出,而state没有输入到st中?
library ieee;
use ieee.std_logic_1164.all;
entity aaa is port(
reset: in std_logic;
clk: in std_logic;
input: in std_logic;
signal_test: out std_logic);
end aaa;
architecture beh of aaa is
type state is (s0,s1,s2,s3);
signal st: state :=s0;
begin
process(reset, clk)
begin
if reset = '0' then st <= s0;
else
if falling_edge(clk) then
case st is
when s0 =>
if input='1' then st<=s1;
signal_test<= '1';
else signal_test<= '0';
end if;
when s1 =>
if input='1' then st<=s2;
signal_test<= '1';
else signal_test<= '0';
end if;
when s2 =>
if input='1' then st<=s3;
signal_test<= '1';
else signal_test<= '0';
end if;
when s3 =>
if input='1' then st<=s0;
signal_test<= '1';
else signal_test<= '0';
end if;
end case;
end if;
end if;
end process;
end beh;
【问题讨论】:
-
您的代码有一些语法错误。例如,文字
null不是character,我假设您的意思是NUL。它还不清楚您的图像与代码的关系。st变量是枚举类型state,但波形显示了各个状态位。这是合成后的波形吗?因此,这与您的问题有何关系?