換個(gè)方式理解狀態(tài)機(jī)
狀態(tài)機(jī)概述
有限狀態(tài)機(jī)通常是由寄存器組和組合邏輯組成時(shí)序電路,根據(jù)當(dāng)前狀態(tài)和輸入信號可以控制下一個(gè)狀態(tài)的跳轉(zhuǎn),有限狀態(tài)機(jī)在電路中通常是作為控制模塊,作為整個(gè)電路模塊的核心而存在,它主要包括兩大類:Mealy型狀態(tài)機(jī)和Moore型狀態(tài)機(jī)。
Mealy型狀態(tài)機(jī):其組合邏輯的輸出不僅與當(dāng)前狀態(tài)有關(guān),還與輸入有關(guān)。
如下圖所示:
Moore型狀態(tài)機(jī):其組合邏輯的輸出只與當(dāng)前的狀態(tài)有關(guān)。
如下圖所示:
狀態(tài)機(jī)的編碼方式主要包括:二進(jìn)制碼(Binary),格雷碼(gray),獨(dú)熱碼(one hot)
比如說當(dāng)前工作四個(gè)狀態(tài)的話,其編碼方式如下表1所示:
二進(jìn)制 |
格雷碼 |
獨(dú)熱碼 |
|
S0 |
00 |
00 |
0001 |
S1 |
01 |
01 |
0010 |
S2 |
10 |
11 |
0100 |
S3 |
11 |
10 |
1000 |
格雷碼相對于二進(jìn)制碼而言,在狀態(tài)跳轉(zhuǎn)的時(shí)候,只有單比特翻轉(zhuǎn),它的功耗相對比較低,該部分后面的異步FIFO章節(jié)會(huì)重點(diǎn)講到。獨(dú)熱碼相對于格雷碼或者二進(jìn)制碼而言,它增加了兩個(gè)寄存器來表示狀態(tài),但是它會(huì)更節(jié)省組合邏輯電路,因?yàn)樗诒容^狀態(tài)的時(shí)候,只需要比較一個(gè)比特位,那么其電路的速度和可靠性就會(huì)增加。
狀態(tài)機(jī)設(shè)計(jì)實(shí)例分析
應(yīng)用場景:編寫一個(gè)自動(dòng)售貨機(jī),功能如下:
共有三種紙幣入口,分別支持10元,20元,50元。貨物售價(jià)為80元。需要支持找錢功能(注意,找錢有兩種情況, 90元和100元;而110元和120元的情況不符合實(shí)際應(yīng)用場景,所以不存在找錢的情況)。
分析:一共有十一種狀態(tài):每種狀態(tài)對應(yīng)當(dāng)前售貨機(jī)已接受的金額,當(dāng)金額達(dá)到80,90,100的時(shí)候售貨機(jī)會(huì)輸出貨物,當(dāng)金額為80時(shí),不找零,當(dāng)金額為90,100的時(shí)候要找零,零錢分別為10,20。
根據(jù)分析畫出如下的狀態(tài)轉(zhuǎn)化圖:
狀態(tài)機(jī)的RTL以及仿真的testbench代碼鏈接:https://pan.baidu.com/s/1dKcwhzNS60Sw-7-UYXqyAQ
提取碼:9khq
在testbench里面模擬了三種情形:輸入為80,90,100的三種情況
仿真的testbench如下圖:
輸入信號:
ten_inst為1表示輸入10,twenty_inst為1表示輸入20,fifty_inst為1便是輸入50。
輸出信號:
out_inst為1表示要輸出貨物;
charge_inst為0,表示不找零,為2‘b11,表示找零20,為2‘b01表示找零10。
-
狀態(tài)機(jī)
+關(guān)注
關(guān)注
2文章
493瀏覽量
28062
原文標(biāo)題:換個(gè)方式理解狀態(tài)機(jī)
文章出處:【微信號:LF-FPGA,微信公眾號:小魚FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
基于C語言的狀態(tài)機(jī)實(shí)現(xiàn)方案

Verilog狀態(tài)機(jī)+設(shè)計(jì)實(shí)例

玩轉(zhuǎn)Spring狀態(tài)機(jī)

如何寫好狀態(tài)機(jī)
狀態(tài)機(jī)舉例
狀態(tài)機(jī)代碼生成工具
簡述使用QII狀態(tài)機(jī)向?qū)绾蝿?chuàng)建一個(gè)狀態(tài)機(jī)

什么是狀態(tài)機(jī) 狀態(tài)機(jī)的描述三種方法
FPGA:狀態(tài)機(jī)簡述

什么是狀態(tài)機(jī)?狀態(tài)機(jī)5要素

狀態(tài)模式(狀態(tài)機(jī))

評論