Mealy狀態機的一點理解


      在Mealy狀態機中,輸出是由輸入和現態決定的。而狀態機的次態是由輸入的變化和現態決定的。這個特點決定了再verilog中實現的方式。建議簡單的狀態機就使用兩段式always結構。

       一個always中進行狀態的轉換,一個always中進行輸出狀態的變化。

       剛剛已經說過,狀態的變化是有輸入時鍾和輸入信號的狀態決定的。這里輸入信號不屬於敏感信號變量,因為狀態的轉換只是在輸入時鍾信號的邊沿發生變化。但是在always內部中會使用輸入信號的狀態,依據輸入信號的狀態進行轉換。

       狀態機的輸出是輸入信號和現態決定的。此時輸入信號和現態均屬於這個always的敏感信號。因為這個時候輸出並不是只有在輸入時鍾信號的邊沿發生變化,而是隨着現態和輸入信號的變化而變化。

       在書寫always結構的時候,理解這點還是很重要的。下面就看看具體的代碼吧。

module mealy_state_machine(IN,CP,Y,CR);

input IN,CP,CR;

output Y;

reg [1:0]state;

parameter S0=2'b00,S1=2'b10,S2=2'b11;

reg Y;

always @(posedge CP or negedge CR)

begin

if(~CR)begin state<=0;end

else

begin

case(state)

S0:state<=S0;

S1:

begin

if(IN)state<=S2;

else state<=S0;

end

S2:begin

if(IN)state<=S2;

else state<=S0;

end

endcase

end

end

always @(state or IN)

begin

case(state)

S0:Y<=0;

S1:Y<=0;

S2:begin

if(IN)Y<=0;

else Y<=1;

end

endcase

end

endmodule

下面是狀態轉移圖,狀態轉移圖和預定的狀態轉移圖是一樣的。這也說明代碼描述的功能沒錯。

      上面的狀態轉移圖是對應 康華光電子技術基礎 數字部分(第五版)中P267。但是后面P307中代碼描述這個電路圖好像有點問題。最后綜合出來的狀態機和要求的狀態機不一樣。但是我一直沒看出錯誤來,所以還請大家多多指導。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM