看《從算法設計到硬件邏輯的實現》這本電子書時,遇到了一個問題,就是有限狀態(tài)機的編寫中,狀態(tài)編碼是采用格雷碼還是獨熱碼呢?究竟采用哪一種編碼呢?
采用獨熱碼為什么節(jié)省許多組合電路?
等等問題,就這些問題我收集了一些說法,覺得很有意思,在這里我們一起討論下。
還是先簡介下有限狀態(tài)機:
有限狀態(tài)機是由寄存器組和組合邏輯構成的硬件時序電路,其狀態(tài)(即由寄存器組的1和0的組合狀態(tài)所構成的有限個狀態(tài))只可能在同一時鐘跳變沿的情況下才能從一個狀態(tài)轉向另一個狀態(tài),究竟轉向哪一狀態(tài)還是留在原狀態(tài)不但取決于各個輸入值,還取決于當前所在狀態(tài)。這里是指Mealy型有限狀態(tài)機。
Moore型有限狀態(tài)機的狀態(tài)轉移只取決于當前狀態(tài),與輸入值無關。
在Verilog HDL中可以用許多種方法來描述有限狀態(tài)機,最常用的方法是用always語句和case語句。下面的狀態(tài)轉移圖表示了一個有限狀態(tài)機:
上面的狀態(tài)轉移圖表示了一個四狀態(tài)的有限狀態(tài)機,它的同步時鐘是Clock,輸入信號是 A 和 rst_n ,輸出信號是 F 和 G。狀態(tài)的轉移只能在同步時鐘(Clock)的上升沿時發(fā)生,往哪個狀態(tài)的轉移則取決于目前所在的狀態(tài)和輸入的信號(Reset 和 A)。
我們采用兩種狀態(tài)編碼方式來實現這個有限狀態(tài)機:
1)采用格雷碼:
在ISE中,綜合后,得到的RTL Schematic:
2)采用獨熱碼:
程序和上面的幾乎一樣,只需要改下,各個狀態(tài)對應的編碼值即可,還有最后的default:state 《= Idle;
還是給出程序吧:
上面兩個程序的主要不同點是狀態(tài)編碼,2)采用了獨熱編碼,而1)則采用Gray碼,究竟采用哪一種編碼好要看具體情況而定。對于用FPGA實現的有限狀態(tài)機建議采用獨熱碼,因為雖然采用獨熱編碼多用了兩個觸發(fā)器,但所用組合電路可省下許多,因而使電路的速度和可靠性有顯著提高,而總的單元數并無顯著增加。采用了獨熱編碼后有了多余的狀態(tài),就有一些不可到達的狀態(tài),為此在CASE語句的最后需要增加default分支項,以確保多余狀態(tài)能回到Idle狀態(tài)。
上面所說的多余狀態(tài)是:4位編碼有16種,獨熱碼只列出了4種,剩下了12種,就是多余的狀態(tài)。
另一位大牛只說了一句話,但很有啟發(fā):
那我把3—8譯碼器的真值表給出來,確實如此。
審核編輯 :李倩
-
FPGA
+關注
關注
1645文章
22050瀏覽量
618719 -
寄存器
+關注
關注
31文章
5434瀏覽量
124577 -
輸出信號
+關注
關注
0文章
302瀏覽量
12246
原文標題:FPGA中有限狀態(tài)機的狀態(tài)編碼采用格雷碼還是獨熱碼?
文章出處:【微信號:FPGA研究院,微信公眾號:FPGA研究院】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
FPGA Verilog HDL 設計實例系列連載--------有限狀態(tài)機設計
為什么相對于格雷碼來說,獨熱碼會使用更多的觸發(fā)器和更少的組合邏輯???
【FPGA開源教程連載】第七章 狀態(tài)機設計實例
fpga Default Latch FPGA設計的獨熱碼的使用和調試技巧的詳細概述
有限狀態(tài)機有什么類型?
有限狀態(tài)機的建模與優(yōu)化設計
VHDL有限狀態(tài)機設計-ST
初學者對有限狀態(tài)機(FSM)的設計的認識

如何使用FPGA實現序列檢測有限狀態(tài)機

評論