下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、狀態(tài)機(jī)的兩種寫法有限狀態(tài)機(jī) FSM廣泛應(yīng)用于硬件控制電路設(shè)計(jì),也是上常用的一種處理方法(上稱為 FMM-有限消息機(jī))。它把復(fù)雜的控制邏輯分解成有限個(gè)穩(wěn)定狀態(tài),在每個(gè)狀態(tài)上判斷事件,變連續(xù)處理為離散數(shù)字處理,符合計(jì)算機(jī)的工作特點(diǎn)。同時(shí),因?yàn)橛邢逘顟B(tài)機(jī)具有有限個(gè)狀態(tài),所以可以在實(shí)際的工程上實(shí)現(xiàn)。但這并不意味著其只能進(jìn)行有限次的處理,相反,有限狀態(tài)機(jī)是閉環(huán)系統(tǒng),有限無(wú)窮,可以用有限的狀態(tài),處理無(wú)窮的事務(wù)。有限狀態(tài)機(jī)的工作原理如圖 1 所示,發(fā)生事件(event)后,根據(jù)當(dāng)前狀態(tài)(cur_s定執(zhí)行的動(dòng)作(action),并設(shè)置下一個(gè)狀態(tài)號(hào)(nxt_s e)。e),決|發(fā)生事件 event| cur_s
2、|執(zhí)行動(dòng)作 actione |設(shè)置下一狀態(tài)號(hào) nxt_se當(dāng)前狀態(tài)圖 1 有限狀態(tài)機(jī)工作原理e0/a0-|e0/a0 |S0|-| e1/a1 V|-| e2/a2|S2|-|S1|-e2/a2-圖 2 一個(gè)有限狀態(tài)機(jī)實(shí)例當(dāng)前狀態(tài)s0s1s2| 事件a0/s0-a0/s0|e0a1/s1-|e1a2/s2a2/s2-|e2表 1 圖 2 狀態(tài)機(jī)實(shí)例的二維表格表示(動(dòng)作/下一狀態(tài))圖 2 為一個(gè)狀態(tài)機(jī)實(shí)例的狀態(tài)轉(zhuǎn)移圖,它的含義是:在 s0 狀態(tài),如果發(fā)生 e0 事件,那么就執(zhí)行 a0 動(dòng)作,并保持狀態(tài)不變;如果發(fā)生 e1 事件,那么就執(zhí)行 a1 動(dòng)作,并將狀態(tài)轉(zhuǎn)移到 s1 態(tài);如果發(fā)生 e2 事
3、件,那么就執(zhí)行 a2 動(dòng)作,并將狀態(tài)轉(zhuǎn)移到 s2 態(tài);在 s1 狀態(tài),如果發(fā)生 e2 事件,那么就執(zhí)行 a2 動(dòng)作,并將狀態(tài)轉(zhuǎn)移到 s2 態(tài);在 s2 狀態(tài),如果發(fā)生 e0 事件,那么就執(zhí)行 a0 動(dòng)作,并將狀態(tài)轉(zhuǎn)移到 s0 態(tài);有限狀態(tài)機(jī)不僅能夠用狀態(tài)轉(zhuǎn)移圖表示,還可以用二維的表格代表。一般將當(dāng)前狀態(tài)號(hào)寫在橫行上,將事件寫在縱列上,如表 1 所示。其中“-”表示空 (不執(zhí)行動(dòng)作,也不進(jìn)行狀態(tài)轉(zhuǎn)移),“an/sn”表示執(zhí)行動(dòng)作 an,同時(shí)將下一狀態(tài)設(shè)置為 sn。表 1 和圖 2 表示的含義是完全相同的。觀察表 1 可知,狀態(tài)機(jī)可以用兩種方法實(shí)現(xiàn):豎著寫(在狀態(tài)中判斷事件)和橫著寫(在事件中判斷
4、狀態(tài))。這兩種實(shí)現(xiàn)在本質(zhì)上是完全等效的,但在實(shí)際操作中,效果卻截然不同。=豎著寫(在狀態(tài)中判斷事件)C 代碼片段=cur_s e = nxt_s e; switch(cur_s e)case s0:if(e0_event)保持狀態(tài)不變;執(zhí)行 a0 動(dòng)作;/在當(dāng)前狀態(tài)中判斷事件/在 s0 狀態(tài)/如果發(fā)生 e0 事件,那么就執(zhí)行 a0 動(dòng)作,并/nxt_s e = s0;/因?yàn)闋顟B(tài)號(hào)是自身,所以可以刪除此句,以提高運(yùn)行速度。else if(e1_event)狀態(tài)轉(zhuǎn)移到 s1 態(tài);執(zhí)行 a1 動(dòng)作; nxt_s e = s1;else if(e2_event)狀態(tài)轉(zhuǎn)移到 s2 態(tài);執(zhí)行 a2 動(dòng)作;
5、 nxt_s e = s2;break; case s1:if(e2_event)將狀態(tài)轉(zhuǎn)移到 s2 態(tài);執(zhí)行 a2 動(dòng)作; nxt_s e = s2;/如果發(fā)生 e1 事件,那么就執(zhí)行 a1 動(dòng)作,并將/如果發(fā)生 e2 事件,那么就執(zhí)行 a2 動(dòng)作,并將/在 s1 狀態(tài)/如果發(fā)生 e2 事件,那么就執(zhí)行 a2 動(dòng)作,并break; case s2:if(e0_event)將狀態(tài)轉(zhuǎn)移到 s0 態(tài);執(zhí)行 a0 動(dòng)作; nxt_s e = s0;/在 s2 狀態(tài)/如果發(fā)生 e0 事件,那么就執(zhí)行 a0 動(dòng)作,并=橫著寫(在事件中判斷狀態(tài))C 代碼片段=/e0 事件發(fā)生時(shí),執(zhí)行的函數(shù)void e0_
6、event_function(cur_s e;* nxt_se)cur_s e = *nxt_s switch(cur_s e) case s0:case s2:e;/觀察表 1,在 e0 事件發(fā)生時(shí),s1 處為空?qǐng)?zhí)行 a0 動(dòng)作;*nxt_s e = s0;/e1 事件發(fā)生時(shí),執(zhí)行的函數(shù)void e1_event_function(cur_s e;* nxt_se)cur_s e = *nxt_s switch(cur_s e)case s0:e;/觀察表 1,在 e1 事件發(fā)生時(shí),s1 和 s2 處為空?qǐng)?zhí)行 a1 動(dòng)作;*nxt_s e = s1;/e2 事件發(fā)生時(shí),執(zhí)行的函數(shù)void e
7、2_event_function(* nxt_se)cur_s e;cur_s e = *nxt_s e; switch(cur_s e)case s0:case s1:執(zhí)行 a2 動(dòng)作;*nxt_s e = s2;/觀察表 1,在 e2 事件發(fā)生時(shí),s2 處為空上面橫豎兩種寫法的代碼片段,實(shí)現(xiàn)的功能完全相同,但是,橫著寫的效果明顯好于豎著寫的效果。理由如下:1、豎著寫隱含了優(yōu)先級(jí)排序(其實(shí)各個(gè)事件是同優(yōu)先級(jí)的),排面的事件判斷將毫無(wú)疑問(wèn)地優(yōu)先于排在后面的事件判斷。這種 if/else if 寫法上的限制將破壞事件間原有的關(guān)系。而橫著寫不存在此問(wèn)題。2、由于處在每個(gè)狀態(tài)時(shí)的事件數(shù)目不一致,而且
8、事件發(fā)生的時(shí)間是隨機(jī)的,無(wú)法預(yù)先確定,導(dǎo)致豎著寫淪落為順序查詢方式,結(jié)構(gòu)上的缺陷使得大量時(shí)間被浪費(fèi)。對(duì)于橫著寫,在某個(gè)時(shí)間點(diǎn),狀態(tài)是唯一確定的,在事件里查找狀態(tài)只要使用 switch 語(yǔ)句,就能一步定位到相應(yīng)的狀態(tài),延遲時(shí)間可以預(yù)先準(zhǔn)確估算。而且在事件發(fā)生時(shí),調(diào)用事件函數(shù),在函數(shù)里查找唯一確定的狀態(tài),并根據(jù)其執(zhí)行動(dòng)作和狀態(tài)轉(zhuǎn)移的思路清晰簡(jiǎn)潔,效率高,富有美感??傊覀€(gè)人認(rèn)為,在里寫狀態(tài)機(jī),使用橫著寫的方法比較妥帖。豎著寫的方法也不是完全不能使用,在一些小項(xiàng)目里,邏輯不太復(fù)雜,功能精簡(jiǎn),同時(shí)為了節(jié)約內(nèi)存耗費(fèi),豎著寫的方法也不失為一種合適的選擇。在 FPGA 類硬件設(shè)計(jì)中,以狀態(tài)為中心實(shí)現(xiàn)控制電
9、路狀態(tài)機(jī)(豎著寫)似乎是唯一的選擇,因?yàn)橛布惶赡芸渴录?qū)動(dòng)(橫著寫)。不過(guò),在 FPGA 里有一個(gè)全局時(shí)鐘,在每次上升沿時(shí)進(jìn)行狀態(tài)切換,使得豎著寫的效率并不低。雖然在硬件里豎著寫也要使用 IF/ELSIF這類查詢語(yǔ)句(用 VHDL 開發(fā)),但他們到硬件上是組合邏輯,查詢只會(huì)引起門級(jí)延遲(ns量級(jí)),而且硬件是真正并行工作的,這樣豎著寫在硬件里就沒(méi)有影響。因此,在硬件設(shè)計(jì)里,使用豎著寫的方式成為必然的選擇。這也是為什么很多搞硬件的工程師在設(shè)計(jì)狀態(tài)機(jī)時(shí)下意識(shí)地只使用豎著寫方式的原因,蓋思維定勢(shì)使然也。TCP 和PPP 框架協(xié)議里都使用了有限狀態(tài)機(jī),這類狀態(tài)機(jī)最好使用橫著寫的方式實(shí)現(xiàn)。以某 TC
10、P 協(xié)議為例,見圖 3,有三種類型的事件:上層下達(dá)令事件;下層到達(dá)的標(biāo)志和數(shù)據(jù)的收包事件;超時(shí)定時(shí)器超件。上層命令(open,close)事件|TCP|超件timeoutRST/SYN/FIN/ACK/DATA 等收包事件圖 3 三大類 TCP 狀態(tài)機(jī)事件由圖 3 可知,此 TCP 協(xié)議棧采用橫著寫方式實(shí)現(xiàn),有 3 種事件處理函數(shù),上層命令處理函數(shù)(如tcp_close);超件處理函數(shù) (tmr_slow);下層收包事件處理函數(shù)(tcp_pros)。值得一提的是,在收包事件函數(shù)里,在各個(gè)狀態(tài)里判斷 RST/SYN/FIN/ACK/DATA 等標(biāo)志(這些標(biāo)志類似于事件),看起來(lái)象豎著寫方式,其實(shí),如果把包頭和數(shù)據(jù)看成一個(gè)整體,那么, RST/SYN/FIN/ACK/DA
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024院子買賣合同范本(含裝修)3篇
- 2025年度智能農(nóng)田除草機(jī)械化服務(wù)合同4篇
- 2024自動(dòng)駕駛測(cè)試司機(jī)試驗(yàn)合同
- 2024起重機(jī)租賃合同:含特種設(shè)備檢測(cè)與認(rèn)證服務(wù)3篇
- 2025年度果樹觀光園果樹租賃經(jīng)營(yíng)合同范本3篇
- 2024虛擬現(xiàn)實(shí)技術(shù)托管服務(wù)合同
- 2025年度彩鋼構(gòu)件回收與再利用合同3篇
- 2024版軟件開發(fā)項(xiàng)目分包協(xié)議3篇
- 2025年度商業(yè)地產(chǎn)租賃合同示范文本11篇
- 2025年度智慧城市建設(shè)承包經(jīng)營(yíng)合同范本3篇
- 軟件項(xiàng)目應(yīng)急措施及方案
- 2025河北邯鄲經(jīng)開國(guó)控資產(chǎn)運(yùn)營(yíng)管理限公司招聘專業(yè)技術(shù)人才5名高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024年民法典知識(shí)競(jìng)賽考試題庫(kù)及答案(共50題)
- 2025老年公寓合同管理制度
- 2024-2025學(xué)年人教版數(shù)學(xué)六年級(jí)上冊(cè) 期末綜合卷(含答案)
- 2024中國(guó)汽車后市場(chǎng)年度發(fā)展報(bào)告
- 鈑金設(shè)備操作培訓(xùn)
- 感染性腹瀉的護(hù)理查房
- 天津市部分區(qū)2023-2024學(xué)年高二上學(xué)期期末考試 物理 含解析
- 水利工程招標(biāo)文件樣本
- 第17課 西晉的短暫統(tǒng)一和北方各族的內(nèi)遷(說(shuō)課稿)-2024-2025學(xué)年七年級(jí)歷史上冊(cè)素養(yǎng)提升說(shuō)課稿(統(tǒng)編版2024)
評(píng)論
0/150
提交評(píng)論