HDLBits (158) — 有限狀態(tài)機(jī):獨(dú)熱編碼邏輯方程
本題鏈接:
https://hdlbits.01xz.net/wiki/Exams/review2015_fsmonehot
給定以下具有 3 個(gè)輸入、3 個(gè)輸出和 10 個(gè)狀態(tài)的狀態(tài)機(jī):
?

假設(shè)使用以下獨(dú)熱編碼,通過(guò)檢查導(dǎo)出下一狀態(tài)邏輯方程和輸出邏輯方程: (S, S1, S11, S110, B0, B1, B2, B3, Count, Wait) = (10'b0000000001, 10? 'b0000000010, 10'b0000000100, ... , 10'b1000000000)
通過(guò)檢查導(dǎo)出狀態(tài)轉(zhuǎn)換和輸出邏輯方程假設(shè)獨(dú)熱編碼。?這里僅需實(shí)現(xiàn)此狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換邏輯和輸出邏輯(組合邏輯部分)。? (測(cè)試臺(tái)將使用非獨(dú)熱編碼輸入進(jìn)行測(cè)試,以確保你不會(huì)嘗試做更復(fù)雜的事情)。
編寫(xiě)生成滿足以下等式的代碼:
B3_next -- 狀態(tài) B1 的下一個(gè)狀態(tài)邏輯
S_next
S1_next
Count_next
Wait_next
done -- 輸出邏輯
counting
shift_ena

題目
提示:
獨(dú)熱編碼狀態(tài)轉(zhuǎn)換邏輯的邏輯方程可以通過(guò)查看狀態(tài)轉(zhuǎn)換圖的邊緣來(lái)得到

答案

非阻塞賦值屬于并行執(zhí)行語(yǔ)句,即下一條語(yǔ)句的執(zhí)行和當(dāng)前語(yǔ)句的執(zhí)行是同時(shí)進(jìn)行的,它不會(huì)阻塞位于同一個(gè)語(yǔ)句塊中后面語(yǔ)句的執(zhí)行。非阻塞賦值語(yǔ)句使用小于等于號(hào)?<=?作為賦值符。
獨(dú)熱編碼即 One-Hot 編碼,又稱一位有效編碼,其方法是使用N位狀態(tài)寄存器來(lái)對(duì)N個(gè)狀態(tài)進(jìn)行編碼,每個(gè)狀態(tài)都由他獨(dú)立的寄存器位,并且在任意時(shí)候,其中只有一位有效。
有限狀態(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ī)。
參考內(nèi)容:
4.2 Verilog 過(guò)程賦值 | 菜鳥(niǎo)教程:
https://www.runoob.com/w3cnote/verilog-process-assign.html
6.3 Verilog 狀態(tài)機(jī)?| 菜鳥(niǎo)教程:
https://www.runoob.com/w3cnote/verilog-fsm.html