|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統 驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產業 | CAN-bus/DeviceNe |
狀態機設計,選用了One-Hot State Mchine,F、G狀態不是很理解 |
| 作者:海棠 欄目:EDA技術 |
原程序如下: //seq.v /*一個簡單的狀態機設計,功能是檢測一個5位二進制序列"10010"。 考慮到序列重疊的可能,有限狀態機共提供8個狀態(包括初始狀態IDLE)。 */ MODULE seq(x,clk,rst,z,state); input x,clk,rst; OUTPUT z; OUTPUT[2:0] state; reg[2:0] state; wire z; parameter IDLE='d0, A='d1, B='d2, C='d3, D='d4, E='d5, F='d6, G='d7; assign z = ( state==E && x==0 )? 1 : 0; //當x=0時,狀態已變為E, //狀態為D時,x仍為1。因此 //輸出為1的條件為( state==E && x==0 )。 always @(posedge clk) if(!rst) begin state <= IDLE; //保證進入有效狀態 end else casex(state) //要求檢測的序列是‘10010’ IDLE : if(x==1) begin state <= A; end A: if(x==0) begin state <= B; end B: if(x==0) begin state <= C; end else begin state <= F; //為什么不讓它直接跳回A狀態??? end C: if(x==1) begin state <= D; end else begin state <= G; end D: if(x==0) begin state <= E; end else begin state <= A; end E: if(x==0) begin state <= C; end else begin state <= A; end //-------------------------- |
| 2樓: | >>參與討論 |
| 作者: 海棠 于 2005/1/27 15:12:00 發布:
大家幫分析分析。 疑問在B、C狀態的else語句那里,這樣設計有什么好處? |
|
| 3樓: | >>參與討論 |
| 作者: 水管工 于 2005/1/29 5:47:00 發布:
其實也沒有什么特殊意義 一個可能是為了以后擴充 另外更重要的就是要把各種狀態占滿。一旦期間受到干擾,這可以保證一定時間后期間會自動回到正確的軌道上來。 由于是觸發器結構,我不認為有什么抗干擾的好處 當然,如果牛人(或某些軟件自動生成)可以看出這樣的設計會減少邏輯門的占用那就不是我所能理解的了。給出真值表供參考 state[2] s1 s0 x OUTPUT S2 S1 S0 IDLE 0 0 0 0 IDLE 0 0 0 IDLE 0 0 0 1 A 0 0 1 A 0 0 1 0 B 0 1 0 A 0 0 1 1 A 0 0 1 B 0 1 0 0 C 0 1 1 B 0 1 0 1 F 1 1 0 C 0 1 1 0 G 1 1 1 C 0 1 1 1 D 1 0 0 D 1 0 0 0 E 1 0 1 D 1 0 0 1 A 0 0 1 E 1 0 1 0 C 0 1 1 E 1 0 1 1 A 0 0 1 F 1 1 0 0 B 0 1 0 F 1 1 0 1 A 0 0 1 G 1 1 1 0 G 1 1 1 G 1 1 1 1 F 1 1 0 |
|
| 4樓: | >>參與討論 |
| 作者: caiyanan 于 2005/3/5 18:49:00 發布:
同樣迷惑 昨天看這個例子的時候同樣迷惑了半天,自己寫的話怎么也想不到去增加這兩個狀態。樓上說占滿狀態,受到干擾時可以自動回到正確的軌道上來,肯定是有這個原因的,但是就算沒有這兩個狀態,也還有default狀態啊?對了樓主,這個FSM采用的不是One-Hot State Mchine吧? |
|
|
|
Copyright © 1998-2006 m.nhznwl.cn 浙ICP證030469號 |