換個方式理解狀態機
狀態機概述
有限狀態機通常是由寄存器組和組合邏輯組成時序電路,根據當前狀態和輸入信號可以控制下一個狀態的跳轉,有限狀態機在電路中通常是作為控制模塊,作為整個電路模塊的核心而存在,它主要包括兩大類: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】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
基于C語言的狀態機實現方案
![基于C語言的<b class='flag-5'>狀態機</b>實現方案](https://file1.elecfans.com/web2/M00/A2/B9/wKgZomUBEOOAHc1RAAAVbPYhZrc323.jpg)
Verilog狀態機+設計實例
![Verilog<b class='flag-5'>狀態機</b>+設計實例](https://file1.elecfans.com/web2/M00/C0/EA/wKgaomXI1-KAXkFgAAA1Fl4mqhA227.png)
如何寫好狀態機
什么是狀態機 狀態機的描述三種方法
什么是狀態機?狀態機5要素
![什么是<b class='flag-5'>狀態機</b>?<b class='flag-5'>狀態機</b>5要素](https://file.elecfans.com/web2/M00/0C/18/poYBAGD_fReAI7mmAAAbpz2ipdw400.png)
狀態模式(狀態機)
![<b class='flag-5'>狀態</b>模式(<b class='flag-5'>狀態機</b>)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論