為什么要使用狀態(tài)機(jī) 如何在FPGA中實(shí)現(xiàn)狀態(tài)機(jī)?
如何在FPGA中實(shí)現(xiàn)狀態(tài)機(jī)?FPGA常常用于執(zhí)行基于序列和控制的行動(dòng),比如實(shí)現(xiàn)一個(gè)簡(jiǎn)單的通信協(xié)議。對(duì)于設(shè)計(jì)人員來(lái)說(shuō),滿足這些行動(dòng)和序列要求的最佳方法則是使用狀態(tài)機(jī)。狀態(tài)機(jī)是在數(shù)量有限的狀態(tài)之間進(jìn)行轉(zhuǎn)換
如何在FPGA中實(shí)現(xiàn)狀態(tài)機(jī)?
FPGA常常用于執(zhí)行基于序列和控制的行動(dòng),比如實(shí)現(xiàn)一個(gè)簡(jiǎn)單的通信協(xié)議。對(duì)于設(shè)計(jì)人員來(lái)說(shuō),滿足這些行動(dòng)和序列要求的最佳方法則是使用狀態(tài)機(jī)。狀態(tài)機(jī)是在數(shù)量有限的狀態(tài)之間進(jìn)行轉(zhuǎn)換的邏輯結(jié)構(gòu)。一個(gè)狀態(tài)機(jī)在某個(gè)特定的時(shí)間點(diǎn)只處于一種狀態(tài)。但在一系列觸發(fā)器的觸發(fā)下,將在不同狀態(tài)間進(jìn)行轉(zhuǎn)換。理論上講,狀態(tài)機(jī)可以分為Moore狀態(tài)機(jī)和Mealy狀態(tài)機(jī)兩大類。它們之間的差異僅在于如何生成狀態(tài)機(jī)的輸出。Moore狀態(tài)機(jī)的輸出僅為當(dāng)前狀態(tài)的函數(shù)。典型的例子就是計(jì)數(shù)器。而Mealy狀態(tài)機(jī)的輸出是當(dāng)前狀態(tài)和輸入的函數(shù)。典型的例子就是Richards控制器。
用單片機(jī)C語(yǔ)言怎么寫用狀態(tài)機(jī)實(shí)現(xiàn)按鍵控制LED燈閃爍這個(gè)程序?
按鍵控制LED閃爍,狀態(tài)機(jī)就是檢測(cè)按鍵,如果沒有按下就不閃爍,如果按下就開始閃爍。
樓主提的問題就是一個(gè)問題。你到底是想問狀態(tài)機(jī)還是想問程序? “用單片機(jī)C語(yǔ)言怎么寫用狀態(tài)機(jī),實(shí)現(xiàn)按鍵控制LED燈閃爍,這個(gè)程序” “用單片機(jī)C語(yǔ)言怎么寫,用狀態(tài)機(jī)實(shí)現(xiàn),按鍵控制LED燈閃爍這個(gè)程序” ???有限狀態(tài)自動(dòng)機(jī)是干什么的?
一樣的。這個(gè)差異來(lái)源于,從英文到中文的翻譯。Finite state machine對(duì)應(yīng)于有限狀態(tài)機(jī); Finite automata對(duì)應(yīng)于有限狀態(tài)自動(dòng)機(jī)。值得注意的是,finite automata不能寫成finite state automata。 Automata直譯為自動(dòng)機(jī), 而它的修飾詞Finite所包含的意思是有限狀態(tài)的意思。所以,finite automata翻譯成有限自動(dòng)機(jī)和有限狀態(tài)自動(dòng)機(jī)都可以,看約定俗成了。
判斷輸入的數(shù)字是否是數(shù)字字符?
用一個(gè)簡(jiǎn)單的有限狀態(tài)機(jī)就可以實(shí)現(xiàn),正好實(shí)現(xiàn)一個(gè)匹配數(shù)字的正則表達(dá)式引擎。
判斷用戶輸入的是否都是數(shù)字0~9的話,那其實(shí)還是有許多細(xì)節(jié)的,如果前后面有空格算不算呢?比如" 009900 ",中間有空格應(yīng)該是非法的,比如"000 999",還是只能嚴(yán)格的"001129"這樣的,如果是后面一種的話,那很簡(jiǎn)單,用戶輸入一字符串,直接用一個(gè)指針(C#應(yīng)該有引用),判斷每個(gè)字符值是否在0x30~0x39范圍內(nèi)。
=============后面一種用用C語(yǔ)言來(lái)描述下=============
不過(guò)我猜測(cè)應(yīng)該是前面一種,那用過(guò)簡(jiǎn)單FSM來(lái)實(shí)現(xiàn)正則匹配吧,首先我們看下那幾種輸入狀態(tài)是合法的。晚上閑的的時(shí)候再搞。。。