換個方式理解狀態機
狀態機概述
有限狀態機通常是由寄存器組和組合邏輯組成時序電路,根據當前狀態和輸入信號可以控制下一個狀態的跳轉,有限狀態機在電路中通常是作為控制模塊,作為整個電路模塊的核心而存在,它主要包括兩大類:Mealy型狀態機和Moore型狀態機。
Mealy型狀態機:其組合邏輯的輸出不僅與當前狀態有關,還與輸入有關。
如下圖所示:
Moore型狀態機:其組合邏輯的輸出只與當前的狀態有關。
如下圖所示:
狀態機的編碼方式主要包括:二進制碼(Binary),格雷碼(gray),獨熱碼(one hot)
比如說當前工作四個狀態的話,其編碼方式如下表1所示:
二進制 |
格雷碼 |
獨熱碼 |
|
S0 |
00 |
00 |
0001 |
S1 |
01 |
01 |
0010 |
S2 |
10 |
11 |
0100 |
S3 |
11 |
10 |
1000 |
格雷碼相對于二進制碼而言,在狀態跳轉的時候,只有單比特翻轉,它的功耗相對比較低,該部分后面的異步FIFO章節會重點講到。獨熱碼相對于格雷碼或者二進制碼而言,它增加了兩個寄存器來表示狀態,但是它會更節省組合邏輯電路,因為它在比較狀態的時候,只需要比較一個比特位,那么其電路的速度和可靠性就會增加。
狀態機設計實例分析
應用場景:編寫一個自動售貨機,功能如下:
共有三種紙幣入口,分別支持10元,20元,50元。貨物售價為80元。需要支持找錢功能(注意,找錢有兩種情況, 90元和100元;而110元和120元的情況不符合實際應用場景,所以不存在找錢的情況)。
分析:一共有十一種狀態:每種狀態對應當前售貨機已接受的金額,當金額達到80,90,100的時候售貨機會輸出貨物,當金額為80時,不找零,當金額為90,100的時候要找零,零錢分別為10,20。
根據分析畫出如下的狀態轉化圖:
狀態機的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。
-
狀態機
+關注
關注
2文章
492瀏覽量
27539
原文標題:換個方式理解狀態機
文章出處:【微信號:LF-FPGA,微信公眾號:小魚FPGA】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論