原创 一个简单的加法状态机

2012-2-4 12:42 1458 6 6 分类: FPGA/CPLD

 

 

下面是一个状态机的程序,是我们的一个项目工程中的一段,只是思想比较简单,所以说我把它给摘录了下来,以后工程项目中可以用到
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条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /2 下一条