狀態(tài)機(jī)設(shè)計(jì)的一般步驟 如何自動(dòng)生成verilog狀態(tài)機(jī)?
如何自動(dòng)生成verilog狀態(tài)機(jī)?狀態(tài)機(jī)的描述主要包括以下幾個(gè)方面:如何進(jìn)行狀態(tài)轉(zhuǎn)換,狀態(tài)轉(zhuǎn)換的條件,每個(gè)狀態(tài)的輸出是什么;最好的狀態(tài)機(jī)是將三者分開,這三者由組合邏輯和非組合邏輯組成,使程序易于閱讀,
如何自動(dòng)生成verilog狀態(tài)機(jī)?
狀態(tài)機(jī)的描述主要包括以下幾個(gè)方面:如何進(jìn)行狀態(tài)轉(zhuǎn)換,狀態(tài)轉(zhuǎn)換的條件,每個(gè)狀態(tài)的輸出是什么;最好的狀態(tài)機(jī)是將三者分開,這三者由組合邏輯和非組合邏輯組成,使程序易于閱讀,易于維護(hù),方便添加約束。狀態(tài)的第一部分,總是時(shí)序電路的模塊,用同步電路來描述狀態(tài)跳變的過程,從而通過觸發(fā)消除不穩(wěn)定狀態(tài)。狀態(tài)的第二部分,組合邏輯always模塊,用來描述狀態(tài)轉(zhuǎn)移的判斷條件。通過組合邏輯實(shí)現(xiàn),達(dá)到即時(shí)判斷的效果。狀態(tài)的第三部分在下一個(gè)時(shí)鐘的邊緣同步改變。時(shí)序電路模塊用來描述每一段狀態(tài)的結(jié)果輸出。結(jié)果表明,三級(jí)狀態(tài)機(jī)實(shí)現(xiàn)了寄存器同步輸出,消除了組合邏輯輸出的不穩(wěn)定性和毛刺,更有利于時(shí)序路徑的分組。FPGA的綜合布線效果較好,提高了電路的工作時(shí)鐘,提高了布線的成功率。
verilog狀態(tài)機(jī)怎么用的?
我更喜歡使用狀態(tài)機(jī)。狀態(tài)機(jī)的描述方法更接近上層,類似于軟件,更接近人們的思維方式。代碼寫起來也很酷。在文檔中繪制狀態(tài)轉(zhuǎn)換,并寫出當(dāng)前狀態(tài)和次狀態(tài)的所有跳轉(zhuǎn)條件。下面的事情基本上是體力勞動(dòng)。代碼一般是一個(gè)狀態(tài)機(jī)(FSM)的當(dāng)前狀態(tài)(FSM)加上一個(gè)計(jì)數(shù)器(FSM)再加上各種輸入,兩級(jí)三級(jí)寫入即可。狀態(tài)機(jī)的缺點(diǎn)是性能低下。一般來說,一個(gè)州做一件事,但表現(xiàn)很差。在追求高性能的場(chǎng)景中,通常不使用它。在高性能場(chǎng)景中,通常使用管道設(shè)計(jì)。我覺得狀態(tài)機(jī)能寫的電路都是簡(jiǎn)單的電路。真正的困難是管道。讓我們說清楚。例如,定義一個(gè)狀態(tài)機(jī)狀態(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無關(guān)。它取決于當(dāng)前狀態(tài),這就是所謂的摩爾型狀態(tài)機(jī)
如果它看起來像這樣:
總是@(posedge CLK)
case(state)
0:if(a==0)next_uu2;state<=1 else next_2;state<=x
1:next_2;state轉(zhuǎn)換與輸入a相關(guān),這就是所謂的Mealy狀態(tài)機(jī)