




已閱讀5頁,還剩64頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
.,EDA技術與應用,第10章Verilog狀態(tài)機設計技術,.,EDA技術與應用,10.1Verilog狀態(tài)機的一般形式,廣義而論,只要涉及觸發(fā)器的電路,無論電路大小,都能歸結為狀態(tài)機。有限狀態(tài)機用來實現(xiàn)一個數(shù)字電路的控制部分。與CPU的功能類似,綜合了時序邏輯和組合邏輯電路。CPU是通過操作指令和硬件操作單元來實現(xiàn)控制功能,而有限狀態(tài)機是通過狀態(tài)轉(zhuǎn)移來實現(xiàn)控制功能。綜合器能從不同表述形態(tài)的HDL代碼中輕易萃取出狀態(tài)機,并加以多側面、多目標和多種形式的優(yōu)化。,.,EDA技術與應用,10.1.1狀態(tài)機的特點與優(yōu)勢,面對同一個設計項目的不同形式的邏輯設計方案中,利用有限狀態(tài)機的設計方案來描述和實現(xiàn)將可能是最佳選擇。,有限狀態(tài)機的優(yōu)越性:(1)高效的順序控制模型(2)容易利用現(xiàn)成的EDA工具進行優(yōu)化設計(3)性能穩(wěn)定(4)高速性能(5)高可靠性能,.,EDA技術與應用,10.1.2狀態(tài)機的一般結構,用Verilog設計的狀態(tài)機根據(jù)不同的分類標準可以分為多種不同形式:從狀態(tài)機的信號輸出方式上分:Mealy型和Moore型狀態(tài)機從狀態(tài)機的結構描述上分:單過程狀態(tài)機和多過程狀態(tài)機從狀態(tài)表達方式上分:符號化狀態(tài)機和確定狀態(tài)編碼的狀態(tài)機從狀態(tài)機編碼方式上分:順序編碼、一位熱編碼或其他編碼方式狀態(tài)機,最一般和最常用的狀態(tài)機結構中通常包含了說明部分、主控時序過程、主控組合過程、輔助過程等幾個部分,.,EDA技術與應用,說明部分中包含狀態(tài)轉(zhuǎn)換變量的定義和所有可能狀態(tài)的說明,必要時還要確定每一狀態(tài)的編碼形式,最好是純抽象的符號化狀態(tài)機,即所定義的狀態(tài)序列和狀態(tài)轉(zhuǎn)換變量都不涉及具體的數(shù)值、編碼,甚至數(shù)據(jù)類型或變量類型。,1、狀態(tài)機說明部分,parameter2:0s0=0,s1=1,s2=2,s3=3,s4=4;reg2:0current_state,next_state;,狀態(tài)元素s0、s1等用關鍵詞parameter來定義,各狀態(tài)元素所取得數(shù)值或編碼必須寫出具體值。parameter旁的位寬說明可寫可不寫current_state是現(xiàn)態(tài)變量和next_state是次態(tài)變量,.,EDA技術與應用,2005版本的SystemVerilog,1、狀態(tài)機說明部分,typedefenums0,s1,s2,s3,s4type_user;type_usercurrent_state,next_state;,typedef是用戶數(shù)據(jù)類型自定義語句關鍵詞enum是定義枚舉類型關鍵詞type_user是用戶定義狀態(tài)元素s0、s1、s2、s3、s4為type_user類型的標識符第二句將狀態(tài)變量current_state、next_state定義為type_user類型,.,EDA技術與應用,2、主控時序過程,主控時序過程指負責狀態(tài)機運轉(zhuǎn)和在時鐘驅(qū)動下負責狀態(tài)轉(zhuǎn)換的過程。狀態(tài)機是隨外部時鐘信號,以同步時序方式工作的,狀態(tài)機中必須包含一個對工作時鐘敏感的過程,狀態(tài)機向下一狀態(tài)轉(zhuǎn)換的實現(xiàn)僅取決于時鐘信號的到來。當時鐘的有效跳變到來時,時序過程只是機械地將代表次態(tài)的信號next_state中的內(nèi)容送入現(xiàn)態(tài)的信號current_state中,而信號next_state中的內(nèi)容完全由其他過程根據(jù)實際情況來決定。此時序過程中也可放置一些同步或異步清0或置位方面的控制信號。,.,EDA技術與應用,3、主控組合過程,主控組合過程根據(jù)當前狀態(tài)和外部的信號發(fā)出控制信號,同時確定下一狀態(tài)的走向。,在時鐘的作用下,REG時序過程將次態(tài)信號的內(nèi)容next_state傳遞給現(xiàn)態(tài)信號current_stateCOM組合過程通過信號current_state中的狀態(tài)值,進入相應的狀態(tài);在此狀態(tài)中根據(jù)外部的信號(如state_inputs)向內(nèi)或向外發(fā)出控制信號(如com_outputs);同時根據(jù)外部信號(如state_inputs)向次態(tài)信號next_state中賦相應的狀態(tài)值,確定下一狀態(tài)的走向;此狀態(tài)值通過next_state傳給REG時序過程,直到下一個時鐘脈沖的到來。,.,EDA技術與應用,4、輔助過程,輔助過程用于配合狀態(tài)機工作的組合過程或時序過程。例如為了完成某種算法的過程,或為了存儲數(shù)據(jù)的存儲過程,或用于配合狀態(tài)機工作的其他時序過程等。,例10-1,moduleFSM_EXP(clk,reset,state_inputs,comb_outputs);inputclk;/狀態(tài)機工作時鐘inputreset;/狀態(tài)機復位控制input0:1state_inputs;/來自外部的狀態(tài)機控制信號output3:0comb_outputs;/狀態(tài)機對外部發(fā)出的控制信號輸出reg3:0comb_outputs;parameters0=0,s1=1,s2=2,s3=3,s4=4;/定義狀態(tài)參數(shù)reg4:0c_st,next_state;/定義現(xiàn)態(tài)和次態(tài)的狀態(tài)變量always(posedgeclkornegedgereset)begin/主控時序過程if(!reset)c_st=s0;/復位有效時,下一狀態(tài)進入初態(tài)s0elsec_st=next_state;end,.,EDA技術與應用,例10-1-續(xù),always(c_storstate_inputs)begin/主控組合過程case(c_st)/為了在仿真波形中容易看清,將current_state簡寫為c_sts0:begincomb_outputs=5;/進入狀態(tài)s0時,輸出控制碼5if(state_inputs=2b00)next_state=s0;/條件滿足,回初態(tài)s0elsenext_state=s1;end/條件不滿足,到下一狀態(tài)s1s1:begincomb_outputs=8;/進入狀態(tài)s1時,輸出控制碼8if(state_inputs=2b01)next_state=s1;elsenext_state=s2;ends2:begincomb_outputs=12;if(state_inputs=2b10)next_state=s0;elsenext_state=s3;ends3:begincomb_outputs=14;if(state_inputs=2b11)next_state=s3;elsenext_state=s4;ends4:begincomb_outputs=9;next_state=s0;enddefault:next_state=s0;/現(xiàn)態(tài)若未出現(xiàn)以上各態(tài),返回初態(tài)s0endcaseendendmodule,.,EDA技術與應用,狀態(tài)機的狀態(tài)轉(zhuǎn)換圖,狀態(tài)機的工作時序,.,EDA技術與應用,10.1.3初始控制與表述,Verilog狀態(tài)機的相關設置控制:,(1)打開“狀態(tài)機萃取”開關:AssignmentsSettings,在category欄,選擇Analysisinput7:0D;/來自0809轉(zhuǎn)換好的8位數(shù)據(jù)inputCLK,RST;/狀態(tài)機工作時鐘和系統(tǒng)復位控制inputEOC;/轉(zhuǎn)換狀態(tài)指示,低電平表示正在轉(zhuǎn)換outputALE;/8個模擬信號通道地址鎖存信號outputSTART,OE;/轉(zhuǎn)換啟動信號和數(shù)據(jù)輸出三態(tài)控制信號outputADDA,LOCK_T;/信號通道控制信號和鎖存測試信號output7:0Q;regALE,START,OE;parameters0=0,s1=1,s2=2,s3=3,s4=4;/定義各狀態(tài)子類型reg4:0cs,next_state;/為了便于仿真顯示,現(xiàn)態(tài)名簡寫為csreg7:0REGL;regLOCK;/轉(zhuǎn)換后數(shù)據(jù)輸出鎖存時鐘信號always(csorEOC)begin/主控組合過程,規(guī)定各狀態(tài)轉(zhuǎn)換方式case(cs)s0:beginALE=0;START=0;OE=0;LOCK=0;next_state=s1;end/0809初始化s1:beginALE=1;START=1;OE=0;LOCK=0;next_state=s2;end/啟動采樣信號START,.,EDA技術與應用,例10-2-續(xù):ADC0809采樣控制,s2:beginALE=0;START=0;OE=0;LOCK=0;if(EOC=1b1)next_state=s3;/EOC=0表明轉(zhuǎn)換結束elsenext_state=s2;end/轉(zhuǎn)換未結束,繼續(xù)等待s3:beginALE=0;START=0;OE=1;LOCK=0;/開啟OE,打開AD數(shù)據(jù)口next_state=s4;end/下一狀態(tài)無條件轉(zhuǎn)向s4s4:beginALE=0;START=0;OE=1;LOCK=1;/開啟數(shù)據(jù)鎖存信號next_state=s0;enddefault:beginALE=0;START=0;OE=0;LOCK=0;next_state=s0;endendcaseendalways(posedgeCLKorposedgeRST)begin/時序過程if(RST)cs=s0;elsecs=next_state;endalways(posedgeLOCK)if(LOCK)REGL=D;/在LOCK上升沿將轉(zhuǎn)換好的數(shù)據(jù)鎖入assignADDA=0;assignQ=REGL;/選擇模擬信號進入通道IN0assignLOCK_T=LOCK;/將測試信號輸出endmodule,.,EDA技術與應用,采樣狀態(tài)機結構框圖,程序中包含三個過程結構:時序過程REG:在CLK的驅(qū)動下,不斷將next_state中的內(nèi)容(狀態(tài)元素)賦給現(xiàn)態(tài)cs,并由此信號將狀態(tài)變量傳輸給COM組合過程。組合過程COM:(1)狀態(tài)譯碼功能。根據(jù)從現(xiàn)態(tài)信號cs中獲得的狀態(tài)變量,以及來自0809的狀態(tài)線信號EOC,決定下一狀態(tài)的轉(zhuǎn)移方向,即次態(tài)的狀態(tài)變量。(2)采樣控制功能。根據(jù)cs中的狀態(tài)變量確定對0809的控制信號ALE、START、OE等輸出相應控制信號,當采樣結束后還要通過LOCK向鎖存器過程LATCH發(fā)出鎖存信號。鎖存器輔助過程LATCH:將由0809的D7.0數(shù)據(jù)輸出口輸出的8位已轉(zhuǎn)換好的數(shù)據(jù)鎖存起來。,.,EDA技術與應用,ADC0809采樣狀態(tài)機工作時序,狀態(tài)s0:復位信號后即進入狀態(tài)s0。狀態(tài)s1:第二個時鐘上升沿后,狀態(tài)機進入狀態(tài)s1(即cs=s1),由START、ALE發(fā)出啟動采樣和地址選通的控制信號。狀態(tài)s2:EOC由高電平變?yōu)榈碗娖剑?809的8位數(shù)據(jù)輸出端呈現(xiàn)高阻態(tài)“ZZ”。等待CLK數(shù)個時鐘周期后,EOC變?yōu)楦唠娖剑硎巨D(zhuǎn)換結束。狀態(tài)s3:在此狀態(tài)的輸出允許OE被設置成高電平。此時8089的數(shù)據(jù)輸出端D7.0即輸出已經(jīng)轉(zhuǎn)換好的數(shù)據(jù)5EH。狀態(tài)s4:LOCK_T發(fā)出一個脈沖,其上升沿立即將D端口的5E鎖入Q和REGL中。,.,EDA技術與應用,例10-3:修改后的ADC0809采樣控制,/將組合過程COM拆分為兩個部分always(csorEOC)begin/狀態(tài)譯碼和狀態(tài)轉(zhuǎn)換case(cs)s0:next_state=s1;s1:next_state=s2;s2:if(EOC=1b1)next_state=s3;elsenext_state=s2;s3:next_state=s4;s4:next_state=s0;default:next_state=s0;endcaseendalways(csorEOC)begin/對外控制信號輸出case(cs)s0:beginALE=0;START=0;OE=0;LOCK=0;ends1:beginALE=1;START=1;OE=0;LOCK=0;ends2:beginALE=0;START=0;OE=0;LOCK=0;ends3:beginALE=0;START=0;OE=1;LOCK=0;ends4:beginALE=0;START=0;OE=1;LOCK=1;enddefault:beginALE=0;START=0;OE=0;LOCK=0;endendcaseend,.,EDA技術與應用,10.2.2序列檢測器及其狀態(tài)機設計,序列檢測器用于檢測一組或多組由二進制碼組成的脈沖序列信號,當序列檢測器連續(xù)收到一組串行二進制碼后,如果這組碼與檢測器中預先設置的碼相同,則輸出1,否則輸出0。這種檢測的關鍵在于正確碼的收到必須是連續(xù)的,這就要求檢測器必須記住前一次正確碼及正確序列,直到連續(xù)的檢測中所收到的每一位碼都與預置數(shù)的對應碼相同,任何一位不相等都將回到初始狀態(tài)重新開始檢測。,.,EDA技術與應用,例10-4:8位序列數(shù)11010011的序列檢測器,moduleSCHK(inputCLK,DIN,RST,outputSOUT);parameters0=40,s1=41,s2=42,s3=43,s4=44,s5=45,s6=46,s7=47,s8=48;/設定9個狀態(tài)參數(shù)reg8:0ST,NST;always(posedgeCLKorposedgeRST)beginif(RST)ST=s0;elseST=NST;endalways(STorDIN)begin/11010011串行輸入,高位在前case(ST)s0:if(DIN=1b1)NST=s1;elseNST=s0;s1:if(DIN=1b1)NST=s2;elseNST=s0;s2:if(DIN=1b0)NST=s3;elseNST=s0;s3:if(DIN=1b1)NST=s4;elseNST=s0;s4:if(DIN=1b0)NST=s5;elseNST=s0;s5:if(DIN=1b0)NST=s6;elseNST=s0;s6:if(DIN=1b1)NST=s7;elseNST=s0;s7:if(DIN=1b1)NST=s8;elseNST=s0;s8:if(DIN=1b0)NST=s3;elseNST=s0;default:NST=s0;endcaseendassignSOUT=(ST=s8);endmodule,.,EDA技術與應用,10.3Mealy型狀態(tài)機設計,Mealy型狀態(tài)機與Moore型狀態(tài)機相比,輸出變化要領先一個周期,即一旦輸入信號或狀態(tài)發(fā)生變化,輸出信號即刻發(fā)生變化。Mealy機與Moore機在設計上基本相同,只是Mealy機的組合過程結構中的輸出信號是當前狀態(tài)和當前輸入的函數(shù)。Mealy機將時序過程與組合過程混合,在同一個過程中決定主控狀態(tài)譯碼和主控時序,所以不需要用次態(tài)來傳遞狀態(tài)。,.,EDA技術與應用,例10-5:雙過程Mealy機,moduleMEALY1(inputCLK,DIN1,DIN2,RST,outputreg4:0Q);reg4:0PST;parameterst0=0,st1=1,st2=2,st3=3,st4=4;always(posedgeCLKorposedgeRST)begin:REGif(RST)PST=st0;elsebegincase(PST)st0:if(DIN1=1b1)PST=st1;elsePST=st0;st1:if(DIN1=1b1)PST=st2;elsePST=st1;st2:if(DIN1=1b1)PST=st3;elsePST=st2;st3:if(DIN1=1b1)PST=st4;elsePST=st3;st4:if(DIN1=1b0)PST=st0;elsePST=st4;default:PST=st0;endcaseendendAlways(PSTofDIN2)begin:COM/輸出控制信號的過程case(PST)st0:if(DIN2=1b1)Q=5H10;elseQ=5H0A;st1:if(DIN2=1b0)Q=5H17;elseQ=5H14;st2:if(DIN2=1b1)Q=5H15;elseQ=5H13;st3:if(DIN2=1b0)Q=5H1B;elseQ=5H09;st4:if(DIN2=1b1)Q=5H1D;elseQ=5H0D;default:Q=5b00000;endcaseendendmodule,.,EDA技術與應用,過程REG是時序與組合混合型過程,將狀態(tài)機的主控時序電路和主控狀態(tài)譯碼電路同時用一個過程來表達。過程COM負責根據(jù)狀態(tài)和輸入信號給出不同的對外控制信號輸出。,雙過程Mealy機狀態(tài)圖,.,EDA技術與應用,雙過程Mealy機仿真波形,PST是現(xiàn)態(tài)轉(zhuǎn)換情況,DIN1控制各狀態(tài)的轉(zhuǎn)換方式,DIN2控制對外控制信號碼的輸出:當復位后,且DIN1=0時,一直處于st0狀態(tài),若此時DIN2=0,輸出碼0AH;當DIN1都為1時,每一個時鐘上升沿后,都轉(zhuǎn)入下一狀態(tài),直到狀態(tài)s4,同時根據(jù)每一個狀態(tài)下的DIN2的值輸出相應設定的控制碼,一直到DIN1=0才回到初始狀態(tài)s0。輸出信號中存在毛刺,為了排除毛刺,可通過選擇可能的優(yōu)化設置,也可將輸出通過寄存器鎖存,濾除毛刺。,.,EDA技術與應用,例10-6:單過程Mealy機,moduleMEALY2(inputCLK,DIN1,DIN2,RST,outputreg4:0Q);reg4:0PST;parameterst0=0,st1=1,st2=2,st3=3,st4=4;always(posedgeCLKorposedgeRST)begin:REGif(RST)PST=st0;elsebegincase(PST)st0:beginif(DIN2=1b1)Q=5H10;elseQ=5H0A;if(DIN1=1b1)PST=st1;elsePST=st0;endst1:beginif(DIN2=1b0)Q=5H17;elseQ=5H14;if(DIN1=1b1)PST=st2;elsePST=st1;endst2:beginif(DIN2=1b1)Q=5H15;elseQ=5H13;if(DIN1=1b1)PST=st3;elsePST=st2;endst3:beginif(DIN2=1b0)Q=5H1B;elseQ=5H09;if(DIN1=1b1)PST=st4;elsePST=st3;endst4:beginif(DIN2=1b1)Q=5H1D;elseQ=5H0D;if(DIN1=1b0)PST=st0;elsePST=st4;default:beginPST=st0;Q=5b00000;endendcaseendendendmodule,.,EDA技術與應用,單過程Mealy機仿真波形,單過程Mealy機狀態(tài)圖(與雙過程相同),.,EDA技術與應用,例10-7:單過程序列檢測器Mealy機,moduleSCHK(inputCLK,DIN,RST,outputSOUT);parameters0=0,s1=1,s2=2,s3=3,s4=4,s5=5,s6=6,s7=7,s8=8;reg8:0ST;always(posedgeCLK)beginSOUT=0;if(RST)ST=s0;elsebegincase(ST)s0:if(DIN=1b1)ST=s1;elseST=s0;s1:if(DIN=1b1)ST=s2;elseST=s0;s2:if(DIN=1b0)ST=s3;elseST=s0;s3:if(DIN=1b1)ST=s4;elseST=s0;s4:if(DIN=1b0)ST=s5;elseST=s0;s5:if(DIN=1b0)ST=s6;elseST=s0;s6:if(DIN=1b1)ST=s7;elseST=s0;s7:if(DIN=1b1)ST=s8;elseST=s0;s8:beginSOUT=1;if(DIN=1b0)ST=s3;elseST=s0;enddefault:ST=s0;endcaseendendendmodule,.,EDA技術與應用,單過程序列檢測器Mealy機仿真波形,與雙過程序列檢測器Moore機相比,單過程Mealy機的仿真波形在SOUT的輸出延遲了一個時鐘,這種延遲數(shù)據(jù)具有濾波作用。如果SOUT是一個多位復雜算法的組合邏輯輸出,可能會有許多毛刺,引起不良后果,利用單過程Mealy機形式可以有所改善。,雙過程序列檢測器Moore機仿真波形,.,EDA技術與應用,10.4狀態(tài)機圖形編輯設計,(1)打開狀態(tài)機圖形編輯窗:在QuartusII的工程管理窗中點擊FileNew,選擇狀態(tài)機文件StateMachineFile。(2)打開狀態(tài)機圖形編輯窗后,在QuartusII的工程管理窗中點擊ToolsStateMachineWizard。,.,EDA技術與應用,(3)在StateMachineWizard最初的對話框中選擇生成一個新狀態(tài)機“Createanewstatemachinedesign”,然后在后面出來的框中分別選擇復位信號控制方式和有效方式,如異步和高電平有效:Asynchronous和active-high。,.,EDA技術與應用,(4)在狀態(tài)機編輯器對話框中設置狀態(tài)元素、輸入輸出信號、狀態(tài)轉(zhuǎn)換條件等。,.,EDA技術與應用,(5)完成后存盤,文件后綴是.smf??梢詮臓顟B(tài)機圖形編輯器上看到轉(zhuǎn)換圖形,還可以利用左側的工具進行一些修改補充。將這個圖形狀態(tài)機存盤后,可以以此文件作為工程進行設計。,狀態(tài)轉(zhuǎn)換圖形,.,EDA技術與應用,(6)也可以將這個圖形狀態(tài)機文件轉(zhuǎn)變成HDL代碼文件。選擇ToolsGenerateHDLFile(HDL文件控制項),在打開的窗口中,選擇需要轉(zhuǎn)變的硬件描述語言項,包括VHDL、VerilogHDL或SystemVerilog。,.,EDA技術與應用,10.5不同編碼類型狀態(tài)機,用文字符號定義各狀態(tài)元素的狀態(tài)機稱為符號化狀態(tài)機,其狀態(tài)元素的具體編碼由Verilog狀態(tài)機的綜合器根據(jù)預設的約束來確定??芍苯訉⒏鳡顟B(tài)用具體的二進制數(shù)來定義,不使用文字符號,這種編碼方式稱為直接編碼方式。,.,EDA技術與應用,10.5.1直接輸出型編碼,最典型的應用實例就是計數(shù)器。計數(shù)器本質(zhì)上是一個主控時序過程與一個主控組合過程合二為一的狀態(tài)機,計數(shù)輸出就是各狀態(tài)的狀態(tài)碼。,.,EDA技術與應用,狀態(tài)碼直接輸出型狀態(tài)機:將狀態(tài)編碼直接輸出作為控制信號,即output=state,要求各狀態(tài)的編碼作特殊的安排,以適應控制對象的要求。,控制ADC0809采樣狀態(tài)機的狀態(tài)編碼表,.,EDA技術與應用,例10-8:ADC0809采樣控制(狀態(tài)碼直接輸出型),moduleADC0809(D,CLK,ECO,RST,ALE,START,OE,ADDA,Q,LOCK_T);input7:0D;inputCLK,RST,EOC;outputSTART,OE,ALE,ADDA,LOCK_T;output7:0Q;parameters0=5B00000,s1=5B11000,s2=5B00001,s3=5B00100,s4=5B00110;reg4:0cs,SOUT,next_state;reg7:0REGL;regLOCK;always(csorEOC)begincase(cs)s0:beginnext_state=s1;SOUT=s0;ends1:beginnext_state=s2;SOUT=s1;ends2:beginSOUT=s2;if(EOC=1b1)next_state=s3;elsenext_state=s2;ends3:beginSOUT=s3;next_state=s4;ends4:beginSOUT=s4;next_state=s0;enddefault:beginnext_state=s0;SOUT=s0;endendcaseendalways(posedgeCLKorposedgeRST)begin/時序過程if(RST)cs=s0;elsecs=next_state;endalways(posedgeSOUT1)/寄存器過程if(SOUT1)REGAL=D;assignADDA=0;assignQ=REGL;assignLOCK_T=SOUT1;assignOE=SOUT2;assignALE=SOUT3;assignSTART=SOUT4;endmodule,.,EDA技術與應用,狀態(tài)機工作時序,狀態(tài)碼直接輸出型狀態(tài)機的優(yōu)點:輸出速度快,不大可能出現(xiàn)毛刺現(xiàn)象(因為控制輸出信號直接來自構成狀態(tài)編碼的觸發(fā)器)。狀態(tài)碼直接輸出型狀態(tài)機的缺點:程序可讀性差,用于狀態(tài)譯碼的組合邏輯資源比其他以相同觸發(fā)器數(shù)量構成的狀態(tài)要多,而且控制非法狀態(tài)出現(xiàn)的容錯技術要求較高。,.,EDA技術與應用,10.5.2用宏定義語句定義狀態(tài)編碼,例10-9:ADC0809采樣控制(宏替換語句define定義狀態(tài)元素),defines05B00000defines15B11000defines25B00001defines35B00100defines45B00110moduleADC0809(D,CLK,ECO,RST,ALE,START,OE,ADDA,Q,LOCK_T);input7:0D;inputCLK,RST,EOC;outputSTART,OE,ALE,ADDA,LOCK_T;output7:0Q;reg4:0cs,SOUT,next_state;reg7:0REGL;regLOCK;always(csorEOC)begincase(cs)s0:beginnext_state=s1;SOUT=s0;ends1:beginnext_state=s2;SOUT=s1;ends2:beginSOUT=s2;if(EOC=1b1)next_state=s3;elsenext_state=s2;ends3:beginSOUT=s3;next_state=s4;ends4:beginSOUT=s4;next_state=s0;enddefault:beginnext_state=s0;SOUT=s0;endendcaseend,.,EDA技術與應用,10.5.2用宏定義語句定義狀態(tài)編碼,例10-9-續(xù):ADC0809采樣控制(宏替換語句define定義狀態(tài)元素),always(posedgeCLKorposedgeRST)begin/時序過程if(RST)cs=s0;elsecs=next_state;endalways(posedgeSOUT1)/寄存器過程if(SOUT1)REGAL=D;assignADDA=0;assignQ=REGL;assignLOCK_T=SOUT1;assignOE=SOUT2;assignALE=SOUT3;assignSTART=SOUT4;endmodule,用define或parameter來定義狀態(tài)元素的編碼的區(qū)別是:define定義可以針對整個設計全局,它定義的可以是全局符號常量,可以在各個不同的模塊中通用,這時定義語句必須放在模塊語句module外;也可以針對局部,放在module中。parameter定義在某個模塊module中,只有局部特征。,.,EDA技術與應用,.,EDA技術與應用,10.5.3宏定義命令語句,宏定義命令語句define屬于編譯指示語句,不參與綜合,只是在綜合前做一些數(shù)據(jù)控制操作。通過define語句的定義,可以用簡單的名稱或稱為宏名的標識符來替代一個復雜的名字,或字符串,或表達式等。,define宏名(標識符)宏內(nèi)容(字符串),define屬于編譯預處理命令語句。在編譯預處理時,把程序中在該定義以后的所有同名宏名或標識符的內(nèi)容都換成定義中指定的宏內(nèi)容。,definesA+B+C+DassignDOUT=s+E,assignDOUT=A+B+C+D+E,.,EDA技術與應用,10.5.3宏定義命令語句,采用宏定義的好處是,簡化了程序的書寫,便于程序修改。在define具體應用上還應注意(1)宏定義語句行末尾不加分號。(2)在程序中引用已定義的宏名時,必須在定義了宏名的標識符簽名加上符號“”,以示該標識符是一個宏定義名字。,.,EDA技術與應用,10.5.4順序編碼,優(yōu)點:這種編碼方式最為簡單,使用的觸發(fā)器數(shù)量最少(6狀態(tài)狀態(tài)機只需3個觸發(fā)器),剩余的非法狀態(tài)也最少,容錯技術最為簡單。缺點:常常會占用狀態(tài)轉(zhuǎn)換譯碼組合邏輯較多的資源,特別是有的相鄰狀態(tài)或不相鄰的狀態(tài)轉(zhuǎn)換時涉及多個觸發(fā)器的同時狀態(tài)轉(zhuǎn)換,將耗用更長的轉(zhuǎn)換時間,而且容易出現(xiàn)毛刺現(xiàn)象,這對于觸發(fā)器資源豐富而組合邏輯資源相對珍貴的FPGA器件意義不大,也不合適。,.,EDA技術與應用,10.5.5一位熱碼編碼,用n個觸發(fā)器來實現(xiàn)具有n個狀態(tài)的狀態(tài)機。每一個狀態(tài)都由其中一個觸發(fā)器的狀態(tài)表示,處于該狀態(tài)時,對應的觸發(fā)器為1,其余的觸發(fā)器為0。使用了較多的觸發(fā)器,但簡化了狀態(tài)譯碼邏輯,提高了狀態(tài)轉(zhuǎn)換速度,增強了狀態(tài)機的工作穩(wěn)定性,適合FPGA。因此一位熱碼編碼方式是狀態(tài)機最常用的編碼方式。,.,EDA技術與應用,10.5.6狀態(tài)編碼設置,將需要的編碼方式直接寫在程序中,不需要EDA軟件工具進行干預。所有Verilog狀態(tài)機都屬于用戶自定義編碼型的狀態(tài)機??刂坪镁C合器,使其不要干預程序的編碼方式,設置為用戶自定義編碼方式“User-Encoded”。在確定編碼方式前要打開“狀態(tài)機萃取”開關。,1、用戶自定義方式,.,EDA技術與應用,直接在Verilog程序中使用屬性定義語句指示編譯器按照要求選擇編碼方式。,2、用屬性定義語句設置,例10-10:序列檢測器(用屬性定義語句),moduleSCHK(inputCLK,DIN,RST,outputregSOUT);parameters0=0,s1=1,s2=2,s3=3,s4=4,s5=5,s6=6,s7=7,s8=8;(*syn_encoding=“one-hot”*)reg8:0ST;always(posedgeCLK)begin,(*syn_encoding=“one-hot”*),“one-hot”是對編碼的約束。在編譯前要打開“狀態(tài)機萃取”開關。,編碼方式的屬性表述:,.,EDA技術與應用,當選用默認型編碼“default”時,計算機自動選擇“one-hot”型編碼。,例10-7不同編碼方式的屬性定義及資源耗用,.,EDA技術與應用,3、直接設置方法,在QuartusII中,選擇AssignmentsSettings,在跳出的對話框中,選擇Category欄中的Analysis(*synthesis,keep*)reg1:0CS;/為在波形圖中了解CS的情況reg1:0NS;regW1,W2;parameterS0=1,S1=3,S2=2,S3=0;always(RSTorNS)/注意其狀態(tài)編碼形式,這將影響狀態(tài)機功能beginif(RST)CS=S0;elseCS=NS;endalways(CS)beginif(CS=S0)beginW1=1b0;W2=1b0;endif(CS=S1)beginW1=1b1;W2=1b0;endif(CS=S2)beginW1=1b1;W2=1b1;endif(CS=S3)beginW1=1b0;W2=1b1;endendalways(CLK)begincase(CS)S0:if(CLK)NS=S1;elseNS=S0;S1:if(CLK)NS=S2;elseNS=S1;S2:if(CLK)NS=S3;elseNS=S2;S3:if(CLK)NS=S0;elseNS=S3;default:NS=S0;endcaseendendmodule,工作時序,輸出W1在輸入CLK的上升沿翻轉(zhuǎn),輸出W2在輸入CLK的下降沿翻轉(zhuǎn),.,EDA技術與應用,例10-12:,moduleASM_WAVE2(CLK1,CLK2,RST,W);inputCLK1,CLK2,RST;outputW;reg1:0NS;regW,Z;(*synthesis,keep*)reg1:0CS;/為在波形圖中了解CS的情況parameterS0=1,S1=3,S2=2,S3=0;/注意其狀態(tài)編碼形式always(RSTorNS)beginif(RST)CS=S0;elseCS=NS;endalways(CSorW)begincase(CS)S0:if(W=1)Z=0;elseZ=1;S1:if(W=1)Z=0;elseZ=1;S2:if(W=1)Z=0;elseZ=1;endcaseendalways(CSorCLK1orCLK2)begincase(CS)S0:if(CLK1,CLK2=2b00)beginNS=S0;W=W;endelseif(CLK1,CLK2=2b01)NS=S1;elseif(CLK1,CLK2=2b10)NS=S2;elseif(CLK1,CLK2=2b11)NS=S3;elseNS=S0;,輸入信號CLK1和CLK2,復位信號RST,輸出信號W。當(CLK1,CLK2)=00時,W保持原值;當(CLK1,CLK2)=01時,W輸出低電平;當(CLK1,CLK2)=10時,W輸出高電平;當(CLK1,CLK2)=11時,W改變當前電平值;,工作時序,.,EDA技術與應用,例10-12-續(xù):,S1:if(CLK1,CLK2=2b00)NS=S0;elseif(CLK1,CLK2=2b01)beginNS=S1;W=1b0;endelseif(CLK1,CLK2=2b10)NS=S2;elseif(CLK1,CLK2=2b11)NS=S3;elseNS=S0;S2:if(CLK1,CLK2=2b00)NS=S0;elseif(CLK1,CLK2=2b01)NS=S1;elseif(CLK1,CLK2=2b10)beginNS=S2;W=1b1;endelseif(CLK1,CLK2=2b11)NS=S3;elseNS=S0;S3:if(CLK1,CLK2=2b00)NS=S0;elseif(CLK1,CLK2=2b01)NS=S1;elseif(CLK1,CLK2=2b10)NS=S2;elseif(CLK1,CLK2=2b11)beginNS=S3;W=Z;endelseNS=S0;endcaseendendmodule,輸入信號CLK1和CLK2,復位信號RST,輸出信號W。當(CLK1,CLK2)=00時,W保持原值;當(CLK1,CLK2)=01時,W輸出低電平;當(CLK1,CLK2)=10時,W輸出高電平;當(CLK1,CLK2)=11時,W改變當前電平值;,.,EDA技術與應用,例10-13:,moduleASM3(inputCLK1,CLK2,RST,outputregW);(*synthesis,keep*)reg2:0CS;reg2:0NS;wireCLK;parameterS0=3b000,S1=3b001,S2=3b011,S3=3b010,S4=3b110,S5=3b111,S6=3b101,S7=3b100;/注意狀態(tài)編碼形式assignCLK=CLK1endendcaseendendmodule,輸入信號CLK1和CLK2,輸出信號W。CLK1總是和CLK2同時有效,且每隔兩個CLK2的有效電平,當?shù)谌齻€有效電平出現(xiàn)時,立即輸出W,且其維持有效的時間與CLK2的有效時間相同。,.,EDA技術與應用,10.7安全狀態(tài)機設計,狀態(tài)機設計中,無論使用枚舉類型還是直接指定狀態(tài)編碼的程序中,特別是使用了一位熱碼編碼方式后,不可避免出現(xiàn)大量剩余狀態(tài),即未被定義的編碼組合。這些狀態(tài)在狀態(tài)機的正常運行中是不可能出現(xiàn)的,稱為非法狀態(tài)。在外界不確定的干擾下,或是隨機上電的初始啟動后,狀態(tài)機都有可能進入不可預測的非法狀態(tài),后果是對外界出現(xiàn)短暫失控,或是完全無法擺脫非法狀態(tài)而失去正常功能,除非使用復位控制信號Reset。但在無人控制時,無法獲取復位信號。對于穩(wěn)定性要求高的控制電路,狀態(tài)機剩余狀態(tài)的處理,即狀態(tài)機系統(tǒng)容錯技術的應用,是設計者必須慎重考慮的問題。剩余狀態(tài)的處理會不同程度地耗用邏輯資源,這就要求設計者在選用何種狀態(tài)機結構、何種狀態(tài)編碼方式、何種容錯技術及系統(tǒng)的工作速度與資源利用率等方面權衡比較。,.,EDA技術與應用,10.7安全狀態(tài)機設計,如果要使此5狀態(tài)的狀態(tài)機有可靠的工作性能,必須設法使系統(tǒng)在任何不利情況下都在落入非法狀態(tài)后還能返回正常的狀態(tài)轉(zhuǎn)移路徑中。,.,EDA技術與應用,10.7.1狀態(tài)導引法,在狀態(tài)元素定義中針對所有的狀態(tài),包括多余狀態(tài)都做出定義,并在以后的語句中加以處理。,在剩余狀態(tài)的轉(zhuǎn)向設置中,只要導向?qū)iT用于處理出錯恢復的狀態(tài)中即可。優(yōu)點:直觀可靠。缺點:可處理的非法狀態(tài)少,如果非法狀態(tài)太多,則耗用邏輯資源太大,所以只適合于順序編碼類狀態(tài)機。,.,EDA技術與應用,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 車隊運輸時效保障合同范本模板
- 餐飲加盟商信息保密合同范本
- 餐飲業(yè)店鋪租賃合同及食品安全責任書
- 芯片銷售保密協(xié)議書范本
- 中草藥購銷協(xié)議書范本
- 餐飲店股東合作協(xié)議及知識產(chǎn)權保護
- 甜品店品牌授權及區(qū)域代理合同
- 生態(tài)環(huán)保項目拆舊房屋搬遷與補償協(xié)議范本
- 古董拍賣委托授權合同模板
- 餐飲業(yè)股權并購及品牌授權與經(jīng)營合同
- 2024-2025學年廣東省新部編版七年級歷史第二學期期末模擬卷(含答案)
- 2025年新疆維吾爾自治區(qū)公務員錄用考試面試真題試卷:無領導小組討論邊疆穩(wěn)定與發(fā)展試題
- 2025年高考湖南卷物理真題(解析版)
- 七年級下冊地理知識點總結(考點清單)(背記版)七年級地理下學期期末復習(人教2024版)
- 2025至2030中國汽車物流行業(yè)深度發(fā)展研究與企業(yè)投資戰(zhàn)略規(guī)劃報告
- 2025年四川富潤招聘筆試沖刺題(帶答案解析)
- 公司物流內(nèi)部管理制度
- 公司資料部門管理制度
- 2025年數(shù)學中考專題復習課件:7.30 尺規(guī)作圖
- 2024-2025學年人教版一年級下數(shù)學期末試卷(含答案)
- 2025山西萬家寨水務控股集團所屬企業(yè)校園招聘82人筆試參考題庫附帶答案詳解
評論
0/150
提交評論