2
我有一個有五個狀態(s1,s2,s3,s4,s5)的FSM。FSM機器在VHDL中與每個狀態做某些操作
但是,對於每個狀態,應該完成一系列操作。例如,在s2中,計數器應該從1到10.
這裏是我的問題:FSM如何知道「我應該從s2更改爲s3」?或者以另一種方式說話,s2怎麼可能通知FSM「我已經完成了」,並且應該根據LookUpTable來啓動新狀態?
我有一個有五個狀態(s1,s2,s3,s4,s5)的FSM。FSM機器在VHDL中與每個狀態做某些操作
但是,對於每個狀態,應該完成一系列操作。例如,在s2中,計數器應該從1到10.
這裏是我的問題:FSM如何知道「我應該從s2更改爲s3」?或者以另一種方式說話,s2怎麼可能通知FSM「我已經完成了」,並且應該根據LookUpTable來啓動新狀態?
如果你以體面的風格編碼你的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;
嗨Philippe。感謝您的回覆!這是我正在嘗試使用三個過程來實現FSM。在進程1中,state_reg <= state_next,在進程2中,state_next將被更新。在過程3中,將執行輸出邏輯。我的問題實際上是如何在進程3和進程2之間進行通信。因此,當進程3的狀態操作完成時,進程2知道應該更新state_next。非常感謝你!! – richieqianle
@richieqianle:請考慮不使用三個過程,並按照Philippe的建議進行......我發現它更容易處理。 http://stackoverflow.com/questions/4409532/vhdl-process-style –