如何寫(xiě)好狀態(tài)機(jī)
狀態(tài)機(jī):
摩爾狀態(tài)機(jī):輸出與輸入無(wú)關(guān)
米利狀態(tài)機(jī):輸出與輸入有關(guān)
l?如何寫(xiě)好狀態(tài)機(jī):
寫(xiě)狀態(tài)機(jī)可能遇到的問(wèn)題:
1、兩個(gè)狀態(tài)轉(zhuǎn)換時(shí),出現(xiàn)過(guò)渡狀態(tài);
2、在運(yùn)行過(guò)程中,進(jìn)入非法狀態(tài);
3、在一種器件上綜合出理想結(jié)果,移植后不能得到相同結(jié)果;
4、能夠穩(wěn)定工作但是占用資源過(guò)多。
?
摩爾狀態(tài)機(jī)輸出與時(shí)鐘同步,可以在一定程度上剔除抖動(dòng),建議使用摩爾狀態(tài)機(jī)。
?
?
l?3種編碼形式的分析:
1、順序碼:即state_0=00,state_1=01,state_2=10;
2、格雷碼:即state_0=00,state_1=01,state_2=11,state_3=10;
3、獨(dú)熱碼:即state_0=000,state_1=001,state_2=010,state_3=100;
?
分析:使用順序碼時(shí),“01”到“10”這種轉(zhuǎn)化過(guò)程可能出現(xiàn)過(guò)渡態(tài)“11”或“00”,當(dāng)高位翻轉(zhuǎn)過(guò)快“11”當(dāng)?shù)臀环D(zhuǎn)過(guò)快“00”,所以如果狀態(tài)機(jī)狀態(tài)值更多的話(huà),產(chǎn)生過(guò)渡狀態(tài)的概率更大。
?
使用格雷碼時(shí),由于相鄰只有一個(gè)不同,所以可以很大程度上消除延時(shí)引起的過(guò)渡狀態(tài),但是當(dāng)下一個(gè)狀態(tài)有多種路徑時(shí)(不會(huì)只變化相鄰位),可以采用獨(dú)熱碼。
?
?
l?狀態(tài)機(jī)形式
由于很多狀態(tài)機(jī)的輸出是組合邏輯,很容易產(chǎn)生毛刺,所以推薦寫(xiě)狀態(tài)機(jī)時(shí)用時(shí)序邏輯:
例:always@(posedge clk or negedge rst)
bgein
???if ( rst )
??????初始化
???else if (clk event and clk = 1)
???case ()
注意畫(huà)藍(lán)色部分,由于是異步復(fù)位,如果直接進(jìn)行狀態(tài)跳轉(zhuǎn),可能進(jìn)入非法狀態(tài)。