版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第5章同步有限狀態(tài)機設計5.1同步有限狀態(tài)機引例5.2狀態(tài)機的基本概念5.3狀態(tài)機的編碼方法5.4復雜狀態(tài)機的編寫方法5.5采用狀態(tài)機來實現(xiàn)程序算法5.6小結第5章同步有限狀態(tài)機設計5.1同步有限狀態(tài)機引例15.1同步有限狀態(tài)機引例【例5-1】設計一個串行數(shù)據(jù)檢測器。電路的輸入信號A是與時鐘脈沖同步的串行數(shù)據(jù),其時序關系如圖所示。輸出信號為Y;要求電路在信號輸入A出現(xiàn)110序列時,輸出信號Y為1,否則為0。5.1同步有限狀態(tài)機引例【例5-1】設計一個串行數(shù)據(jù)檢測25.1同步有限狀態(tài)機引例圖5-2時序邏輯電路設計過程5.1同步有限狀態(tài)機引例圖5-2時序邏輯電路設計過程35.1同步有限狀態(tài)機引例第一步:理解題意,由給定的邏輯功能建立原始狀態(tài)圖,如圖5-3所示圖5-3原始狀態(tài)圖圖中,S表示狀態(tài),A/Y中橫線上面的為輸入,橫線下面的為輸出。5.1同步有限狀態(tài)機引例第一步:理解題意,由給定的邏輯功能45.1同步有限狀態(tài)機引例第二步:狀態(tài)化簡,合并等價狀態(tài)abc0/01/00/01/01/00/1圖5-4化簡后的狀態(tài)圖5.1同步有限狀態(tài)機引例第二步:狀態(tài)化簡,合并等價狀態(tài)a55.1同步有限狀態(tài)機引例第三步:狀態(tài)編碼圖5-5編碼后的狀態(tài)圖5.1同步有限狀態(tài)機引例第三步:狀態(tài)編碼圖5-5編碼后的65.1同步有限狀態(tài)機引例第四步:選擇觸發(fā)器的個數(shù)和類型觸發(fā)器個數(shù)可根據(jù)狀態(tài)數(shù)確定,要求滿足2n-1<M≤2n,式中M為狀態(tài)數(shù),n為觸發(fā)器的個數(shù)。對于本例,已知M為3,所以可求出觸發(fā)器的個數(shù)為2個。觸發(fā)器可以選擇D觸發(fā)器、JK觸發(fā)器等等,本例選用D觸發(fā)器。5.1同步有限狀態(tài)機引例第四步:選擇觸發(fā)器的個數(shù)和類型觸發(fā)75.1同步有限狀態(tài)機引例第五步:求出電路的激勵方程和輸出方程5.1同步有限狀態(tài)機引例第五步:求出電路的激勵方程和輸出方85.1同步有限狀態(tài)機引例第六步:畫出邏輯圖并檢查自啟動能力5.1同步有限狀態(tài)機引例第六步:畫出邏輯圖并檢查自啟動能力95.1同步有限狀態(tài)機引例【例5-2】對應于步驟六的層次建模方法module fsm_1(clk,A,Y);inputclk,A;outputY;wireq0,q1;assignY=q1&(~A);mydff_2dff0(.D(A),.Q(q0),.clk(clk)),dff1(.D(A&q0),.Q(q1),.clk(clk));endmodule//以下實現(xiàn)被調(diào)用模塊mydff_2modulemydff_2(D,Q,clk);inputD,clk;outputregQ;always@(posedgeclk)Q<=D;endmodule5.1同步有限狀態(tài)機引例【例5-2】對應于步驟六的層次建105.1同步有限狀態(tài)機引例【例5-3】對例5-2的改進——消除毛刺module fsm_1(clk,A,Y);inputclk,A;outputregY;wireq0,q1;mydff_2dff0(.D(A),.Q(q0),.clk(clk)),dff1(.D(A&q0),.Q(q1),.clk(clk));always@(posedgeclk)Y=q1&(~A);endmodule5.1同步有限狀態(tài)機引例【例5-3】對例5-2的改進——115.1同步有限狀態(tài)機引例【例5-4】對應于步驟五的Verilog建模module fsm_2(clk,A,Y);inputclk,A;outputregY;regq0,q1;always@(posedgeclk)begin q0<=A; q1<=q0&A;Y=q1&(~A);endendmodule5.1同步有限狀態(tài)機引例【例5-4】對應于步驟五的Ver125.1同步有限狀態(tài)機引例【例5-5】對應于步驟四的Verilog建模///產(chǎn)生JK激勵信號:D觸發(fā)器的激勵d---->JK觸發(fā)器的激勵J和KmoduleD_JK(d,q,j,k);inputd,q;outputregj,k;always@(d,q) case({d,q}) 2'b00,2'b11: beginj=0;k=0;end 2'b01,2'b10: beginj=1;k=1;end endcaseendmodule5.1同步有限狀態(tài)機引例【例5-5】對應于步驟四的Ver135.1同步有限狀態(tài)機引例//頂層模塊,實現(xiàn)例5-2的功能module fsm_3(clk,A,Y);inputclk,A;outputregY;wireq0,q1,j0,k0,j1,k1,temp;assigntemp=q0&A;D_JKd_jk0(A,q0,j0,k0);D_JKd_jk1(temp,q1,j1,k1);JKjk0(clk,j0,k0,q0);JKjk1(clk,j1,k1,q1);always@(posedgeclk)Y=q1&(~A);endmodule//JK觸發(fā)器實現(xiàn)---->JK全1翻轉,全0不變,其它為JmoduleJK(clk,j,k,q);inputclk,j,k;outputregq;always@(posedgeclk) case({j,k}) 2'b11:q=~q; 2'b10:q=1; 2'b01:q=0; 2'b00:q=q; default:; endcaseendmodule5.1同步有限狀態(tài)機引例//頂層模塊,實現(xiàn)例5-2的功能/145.1同步有限狀態(tài)機引例【例5-6】對應于步驟一、步驟二和步驟三的同步狀態(tài)機modulefsm_3(clk,A,Y);inputclk,A;outputregY;reg[1:0]state;parameters0=2'b00,//狀態(tài)編碼為順序編碼方式 s1=2'b01, s2=2'b11;always@(posedgeclk)case(state) s0:begin if(A)state<=s1; elsestate<=s0; Y<=0; end
s1:begin if(A)state<=s2; elsestate<=s0;Y<=0;ends2:begin if(A)begin state<=s2; Y<=0; end elsebegin state<=s0; Y<=1; end end default:state<=s0; endcaseendmodule5.1同步有限狀態(tài)機引例【例5-6】對應于步驟一、步驟二155.2狀態(tài)機的基本概念1狀態(tài)機的基本描述方式2狀態(tài)機的基本要素及分類3同步狀態(tài)機和異步狀態(tài)機4單進程、雙進程和多進程狀態(tài)機5.2狀態(tài)機的基本概念1狀態(tài)機的基本描述方式16狀態(tài)機的基本描述方式狀態(tài)機的基本描述方式有3種:狀態(tài)轉移圖狀態(tài)轉移列表HDL語言描述狀態(tài)機的基本描述方式狀態(tài)機的基本描述方式有3種:17狀態(tài)機的基本要素及分類狀態(tài)機的基本要素有3個:狀態(tài)輸出輸入狀態(tài)機的基本要素及分類狀態(tài)機的基本要素有3個:18同步狀態(tài)機和異步狀態(tài)機異步狀態(tài)機是沒有確定時鐘的狀態(tài)機,它的狀態(tài)轉移不是由唯一的時鐘跳變沿所觸發(fā)。目前多數(shù)綜合器不能綜合采用VerilogHDL描述的異步狀態(tài)機。因此,應盡量不要使用綜合工具來設計異步狀態(tài)機。如果一定要設計異步狀態(tài)機,我們建議采用原理圖輸入或實例引用的方法,而不要用VerilogHDL輸入的方法。為了能綜合出有效的電路,用VerilogHDL描述的狀態(tài)機應明確地由唯一時鐘觸發(fā),這種狀態(tài)機我們稱為同步狀態(tài)機。同步有限狀態(tài)機是設計復雜時序邏輯電路最有效最常用的方法之一。
同步狀態(tài)機和異步狀態(tài)機異步狀態(tài)機是沒有確定時鐘的狀態(tài)機,它的19單進程、雙進程和多進程狀態(tài)機一個有限狀態(tài)機總是可以被分成次態(tài)譯碼、狀態(tài)寄存器、輸出譯碼三個模塊,可以有五種不同的方式將這些模塊分配到進程語句,以實現(xiàn)對狀態(tài)機的描述。
①三個模塊用一個進程實現(xiàn),也就是說3個模塊均在1個always塊內(nèi),這種狀態(tài)機描述稱為單進程有限狀態(tài)機。②每一個模塊分別用一個進程實現(xiàn),也就是說3個模塊對應著3個always塊,這種狀態(tài)機描述稱為三進程有限狀態(tài)機。其他3種為雙進程狀態(tài)機:③次態(tài)譯碼、輸出譯碼分配在一個進程中,狀態(tài)寄存器用另一個進程描述;④次態(tài)譯碼、狀態(tài)寄存器分配在一個進程中,輸出譯碼用另一個進程描述;⑤次態(tài)譯碼用一個進程描述,狀態(tài)寄存器、輸出譯碼分配在另一個進程中。單進程、雙進程和多進程狀態(tài)機一個有限狀態(tài)機總是可以205.3狀態(tài)機的編碼方法狀態(tài)順序編碼獨熱編碼直接輸出型編碼1直接輸出型編碼2S0000010000001S1010100010010S2101000100100S3--10011005.3狀態(tài)機的編碼方法狀態(tài)順序編碼獨熱編碼直接輸出型編碼121獨熱編碼【例5-9】狀態(tài)機設計——獨熱碼表示狀態(tài)modulefsm_2(clk,A,Y);inputclk,A;outputregY;reg[2:0]state;parameters0=3'b001, s1=3'b010, s2=3'b100;always@(posedgeclk)case(state) s0:begin if(A)state<=s1; elsestate<=s0; Y<=0; end s1:begin if(A)state<=s2; elsestate<=s0; Y<=0; end s2:begin if(A)begin state<=s2; Y<=0; end elsebegin state<=s0; Y<=1; end end default:state<=s0; endcaseendmodule獨熱編碼【例5-9】狀態(tài)機設計——獨熱碼表示狀態(tài) s122直接輸出型編碼【例5-10】狀態(tài)機設計——狀態(tài)編碼包含輸出信息modulefsm_1(clk,A,Y);inputclk,A;outputY;reg[3:0]state;parameters0=4'b0001, s1=4'b0010, s2=4'b0100, s3=4'b1100;assignY=state[3];always@(posedgeclk)case(state) s0:if(A)state<=s1; elsestate<=s0; s1:if(A)state<=s2; elsestate<=s0; s2:if(A)state<=s2; elsestate<=s3; s3:if(A)state<=s1; elsestate<=s0; default:state<=s0; endcaseendmodule直接輸出型編碼【例5-10】狀態(tài)機設計——狀態(tài)編碼包含輸出信23非法狀態(tài)的處理處理的方法有兩種:(1)在語句中對每一個非法狀態(tài)都作出明確的狀態(tài)轉換指示,如在原來的case語句中增加諸如以下語句:case(state)N1:state<=s0;N2:state<=s0;…(2)如例5-6、例5-9和例5-10中那樣,利用default語句對未提到的狀態(tài)作統(tǒng)一處理。case(state)s0:if(A)state<=s1;elsestate<=s0;…default:state<=s0;endcase由于剩余狀態(tài)的次態(tài)不一定都指向狀態(tài)s0,所以可以使用方法一來分別處理每一個剩余狀態(tài)的轉向。非法狀態(tài)的處理處理的方法有兩種:245.4復雜狀態(tài)機的編寫方法【例5-11】狀態(tài)機設計——狀態(tài)和輸出使用單獨進程modulefsm_0(clk,A,Y);inputclk,A;outputregY;reg[2:0]current_state,next_state;parameters0=3'b001, s1=3'b010, s2=3'b100;always@(posedgeclk)//狀態(tài)寄存器 current_state<=next_state;always@(current_state,A)//產(chǎn)生下一個狀態(tài)狀態(tài)的組合邏輯
case(current_state) s0:if(A)next_state<=s1; elsenext_state<=s0; s1:if(A)next_state<=s2; elsenext_state<=s0; s2:if(A)next_state<=s2; elsenext_state<=s0; default:next_state<=s0; endcasealways@(posedgeclk)//產(chǎn)生輸出的時序邏輯case(current_state) s0:Y<=0; s1:Y<=0; s2:if(A)Y<=0; elseY<=1; default:Y<=0; endcaseendmodule5.4復雜狀態(tài)機的編寫方法【例5-11】狀態(tài)機設計——狀態(tài)255.5采用狀態(tài)機來實現(xiàn)程序算法1求兩數(shù)最大公約數(shù)的算法2求兩數(shù)最大公約數(shù)的實現(xiàn)5.5采用狀態(tài)機來實現(xiàn)程序算法1求兩數(shù)最大公約數(shù)的算法26求兩數(shù)最大公約數(shù)的算法【例5-12】求最大公約數(shù)的算法0:intx,y,r;1:while(1){2:while(!go_i);3:if(x_i>=y_i){4:x=x_i;5:y=y_i;}else{6:x=y_i;7:y=x_i;}8:while(y!=0){9:r=x%y;10:x=y;11:y=r;}12:d_o=x;}求兩數(shù)最大公約數(shù)的算法【例5-12】求最大公約數(shù)的算法27求兩數(shù)最大公約數(shù)的實現(xiàn)圖5-18狀態(tài)圖轉換模板求兩數(shù)最大公約數(shù)的實現(xiàn)圖5-18狀態(tài)圖轉換模板28求兩數(shù)最大公約數(shù)的實現(xiàn)圖5-19求最大公約數(shù)的狀態(tài)圖(左)及化簡后的狀態(tài)圖(右)求兩數(shù)最大公約數(shù)的實現(xiàn)圖5-19求最大公約數(shù)的狀態(tài)圖(左29求兩數(shù)最大公約數(shù)的實現(xiàn)【例5-13】求最大公約數(shù)的Verilog代碼modulegcd(clk,x_i,y_i,go_i,d_o);parameterN=6;//用于定義輸入數(shù)的范圍,最大為2**N-1input[N-1:0]x_i,y_i;inputclk,go_i;outputreg[N-1:0]d_o;parameters0=3'b111,s1=3'b001,s2=3'b010, s3=3'b011,s4=3'b100,s5=3'b101,s6=3'b110;reg[2:0]current_state,next_state;reg[N-1:0]x,y,r;always@(posedgeclk)//狀態(tài)寄存器 current_state<=next_state;求兩數(shù)最大公約數(shù)的實現(xiàn)【例5-13】求最大公約數(shù)的Veri30求兩數(shù)最大公約數(shù)的實現(xiàn)always@(current_state,x_i,y_i,go_i,x,y,r)//產(chǎn)生下一個狀態(tài)的組合邏輯 case(current_state) s0:if(go_i)next_state<=s1; elsenext_state<=s0; s1:if(x_i>=y_i)next_state<=s2; elsenext_state<=s3; s2:beginnext_state<=s4;end s3:beginnext_state<=s4;end s4:if(y>0)next_state<=s5; elsenext_state<=s6; s5:beginnext_state<=s4;end s6:beginnext_state<=s0;end default:next_state<=s0; endcasealways@(negedgeclk)//產(chǎn)生輸出和中間變量的組合邏輯 case(current_state) s2:beginx=x_i;y=y_i;end s3:beginx=y_i;y=x_i;end s5:beginr=x%y;x=y;y=r;end s6:begind_o=x;end default:; endcaseendmodule求兩數(shù)最大公約數(shù)的實現(xiàn)always@(current_s315.6小結在本章,我們討論了以下知識點:有限狀態(tài)機設計的一般步驟:第一步:理解題意,由給定的邏輯功能建立原始狀態(tài)圖;第二步:狀態(tài)化簡;第三步:狀態(tài)編碼;第四步:選擇觸發(fā)器的個數(shù)和類型;第五步:求出電路的激勵方程和輸出方程;第六步:畫出邏輯圖并檢查自啟動能力。用VerilogHDL來描述有限狀態(tài)機,可以充分發(fā)揮硬件描述語言的抽象建模能力,使用always塊語句和case選擇語句(或if條件語句)及賦值語句即可方便實現(xiàn)。具體的邏輯化簡、邏輯電路到觸發(fā)器映射均可由計算機自動完成,也就是說,上述第四步、第五步和第六步不再需要過多的人為干預,使電路設計工作得到簡化,效率也有很大提高。5.6小結在本章,我們討論了以下知識點:325.6小結等價狀態(tài)是指兩個或多個狀態(tài),它們在相同的輸入下轉換到同一個狀態(tài)去,并得到一樣的輸出。顯然等價狀態(tài)是重復的,可以合并為一個。電路的狀態(tài)數(shù)越少,存儲電路也就越簡單。狀態(tài)化簡的目的就在于將等價狀態(tài)盡可能地合并,以得到最簡的狀態(tài)轉換圖。這一步,不管是手工完成設計,還是利用計算機自動設計,都是很重要的。但對于FPGA等可編程邏輯設計,由于可用邏輯資源比較豐富,而且狀態(tài)編碼要考慮設計的穩(wěn)定性,安全性等因素,所以通常不進行狀態(tài)化簡。編碼方法有很多,編碼方案選擇得當,設計的電路可以簡單,反之,選得不好,則設計的電路就會復雜許多。在實際設計時,須綜合考慮電路復雜度與電路性能之間的折衷。在觸發(fā)器資源豐富的FPGA設計中,采用獨熱編碼既可以使電路性能得到保證又可充分利用其觸發(fā)器數(shù)量多的優(yōu)勢,也可以采取輸出編碼的狀態(tài)指定來簡化電路結構,以提高狀態(tài)機的運行速度。觸發(fā)器個數(shù)可根據(jù)狀態(tài)數(shù)確定,要求滿足2n-1<M≤2n,式中M為狀態(tài)數(shù),n為觸發(fā)器的個數(shù)。觸發(fā)器可選為D觸發(fā)器,事實上D觸發(fā)器、JK觸發(fā)器、T觸發(fā)器等等,其等價電路圖很容易實現(xiàn)。對于任何程序算法,均可采用狀態(tài)機理論將其轉換為純硬件實現(xiàn),本章介紹了將程序轉化為硬件實現(xiàn)的一種實用的方法。5.6小結等價狀態(tài)是指兩個或多個狀態(tài),它們在相同的輸入下轉33P128T1、2、3、4、5、6、7、8作業(yè)P128作業(yè)34第5章同步有限狀態(tài)機設計5.1同步有限狀態(tài)機引例5.2狀態(tài)機的基本概念5.3狀態(tài)機的編碼方法5.4復雜狀態(tài)機的編寫方法5.5采用狀態(tài)機來實現(xiàn)程序算法5.6小結第5章同步有限狀態(tài)機設計5.1同步有限狀態(tài)機引例355.1同步有限狀態(tài)機引例【例5-1】設計一個串行數(shù)據(jù)檢測器。電路的輸入信號A是與時鐘脈沖同步的串行數(shù)據(jù),其時序關系如圖所示。輸出信號為Y;要求電路在信號輸入A出現(xiàn)110序列時,輸出信號Y為1,否則為0。5.1同步有限狀態(tài)機引例【例5-1】設計一個串行數(shù)據(jù)檢測365.1同步有限狀態(tài)機引例圖5-2時序邏輯電路設計過程5.1同步有限狀態(tài)機引例圖5-2時序邏輯電路設計過程375.1同步有限狀態(tài)機引例第一步:理解題意,由給定的邏輯功能建立原始狀態(tài)圖,如圖5-3所示圖5-3原始狀態(tài)圖圖中,S表示狀態(tài),A/Y中橫線上面的為輸入,橫線下面的為輸出。5.1同步有限狀態(tài)機引例第一步:理解題意,由給定的邏輯功能385.1同步有限狀態(tài)機引例第二步:狀態(tài)化簡,合并等價狀態(tài)abc0/01/00/01/01/00/1圖5-4化簡后的狀態(tài)圖5.1同步有限狀態(tài)機引例第二步:狀態(tài)化簡,合并等價狀態(tài)a395.1同步有限狀態(tài)機引例第三步:狀態(tài)編碼圖5-5編碼后的狀態(tài)圖5.1同步有限狀態(tài)機引例第三步:狀態(tài)編碼圖5-5編碼后的405.1同步有限狀態(tài)機引例第四步:選擇觸發(fā)器的個數(shù)和類型觸發(fā)器個數(shù)可根據(jù)狀態(tài)數(shù)確定,要求滿足2n-1<M≤2n,式中M為狀態(tài)數(shù),n為觸發(fā)器的個數(shù)。對于本例,已知M為3,所以可求出觸發(fā)器的個數(shù)為2個。觸發(fā)器可以選擇D觸發(fā)器、JK觸發(fā)器等等,本例選用D觸發(fā)器。5.1同步有限狀態(tài)機引例第四步:選擇觸發(fā)器的個數(shù)和類型觸發(fā)415.1同步有限狀態(tài)機引例第五步:求出電路的激勵方程和輸出方程5.1同步有限狀態(tài)機引例第五步:求出電路的激勵方程和輸出方425.1同步有限狀態(tài)機引例第六步:畫出邏輯圖并檢查自啟動能力5.1同步有限狀態(tài)機引例第六步:畫出邏輯圖并檢查自啟動能力435.1同步有限狀態(tài)機引例【例5-2】對應于步驟六的層次建模方法module fsm_1(clk,A,Y);inputclk,A;outputY;wireq0,q1;assignY=q1&(~A);mydff_2dff0(.D(A),.Q(q0),.clk(clk)),dff1(.D(A&q0),.Q(q1),.clk(clk));endmodule//以下實現(xiàn)被調(diào)用模塊mydff_2modulemydff_2(D,Q,clk);inputD,clk;outputregQ;always@(posedgeclk)Q<=D;endmodule5.1同步有限狀態(tài)機引例【例5-2】對應于步驟六的層次建445.1同步有限狀態(tài)機引例【例5-3】對例5-2的改進——消除毛刺module fsm_1(clk,A,Y);inputclk,A;outputregY;wireq0,q1;mydff_2dff0(.D(A),.Q(q0),.clk(clk)),dff1(.D(A&q0),.Q(q1),.clk(clk));always@(posedgeclk)Y=q1&(~A);endmodule5.1同步有限狀態(tài)機引例【例5-3】對例5-2的改進——455.1同步有限狀態(tài)機引例【例5-4】對應于步驟五的Verilog建模module fsm_2(clk,A,Y);inputclk,A;outputregY;regq0,q1;always@(posedgeclk)begin q0<=A; q1<=q0&A;Y=q1&(~A);endendmodule5.1同步有限狀態(tài)機引例【例5-4】對應于步驟五的Ver465.1同步有限狀態(tài)機引例【例5-5】對應于步驟四的Verilog建模///產(chǎn)生JK激勵信號:D觸發(fā)器的激勵d---->JK觸發(fā)器的激勵J和KmoduleD_JK(d,q,j,k);inputd,q;outputregj,k;always@(d,q) case({d,q}) 2'b00,2'b11: beginj=0;k=0;end 2'b01,2'b10: beginj=1;k=1;end endcaseendmodule5.1同步有限狀態(tài)機引例【例5-5】對應于步驟四的Ver475.1同步有限狀態(tài)機引例//頂層模塊,實現(xiàn)例5-2的功能module fsm_3(clk,A,Y);inputclk,A;outputregY;wireq0,q1,j0,k0,j1,k1,temp;assigntemp=q0&A;D_JKd_jk0(A,q0,j0,k0);D_JKd_jk1(temp,q1,j1,k1);JKjk0(clk,j0,k0,q0);JKjk1(clk,j1,k1,q1);always@(posedgeclk)Y=q1&(~A);endmodule//JK觸發(fā)器實現(xiàn)---->JK全1翻轉,全0不變,其它為JmoduleJK(clk,j,k,q);inputclk,j,k;outputregq;always@(posedgeclk) case({j,k}) 2'b11:q=~q; 2'b10:q=1; 2'b01:q=0; 2'b00:q=q; default:; endcaseendmodule5.1同步有限狀態(tài)機引例//頂層模塊,實現(xiàn)例5-2的功能/485.1同步有限狀態(tài)機引例【例5-6】對應于步驟一、步驟二和步驟三的同步狀態(tài)機modulefsm_3(clk,A,Y);inputclk,A;outputregY;reg[1:0]state;parameters0=2'b00,//狀態(tài)編碼為順序編碼方式 s1=2'b01, s2=2'b11;always@(posedgeclk)case(state) s0:begin if(A)state<=s1; elsestate<=s0; Y<=0; end
s1:begin if(A)state<=s2; elsestate<=s0;Y<=0;ends2:begin if(A)begin state<=s2; Y<=0; end elsebegin state<=s0; Y<=1; end end default:state<=s0; endcaseendmodule5.1同步有限狀態(tài)機引例【例5-6】對應于步驟一、步驟二495.2狀態(tài)機的基本概念1狀態(tài)機的基本描述方式2狀態(tài)機的基本要素及分類3同步狀態(tài)機和異步狀態(tài)機4單進程、雙進程和多進程狀態(tài)機5.2狀態(tài)機的基本概念1狀態(tài)機的基本描述方式50狀態(tài)機的基本描述方式狀態(tài)機的基本描述方式有3種:狀態(tài)轉移圖狀態(tài)轉移列表HDL語言描述狀態(tài)機的基本描述方式狀態(tài)機的基本描述方式有3種:51狀態(tài)機的基本要素及分類狀態(tài)機的基本要素有3個:狀態(tài)輸出輸入狀態(tài)機的基本要素及分類狀態(tài)機的基本要素有3個:52同步狀態(tài)機和異步狀態(tài)機異步狀態(tài)機是沒有確定時鐘的狀態(tài)機,它的狀態(tài)轉移不是由唯一的時鐘跳變沿所觸發(fā)。目前多數(shù)綜合器不能綜合采用VerilogHDL描述的異步狀態(tài)機。因此,應盡量不要使用綜合工具來設計異步狀態(tài)機。如果一定要設計異步狀態(tài)機,我們建議采用原理圖輸入或實例引用的方法,而不要用VerilogHDL輸入的方法。為了能綜合出有效的電路,用VerilogHDL描述的狀態(tài)機應明確地由唯一時鐘觸發(fā),這種狀態(tài)機我們稱為同步狀態(tài)機。同步有限狀態(tài)機是設計復雜時序邏輯電路最有效最常用的方法之一。
同步狀態(tài)機和異步狀態(tài)機異步狀態(tài)機是沒有確定時鐘的狀態(tài)機,它的53單進程、雙進程和多進程狀態(tài)機一個有限狀態(tài)機總是可以被分成次態(tài)譯碼、狀態(tài)寄存器、輸出譯碼三個模塊,可以有五種不同的方式將這些模塊分配到進程語句,以實現(xiàn)對狀態(tài)機的描述。
①三個模塊用一個進程實現(xiàn),也就是說3個模塊均在1個always塊內(nèi),這種狀態(tài)機描述稱為單進程有限狀態(tài)機。②每一個模塊分別用一個進程實現(xiàn),也就是說3個模塊對應著3個always塊,這種狀態(tài)機描述稱為三進程有限狀態(tài)機。其他3種為雙進程狀態(tài)機:③次態(tài)譯碼、輸出譯碼分配在一個進程中,狀態(tài)寄存器用另一個進程描述;④次態(tài)譯碼、狀態(tài)寄存器分配在一個進程中,輸出譯碼用另一個進程描述;⑤次態(tài)譯碼用一個進程描述,狀態(tài)寄存器、輸出譯碼分配在另一個進程中。單進程、雙進程和多進程狀態(tài)機一個有限狀態(tài)機總是可以545.3狀態(tài)機的編碼方法狀態(tài)順序編碼獨熱編碼直接輸出型編碼1直接輸出型編碼2S0000010000001S1010100010010S2101000100100S3--10011005.3狀態(tài)機的編碼方法狀態(tài)順序編碼獨熱編碼直接輸出型編碼155獨熱編碼【例5-9】狀態(tài)機設計——獨熱碼表示狀態(tài)modulefsm_2(clk,A,Y);inputclk,A;outputregY;reg[2:0]state;parameters0=3'b001, s1=3'b010, s2=3'b100;always@(posedgeclk)case(state) s0:begin if(A)state<=s1; elsestate<=s0; Y<=0; end s1:begin if(A)state<=s2; elsestate<=s0; Y<=0; end s2:begin if(A)begin state<=s2; Y<=0; end elsebegin state<=s0; Y<=1; end end default:state<=s0; endcaseendmodule獨熱編碼【例5-9】狀態(tài)機設計——獨熱碼表示狀態(tài) s156直接輸出型編碼【例5-10】狀態(tài)機設計——狀態(tài)編碼包含輸出信息modulefsm_1(clk,A,Y);inputclk,A;outputY;reg[3:0]state;parameters0=4'b0001, s1=4'b0010, s2=4'b0100, s3=4'b1100;assignY=state[3];always@(posedgeclk)case(state) s0:if(A)state<=s1; elsestate<=s0; s1:if(A)state<=s2; elsestate<=s0; s2:if(A)state<=s2; elsestate<=s3; s3:if(A)state<=s1; elsestate<=s0; default:state<=s0; endcaseendmodule直接輸出型編碼【例5-10】狀態(tài)機設計——狀態(tài)編碼包含輸出信57非法狀態(tài)的處理處理的方法有兩種:(1)在語句中對每一個非法狀態(tài)都作出明確的狀態(tài)轉換指示,如在原來的case語句中增加諸如以下語句:case(state)N1:state<=s0;N2:state<=s0;…(2)如例5-6、例5-9和例5-10中那樣,利用default語句對未提到的狀態(tài)作統(tǒng)一處理。case(state)s0:if(A)state<=s1;elsestate<=s0;…default:state<=s0;endcase由于剩余狀態(tài)的次態(tài)不一定都指向狀態(tài)s0,所以可以使用方法一來分別處理每一個剩余狀態(tài)的轉向。非法狀態(tài)的處理處理的方法有兩種:585.4復雜狀態(tài)機的編寫方法【例5-11】狀態(tài)機設計——狀態(tài)和輸出使用單獨進程modulefsm_0(clk,A,Y);inputclk,A;outputregY;reg[2:0]current_state,next_state;parameters0=3'b001, s1=3'b010, s2=3'b100;always@(posedgeclk)//狀態(tài)寄存器 current_state<=next_state;always@(current_state,A)//產(chǎn)生下一個狀態(tài)狀態(tài)的組合邏輯
case(current_state) s0:if(A)next_state<=s1; elsenext_state<=s0; s1:if(A)next_state<=s2; elsenext_state<=s0; s2:if(A)next_state<=s2; elsenext_state<=s0; default:next_state<=s0; endcasealways@(posedgeclk)//產(chǎn)生輸出的時序邏輯case(current_state) s0:Y<=0; s1:Y<=0; s2:if(A)Y<=0; elseY<=1; default:Y<=0; endcaseendmodule5.4復雜狀態(tài)機的編寫方法【例5-11】狀態(tài)機設計——狀態(tài)595.5采用狀態(tài)機來實現(xiàn)程序算法1求兩數(shù)最大公約數(shù)的算法2求兩數(shù)最大公約數(shù)的實現(xiàn)5.5采用狀態(tài)機來實現(xiàn)程序算法1求兩數(shù)最大公約數(shù)的算法60求兩數(shù)最大公約數(shù)的算法【例5-12】求最大公約數(shù)的算法0:intx,y,r;1:while(1){2:while(!go_i);3:if(x_i>=y_i){4:x=x_i;5:y=y_i;}else{6:x=y_i;7:y=x_i;}8:while(y!=0){9:r=x%y;10:x=y;11:y=r;}12:d_o=x;}求兩數(shù)最大公約數(shù)的算法【例5-12】求最大公約數(shù)的算法61求兩數(shù)最大公約數(shù)的實現(xiàn)圖5-18狀態(tài)圖轉換模板求兩數(shù)最大公約數(shù)的實現(xiàn)圖5-18狀態(tài)圖轉換模板62求兩數(shù)最大公約數(shù)的實現(xiàn)圖5-19求最大公約數(shù)的狀態(tài)圖(左)及化簡后的狀態(tài)圖(右)求兩數(shù)最大公約數(shù)的實現(xiàn)圖5-19求最大公約數(shù)的狀態(tài)圖(左63求兩數(shù)最大公約數(shù)的實現(xiàn)【例5-13】求最大公約數(shù)的Verilog代碼modulegcd(clk,x_i,y_i,go_i,d_o);parameterN=6;//用于定義輸入數(shù)的范圍,最大為2**N-1input[N-1:0]x_i,y_i;inputclk,go_i;outputreg[N-1:0]d_o;parameters0=3'b111,s1=3'b001,s2=3'b010, s3=3'b011,s4=3'b100,s5=3'b101,s6=3'b110;reg
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專用型配電柜買賣雙方協(xié)議條款版
- 2024版專業(yè)咨詢服務協(xié)議書
- 2024服裝貨品空運出口協(xié)議
- 2024年食品原料供貨合同8篇
- 職業(yè)學院網(wǎng)站新媒體平臺審批備案登記表
- 專項運營維護服務協(xié)議范本一
- 福建省南平市武夷山第三中學高二地理聯(lián)考試題含解析
- 福建省南平市吳屯中學2020-2021學年高三英語上學期期末試卷含解析
- 2024年編:林業(yè)產(chǎn)品購銷協(xié)議
- 勞動節(jié)銷售提升策略
- 推動架機械加工工序卡片
- 重慶市綦江區(qū)篆塘鎮(zhèn)白坪村建筑用砂巖礦采礦權評估報告
- 甘肅社火100首歌詞
- 行政查房情況記錄表
- GB/T 2315-2000電力金具標稱破壞載荷系列及連接型式尺寸
- 腹主動脈瘤的護理查房
- 內(nèi)部往來轉賬通知單
- 星級酒店每日防火巡查記錄本
- 中石化erp系統(tǒng)操作手冊
- 部編人教版歷史七年級下冊教學計劃及進度表
- 高中化學必修1思維導圖(Word版zj)
評論
0/150
提交評論