下面是一个状态机的程序,是我们的一个项目工程中的一段,只是思想比较简单,所以说我把它给摘录了下来,以后工程项目中可以用到
process(INTClk ,GPIO8)
begin
if (GPIO8 = '1') then
INTState <= X"0";
counter <= X"00000000";
elsif (INTClk'event and INTClk = '1') then
case INTState is
when X"0" => IRQ7 <= '1';
IRQ6 <= '1';
if counter > X"70F760" then--7403360
counter <= X"00000000";
INTState <= X"1";
else
INTState <= X"0";
end if;
when X"1" => IRQ7 <= '0';
IRQ6 <= '1';
if counter > X"E380" then --58240
counter <= X"00000000";
INTState <= X"2";
else
INTState <= X"1";
end if;
when X"2" => IRQ7 <= '1';
IRQ6 <= '1';
if counter > X"A0" then --160
counter <= X"00000000";
INTState <= X"4";
else
INTState <= X"2";
end if;
when X"4" => IRQ7 <= '1';
IRQ6 <= '0';
if counter > X"E380" then
counter <= X"00000000";
INTState <= X"0";
else
INTState <= X"4";
end if;
when others => null;
end case;
counter <= counter + 1; -----实验证明:这个地方有错误,不用在这里给counter++,因为counter是一个信号,这就导致了counter一直在++,而并没有 =0的操作了,所以说有2中方法:1.使用变量,2,把这一句放在case前面这样就可以了,可以仔细研究一下,呵呵。
end if;
end process;
上面只有4个状态,这个状态执行完会自动转向下一个状态,
文章评论(0条评论)
登录后参与讨论