|
S0 跟 S1 這些是你定義的啦
主要是為了讓自已看的懂
一般我在寫的時侯,都是直接對應
S0 -> 0000
S1 -> 0001
...
不過這不是最有效的方法
在數位系統設計的書,會教你如何讓你的 Finite State Machine 做出來的電路所使用的邏輯閘個數最少,當然這不是絕對的,有興趣的話,找一下書吧
還有我不知道你所謂的"資料重覆"
是指 State 重覆嗎?如果是這個的話,這已經有方法可以檢查你的 Finite State Machine 中是否有重覆的 State ,一樣找書吧
應該都是在 Finite State Machine 那一章
再來就是你在寫程式的時侯要注意一下
一般我們在寫 Finite State Machin 時,會分成 Next_State 及 Output_Logic 二部份
在一些合成軟體中,它們都是建議你將這二個部份分開來寫
以 Verilog 為例:
假設今天我要寫一個四個 State 的 Finite State Machine
這樣寫出來的 Finite State Machine 的 Initial State 是在 State(00)
而且一個 Clock 一個 Clock 的從下一個 State 跑
| code: |
reg [1:0] state;
always @ ( posedge clk or posedge rst ) begin
if ( rst ) begin
state <= 2'b00; // Initial state
end
else begin
case ( state )
2'b00: // state 0
state <= 2'b01;
2'b01: // state 1
state <= 2'b10:
2'b10: // state 2
state <= 2'b11;
2'b11: // state 3
state <= 2'b00;
endcase
end
end
|
再來就是 Output Logic 的部份:
| code: |
always @ ( posedge clk or posedge rst ) begin
if ( rst ) begin
...Reset 要做的事
end
else begin
case ( state )
2'b00: beign
... State(00) 要做的事
end
2'b01: beign
... State(01) 要做的事
end
2'b10: beign
... State(10) 要做的事
end
2'b11: beign
... State(11) 要做的事
end
endcase
end
|
我這樣寫是在做 Moore Machine
而 Moore Machine 跟 Mealy Machine 最大的差別在於 Output_Logic 的部份
Moore Machine 的輸出是在 State 中做的,而
Mealy Machine 的輸出則是在轉態中做的
大概就是這樣
如果你是使用 Xilinx ISE 的話
合成後,可以看一下合成出來的電路,會有一個 FSM ,這個就是你所寫的 Finite State Machine ,而你所寫的 Output_Logic 都接在這個 FSM 的外面
就這樣...
---------------------------------------------------------- 簽名列 -----------
小弟不才,以上言論如有錯誤,煩請各位大大賜教
kevinmech@pchome.com.tw
------------------------------RedHat Forum------------------------
被 kevinmech 修改於 12-15-2003 at 12:44
------------------------------------------------------------------
文章編號:3 | 向板主反映這篇文章 | 
|