2013-05-15 51 views
2

我有一個有五個狀態(s1,s2,s3,s4,s5)的FSM。FSM機器在VHDL中與每個狀態做某些操作

但是,對於每個狀態,應該完成一系列操作。例如,在s2中,計數器應該從1到10.

這裏是我的問題:FSM如何知道「我應該從s2更改爲s3」?或者以另一種方式說話,s2怎麼可能通知FSM「我已經完成了」,並且應該根據LookUpTable來啓動新狀態?

回答

5

如果你以體面的風格編碼你的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; 
+0

嗨Philippe。感謝您的回覆!這是我正在嘗試使用三個過程來實現FSM。在進程1中,state_reg <= state_next,在進程2中,state_next將被更新。在過程3中,將執行輸出邏輯。我的問題實際上是如何在進程3和進程2之間進行通信。因此,當進程3的狀態操作完成時,進程2知道應該更新state_next。非常感謝你!! – richieqianle

+0

@richieqianle:請考慮不使用三個過程,並按照Philippe的建議進行......我發現它更容易處理。 http://stackoverflow.com/questions/4409532/vhdl-process-style –