四段式狀態(tài)機(jī) 在FPGA中,相信有FPGA學(xué)習(xí)經(jīng)驗(yàn)的都能了解,現(xiàn)在流行的狀態(tài)機(jī)設(shè)計(jì),一般可分為一段式、兩段式和三段式,如果不了解的,可以自行百度。 上面的三種設(shè)計(jì)法雖然很流行,但設(shè)計(jì)時(shí)仍然要考慮很多因素,導(dǎo)致總是要反反復(fù)復(fù)調(diào)試才能設(shè)計(jì)成功。這不符合明德?lián)P一次考慮一個(gè)因素、一次性設(shè)計(jì)正確的設(shè)計(jì)理念。為此,明德?lián)P特推出四段式狀態(tài)機(jī)的寫法。 四段式不是指三個(gè)always代碼,而是四段程序。使用四段式的寫法,可參照明德?lián)PGVIM特色指令Ztj產(chǎn)生的狀態(tài)機(jī)模板。 第一段,同步時(shí)序的always模塊,格式化描述次態(tài)遷移到現(xiàn)態(tài)寄存器。
第二段,組合邏輯的always模塊,描述狀態(tài)轉(zhuǎn)移條件判斷。注意轉(zhuǎn)移條件用信號(hào)來(lái)表示,信號(hào)名要按明德?lián)P規(guī)則來(lái)命名。
第三段,用assign定義轉(zhuǎn)移條件。注意條件一定要加上現(xiàn)態(tài)。
第四段,設(shè)計(jì)輸出信號(hào)。明德?lián)P規(guī)范要求一個(gè)always設(shè)計(jì)一個(gè)信號(hào),因此有多少個(gè)輸出信號(hào),就有多少個(gè)always。
明德?lián)P四段式狀態(tài)機(jī)符合一次只考慮一個(gè)因素的設(shè)計(jì)理念。第一段代碼,照抄格式,完全不用想其他的。第二段代碼,只考慮狀態(tài)之間的跳轉(zhuǎn),也就是說(shuō)各個(gè)狀態(tài)機(jī)之間跳轉(zhuǎn)關(guān)系。第三段代碼,只考慮跳轉(zhuǎn)條件。第三段,每個(gè)信號(hào)逐個(gè)設(shè)計(jì)。 明德?lián)P為了保證一次設(shè)計(jì)正確,還制定了一些規(guī)范。例如第二段的跳轉(zhuǎn)條件,只準(zhǔn)用信號(hào)名代替,并且制定了跳轉(zhuǎn)條件的命名規(guī)范,1是解決了命名困難的問(wèn)題,2是對(duì)轉(zhuǎn)移條件一目了然,如idl2s1_start,就可以看出是IDLE跳到S1狀態(tài)的條件。還有,明德?lián)P規(guī)定轉(zhuǎn)移條件的格式,一定是“ 當(dāng)前狀態(tài)&&具體條件”,以防想不到的情況出現(xiàn)。有了這些規(guī)范的保證,無(wú)論多復(fù)雜的場(chǎng)合,任何設(shè)計(jì)都能有條理、有步驟地一次性設(shè)計(jì)正確。 |