HDLBits (119) — 簡(jiǎn)單的有限狀態(tài)機(jī)1(異步復(fù)位)
本題鏈接:
https://hdlbits.01xz.net/wiki/Fsm1
這是一個(gè)具有兩個(gè)狀態(tài),一個(gè)輸入和一個(gè)輸出的Moore 型狀態(tài)機(jī)。請(qǐng)注意,重置狀態(tài)為B。
這個(gè)練習(xí)與 fsm1s 相同,但是使用了異步復(fù)位。


題目
提示:
是的,除了編寫(xiě)有限狀態(tài)機(jī),還有其他方法可以做到這一點(diǎn)。但這并不是這個(gè)練習(xí)的重點(diǎn)。
提示:
這是一個(gè)T輸入反轉(zhuǎn)的T觸發(fā)器。

答案

輸出波形


有限狀態(tài)機(jī)(Finite-State Machine,F(xiàn)SM),簡(jiǎn)稱狀態(tài)機(jī),是表示有限個(gè)狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動(dòng)作等行為的數(shù)學(xué)模型。狀態(tài)機(jī)不僅是一種電路的描述工具,而且也是一種思想方法,在電路設(shè)計(jì)的系統(tǒng)級(jí)和 RTL 級(jí)有著廣泛的應(yīng)用。
Verilog 中狀態(tài)機(jī)主要用于同步時(shí)序邏輯的設(shè)計(jì),能夠在有限個(gè)狀態(tài)之間按一定要求和規(guī)律切換時(shí)序電路的狀態(tài)。狀態(tài)的切換方向不但取決于各個(gè)輸入值,還取決于當(dāng)前所在狀態(tài)。狀態(tài)機(jī)可分為 2 類:Moore 狀態(tài)機(jī)和 Mealy 狀態(tài)機(jī)。
3段式狀態(tài)機(jī)設(shè)計(jì)如下:
首先,根據(jù)狀態(tài)機(jī)的個(gè)數(shù)確定狀態(tài)機(jī)編碼。利用編碼給狀態(tài)寄存器賦值,代碼可讀性更好。
狀態(tài)機(jī)第一段,時(shí)序邏輯,非阻塞賦值,傳遞寄存器的狀態(tài)。
狀態(tài)機(jī)第二段,組合邏輯,阻塞賦值,根據(jù)當(dāng)前狀態(tài)和當(dāng)前輸入,確定下一個(gè)狀態(tài)機(jī)的狀態(tài)。
狀態(tài)機(jī)第三段,時(shí)序邏輯,非阻塞賦值,根據(jù)當(dāng)前狀態(tài)和當(dāng)前輸入,確定輸出信號(hào)。
為確保系統(tǒng)上電后有一個(gè)明確、穩(wěn)定的初始狀態(tài),或系統(tǒng)運(yùn)行狀態(tài)紊亂時(shí)可以恢復(fù)到正常的初始狀態(tài),數(shù)字系統(tǒng)設(shè)計(jì)中一定要有復(fù)位電路模塊。復(fù)位電路異常可能會(huì)導(dǎo)致整個(gè)系統(tǒng)的功能異常,所以在一定程度上,復(fù)位電路的重要性也不亞于時(shí)鐘電路。
復(fù)位電路可分類為同步復(fù)位和異步復(fù)位。
同步復(fù)位
同步復(fù)位是指復(fù)位信號(hào)在時(shí)鐘有效邊沿到來(lái)時(shí)有效。如果沒(méi)有時(shí)鐘,無(wú)論復(fù)位信號(hào)怎樣變化,電路也不執(zhí)行復(fù)位操作。
同步復(fù)位常常會(huì)被綜合成如下電路:

同步復(fù)位的優(yōu)點(diǎn):信號(hào)間是同步的,能濾除復(fù)位信號(hào)中的毛刺,有利于時(shí)序分析。
同步復(fù)位的缺點(diǎn):大多數(shù)觸發(fā)器單元是沒(méi)有同步復(fù)位端的,采用同步復(fù)位會(huì)多消耗部分邏輯資源。且復(fù)位信號(hào)的寬度必須大于一個(gè)時(shí)鐘周期,否則可能會(huì)漏掉復(fù)位信號(hào)。
異步復(fù)位
異步復(fù)位是指無(wú)論時(shí)鐘到來(lái)與否,只要復(fù)位信號(hào)有效,電路就會(huì)執(zhí)行復(fù)位操作。
異步復(fù)位常常會(huì)被綜合成如下電路:

異步復(fù)位的優(yōu)點(diǎn):大多數(shù)觸發(fā)器單元有異步復(fù)位端,不會(huì)占用額外的邏輯資源。且異步復(fù)位信號(hào)不經(jīng)過(guò)處理直接引用,設(shè)計(jì)相對(duì)簡(jiǎn)單,信號(hào)識(shí)別快速方便。
異步復(fù)位的缺點(diǎn):復(fù)位信號(hào)與時(shí)鐘信號(hào)無(wú)確定的時(shí)序關(guān)系,異步復(fù)位很容易引起時(shí)序上 removal 和 recovery 的不滿足。且異步復(fù)位容易受到毛刺的干擾,產(chǎn)生意外的復(fù)位操作。
參考內(nèi)容:
5.1 Verilog 復(fù)位簡(jiǎn)介 | 菜鳥(niǎo)教程:
https://www.runoob.com/w3cnote/verilog2-reset.html
6.3 Verilog 狀態(tài)機(jī) | 菜鳥(niǎo)教程:
https://www.runoob.com/w3cnote/verilog-fsm.html