verilog狀態(tài)機例子 如何自動生成verilog狀態(tài)機?
如何自動生成verilog狀態(tài)機?狀態(tài)機的描述主要包括以下幾個方面:如何進行狀態(tài)轉換,狀態(tài)轉換的條件,每個狀態(tài)的輸出是什么;最好的狀態(tài)機是將三者分開,這三者由組合邏輯和非組合邏輯組成,使程序易于閱讀,
如何自動生成verilog狀態(tài)機?
狀態(tài)機的描述主要包括以下幾個方面:如何進行狀態(tài)轉換,狀態(tài)轉換的條件,每個狀態(tài)的輸出是什么;最好的狀態(tài)機是將三者分開,這三者由組合邏輯和非組合邏輯組成,使程序易于閱讀,易于維護,方便添加約束。狀態(tài)的第一部分,總是時序電路的模塊,用同步電路來描述狀態(tài)跳變的過程,從而通過觸發(fā)消除不穩(wěn)定狀態(tài)。狀態(tài)的第二部分,組合邏輯always模塊,用來描述狀態(tài)轉移的判斷條件。通過組合邏輯實現(xiàn),達到即時判斷的效果。狀態(tài)的第三部分在下一個時鐘的邊緣同步改變。時序電路模塊用來描述每一段狀態(tài)的結果輸出。結果表明,三級狀態(tài)機實現(xiàn)了寄存器同步輸出,消除了組合邏輯輸出的不穩(wěn)定性和毛刺,更有利于時序路徑的分組。FPGA的綜合布線效果較好,提高了電路的工作時鐘,提高了布線的成功率。
verilog狀態(tài)機怎么用的?
我更喜歡使用狀態(tài)機。狀態(tài)機的描述方法更接近上層,類似于軟件,更接近人們的思維方式。代碼寫起來也很酷。在文檔中繪制狀態(tài)轉換,并寫出當前狀態(tài)和次狀態(tài)的所有跳轉條件。下面的事情基本上是體力勞動。代碼一般是一個狀態(tài)機(FSM)的當前狀態(tài)(FSM)加上一個計數(shù)器(FSM)再加上各種輸入,兩級三級寫入即可。狀態(tài)機的缺點是性能低下。一般來說,一個州做一件事,但表現(xiàn)很差。在追求高性能的場景中,通常不使用它。在高性能場景中,通常使用管道設計。我覺得狀態(tài)機能寫的電路都是簡單的電路。真正的困難是管道。讓我們說清楚。例如,定義一個狀態(tài)機狀態(tài)next_uu2;state input a,output B,如果這樣寫:
always@(posedge CLK)
case(state)
0:next_2;state<=1
1:next_2;state<=x,也就是說,它與輸入a無關。它取決于當前狀態(tài),這就是所謂的摩爾型狀態(tài)機
如果它看起來像這樣:
總是@(posedge CLK)
case(state)
0:if(a==0)next_uu2;state<=1 else next_2;state<=x
1:next_2;state<=x
狀態(tài)轉換與輸入a有關,這就是所謂的Mealy狀態(tài)機
這是一個時鐘域的問題。這取決于你的時鐘之間的關系。例如,您的兩個時鐘被同一個時鐘源分割(也就是說,這兩個時鐘在頻率和相位之間具有固定的關系),因此可以直接使用它們。如果您的兩個時鐘是異步的(即頻率和相位),則可以直接使用它們,然后您需要在兩個模塊的信號可以交互之前進行同步。
如果是簡單的單比特信號,兩拍后就可以使用;
如果CPU和芯片傳輸數(shù)據(jù),時鐘頻率與此無關,則需要同步CPU傳輸?shù)臄?shù)據(jù)。例如,交互由一個芯片選擇CS和一個enable RW_uuen信號控制組成,然后需要對RW_uuen信號進行兩拍延遲以獲得RW_uu?;舅枷胧歉鶕?jù)這個思想生成特定的電路。