FPGA 基礎篇 換個方式理解有限狀態機

2021-09-11 18:25:50 字數 1458 閱讀 8008

一、狀態機概述

有限狀態機通常是由暫存器組和組合邏輯組成時序電路,根據當前狀態和輸入訊號可以控制下乙個狀態的跳轉,有限狀態機在電路中通常是作為控制模組,作為整個電路模組的核心而存在,它主要包括兩大類:mealy型狀態機和moore型狀態機。

mealy型狀態機:其組合邏輯的輸出不僅與當前狀態有關,還與輸入有關。

如下圖所示:

moore型狀態機:其組合邏輯的輸出只與當前的狀態有關。

如下圖所示:

狀態機的編碼方式主要包括:二進位製碼(binary),格雷碼(gray),獨熱碼(one hot)

比如說當前工作四個狀態的話,其編碼方式如下表1所示:

二進位制        

格雷碼獨熱碼

s0s1

s2s3

格雷碼相對於二進位製碼而言,在狀態跳轉的時候,只有單位元翻轉,它的功耗相對比較低,該部分後面的非同步fifo章節會重點講到。獨熱碼相對於格雷碼或者二進位製碼而言,它增加了兩個暫存器來表示狀態,但是它會更節省組合邏輯電路,因為它在比較狀態的時候,只需要比較乙個位元位,那麼其電路的速度和可靠性就會增加。

二、狀態機設計例項分析

應用場景:編寫乙個自動售貨機,功能如下:

共有三種紙幣入口,分別支援10元,20元,50元。貨物售價為80元。需要支援找錢功能(注意,找錢有兩種情況, 90元和100元;而110元和120元的情況不符合實際應用場景,所以不存在找錢的情況)。

分析:一共有十一種狀態:每種狀態對應當前售貨機已接受的金額,當金額達到80,90,100的時候售貨機會輸出貨物,當金額為80時,不找零,當金額為90,100的時候要找零,零錢分別為10,20。

根據分析畫出如下的狀態轉化圖:

提取碼: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。

FPGA 基礎篇 如何理解時序電路

一 概述 時序邏輯示意圖,如下圖所示。資料從乙個暫存器出來,經過組合邏輯到達下乙個暫存器。在學習數位電路的過程中,我們都知道時序邏輯,但是大家對時序邏輯真的了解嗎?1 純組合邏輯電路的缺點在哪?3 純組合邏輯電路完成不了什麼功能?2 為什麼需要時鐘和暫存器呢?帶著這三個疑問我們來認識一下時序邏輯電路...

FPGA基礎入門篇 四 邊沿檢測電路

fpga基礎入門篇 四 邊沿檢測電路 一 邊沿檢測 邊沿檢測,就是檢測輸入訊號,或者fpga內部邏輯訊號的跳變,即上公升沿或者下降沿的檢測。在檢測到所需要的邊沿後產生乙個高電平的脈衝。這在fpga電路設計中相當的廣泛。沒有復位的情況下,正常的工作流程如下 1 d觸發器經過時鐘clk的觸發,輸出tri...

多執行緒基礎篇(2) 理解中斷

執行緒中斷,可以理解為乙個現成的標識屬性,它表示乙個執行中的執行緒是否被其他執行緒進行了中斷操作,中斷可以用來進行強制終結執行緒 使執行緒進入終止狀態 即在執行run方法過程中直接退出 或者說跳過某段 執行緒中斷的方法 1 stop 方法 不在使用此方法,其中斷線程是立即中斷的,即使是在同步 塊中對...