數(shù)字邏輯:第10章 有限狀態(tài)機(jī)設(shè)計(jì)_第1頁(yè)
數(shù)字邏輯:第10章 有限狀態(tài)機(jī)設(shè)計(jì)_第2頁(yè)
數(shù)字邏輯:第10章 有限狀態(tài)機(jī)設(shè)計(jì)_第3頁(yè)
數(shù)字邏輯:第10章 有限狀態(tài)機(jī)設(shè)計(jì)_第4頁(yè)
數(shù)字邏輯:第10章 有限狀態(tài)機(jī)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第10章有限狀態(tài)機(jī)設(shè)計(jì)1有限狀態(tài)機(jī)(FiniteStateMachine)又稱有限狀態(tài)自動(dòng)機(jī)或簡(jiǎn)稱狀態(tài)機(jī),是表示有限個(gè)狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動(dòng)作等行為的數(shù)學(xué)模型。有限狀態(tài)機(jī)在數(shù)字電路系統(tǒng)中,有限狀態(tài)機(jī)是一種十分重要的時(shí)序邏輯電路模塊,它對(duì)數(shù)字系統(tǒng)的設(shè)計(jì)具有十分重要的作用。有限狀態(tài)機(jī)是指輸出取決于過(guò)去輸入部分和當(dāng)前輸入部分的時(shí)序邏輯電路。一般來(lái)說(shuō),除了輸入部分和輸出部分外,有限狀態(tài)機(jī)還含有一組具有“記憶”功能的寄存器,這些寄存器的功能是記憶有限狀態(tài)機(jī)的內(nèi)部狀態(tài),它們常被稱為狀態(tài)寄存器。在有限狀態(tài)機(jī)中,狀態(tài)寄存器的的下一個(gè)狀態(tài)不僅與輸入信號(hào)有關(guān),而且還與該寄存器的當(dāng)前狀態(tài)有關(guān),因此有限狀態(tài)機(jī)又可以認(rèn)為是組合邏輯和寄存器邏輯的一種組合。其中,寄存器邏輯的功能是存儲(chǔ)有限狀態(tài)機(jī)的內(nèi)部狀態(tài);而組合邏輯有可以分為次態(tài)邏輯和輸出邏輯兩部分,次態(tài)邏輯的功能是確定有限狀態(tài)機(jī)的下一個(gè)狀態(tài),輸出邏輯的功能是確定有限狀態(tài)機(jī)的輸出。2有限狀態(tài)機(jī)結(jié)構(gòu)模式相對(duì)簡(jiǎn)單,設(shè)計(jì)方案相對(duì)固定,有利于綜合器優(yōu)化。容易構(gòu)成性能良好的同步時(shí)序邏輯模塊,有利于解決競(jìng)爭(zhēng)冒險(xiǎn)現(xiàn)象。在高速運(yùn)算和控制方面,狀態(tài)機(jī)有其巨大優(yōu)勢(shì)。一個(gè)結(jié)構(gòu)體可包含多個(gè)狀態(tài)機(jī),類似于并行運(yùn)行的多CPU系統(tǒng)。運(yùn)行速度遠(yuǎn)遠(yuǎn)高于CPU。狀態(tài)機(jī)狀態(tài)變換周期只有一個(gè)時(shí)鐘周期,而且每一狀態(tài)可以完成許多并行運(yùn)算和控制操作。在可靠性方面,狀態(tài)機(jī)優(yōu)勢(shì)明顯。狀態(tài)機(jī)可以使用容錯(cuò)技術(shù);狀態(tài)機(jī)進(jìn)入非法狀態(tài)并從中跳出所耗時(shí)間極短,通常只需2個(gè)時(shí)鐘周期,約10個(gè)ns。CPU一般數(shù)十ms。有限狀態(tài)機(jī)的優(yōu)點(diǎn)3狀態(tài)機(jī)分類Melay型:輸出是當(dāng)前狀態(tài)和所有輸入信號(hào)的函數(shù)。Moore型:輸出僅是當(dāng)前狀態(tài)的函數(shù)。

Melay型狀態(tài)機(jī)的輸出是輸入變化后立即發(fā)生變化;而Moore型狀態(tài)機(jī)在輸入發(fā)生變化后,還需等到時(shí)鐘到來(lái),時(shí)鐘使?fàn)顟B(tài)發(fā)生變化才導(dǎo)致輸出變化。因此要多等待一個(gè)時(shí)鐘周期。4設(shè)計(jì)實(shí)例例1Moore狀態(tài)機(jī)狀態(tài)s0時(shí),輸入為0維持s0,輸入為1時(shí),下一狀態(tài)改為s1,不論輸入是什么,輸出均為0。0101110S1/1S3/0S2/0S0/05modulemoore_ex1(clk,din,op);inputclk,din;outputop;regop;parameters0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11;

reg[1:0]presentstate;reg[1:0]nextstate;always@(posedge

clk)

presentstate<=nextstate;6

always@(din,presentstate)begincase(presentstate)s0:beginif(din==0)

nextstate=s0; else

nextstate=s1;op=0;ends1:beginif(din==1)

nextstate=s1; else

nextstate=s2; op=1;end

s2:beginif(din==1)

nextstate=s2; else

nextstate=s3; op=0;ends3:beginif(din==1)

nextstate=s0; else

nextstate=s1; op=0;end

default:begin

nextstate=s0; op=0;endendcaseendendmodule

7modulet_moore_ex1;

reg

clk,din;wireop;always#20clk=~clk;

initialbegin

clk=0;din=0;#80din=1;#160din=0;#200din=1;#160din=0;end

moore_ex1u1(.clk(clk),.din(din),.op(op));endmodule

81/1S1S3S2S01/01/10/00/00/01/10/1例2Mealy狀態(tài)機(jī)若當(dāng)前是S3,若輸入是0,則輸出0且下一個(gè)狀態(tài)是s1,而輸入為1則輸出為1且下一個(gè)狀態(tài)更換成s0輸入/輸出9modulemealy_ex1(clk,din,op);inputclk,din;outputop;regop;parameters0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11;

reg[1:0]presentstate;reg[1:0]nextstate;always@(posedge

clk)

presentstate<=nextstate;10

always@(din,presentstate)begincase(presentstate)s0:beginif(din==0) begin

nextstate=s0; op=0; end else begin

nextstate=s1; op=1; endend

s1:beginif(din==1)begin

nextstate=s1; op<=1; end else begin

nextstate=s2; op=0; endend11

s2:beginif(din==1)begin

nextstate=s2; op=0; end else begin

nextstate=s3; op=1; endend

s3:beginif(din==1)begin

nextstate=s0; op=1; end else begin

nextstate=s1; op=0; end end12

default:begin

nextstate=s0; op=0; end

endcaseend

endmodule

13modulet_mealy_ex1;

reg

clk,din;wireop;always#20clk=~clk;

initialbegin

clk=0;din=0;#80din=1;#160din=0;#200din=1;#160din=0;end

mealy_ex1u1(.clk(clk),.din(din),.op(op));endmodule

14A/K1=0!Reset/K2=0,K1=0!Reset/K2=0,K1=0!Reset|!A/K2=0,K1=1A/K2=1!AStartIdleClear!Reset/K2=0,K1=0Stop狀態(tài)轉(zhuǎn)移圖15modulefsm(Clock,Reset,A,K2,K1,state);inputClock,Reset,A;outputK2,K1;output[1:0]state;regK2,K1;reg[1:0]state;

parameterIdle=2'b00,Start=2'b01,Stop=2'b10,Clear=2'b11;16always@(posedgeClock)if(!Reset)beginstate<=Idle;K2<=0;K1<=0;endelsecase(state)Idle:if(A)beginstate<=Start;K1<=0;endelsebeginstate<=Idle;K2<=0;K1<=0;endStart:if(!A)state<=Stop;elsestate<=Start;Stop:if(A)beginstate<=Clear;K2<=1;endelsebeginstate<=Stop;K2<=0;K1<=0;end17

Clear:if(!A)beginstate<=Idle;K2<=0;K1<=1;endelsebeginstate<=Clear;K2<=0;K1<=0;enddefault:state<=Idle;

endcaseendmodule18對(duì)串行輸入的數(shù)據(jù)流進(jìn)行檢測(cè),只要發(fā)現(xiàn)10010碼型會(huì)立即輸出一個(gè)高位的電平19`timescale1ns/1nsmoduleseqdet2(x,z,clk,rst);inputx,clk,rst;outputz;reg[2:0]state;//狀態(tài)寄存器wirez;parameterIDLE=3'd0, A=3'd1,B=3'd2, C=3'd3,D=3'd4, E=3'd5,F=3'd6,

G=3'd7;assignz=(state==D&&x==0)?1:0;20always@(posedge

clkornegedge

rst)

if(!rst)beginstate<=IDLE;endelse

casex(state)IDLE:

if(x==1) state<=A; elsestate<=IDLE;A:if(x==0) state<=B;elsestate<=A;B:if(x==0) state<=C;else state<=F;C:

if(x==1)state<=D;elsestate<=G;D:

if(x==0)state<=E;elsestate<=A;E:

if(x==0) state<=C;else state<=A;21

F:

if(x==1)state<=A;elsestate<=B;G:

if(x==1) state<=F;elsestate<=G;default: state<=IDLE;

endcaseendmodule22`timescale1ns/1ns`definehalfperiod20modulet_seqdet2;reg

clk,rst;reg[23:0]data;wirez,x;assignx=data[23];always#(`halfperiod)clk=~clk;always@(posedge

clk) #2data={data[22:0],data[23]};seqdet2m(.x(x),.z(z),.clk(clk),.rst(rst));23initialbegin

clk=0;

rst=1;#2rst=0;#30rst=1;data=20'b1100_1001_0000_1001_0100;//data=20'b1100_0010_0000_1001_0100;//data=20'b1100_1001_0000_1001_0100;//碼流數(shù)據(jù)

#(`halfperiod*1000)$stop;end

endmodule24`timescale1ns/1nsmoduleseqdet3(x,z,clk,rst);inputx,clk,rst;outputz;reg[2:0]state;//狀態(tài)寄存器wirez;parameterIDLE=3'd0, A=3'd1,B=3'd2, C=3'd3,D=3'd4,E=3'd5;assignz=(state==D&&x==0)?1:0;25always@(posedge

clkornegedge

rst)

if(!rst)beginstate<=IDLE;endelse

casex(state)IDLE:

if(x==1) state<=A; elsestate<=IDLE;A:if(x==0) state<=B;elsestate<=A;B:if(x==0)state<=C;elsestate<=A;

C:

if(x==1) state<=D;elsestate<=IDLE;D:

if(x==0)state<=E;elsestate<=A;E:

if(x==0) state<=C;elsestate<=A; default: state<=IDLE;

endcaseendmodule26控制A/D變換器的幾種方法使用單片機(jī)使用高性能嵌入式CPU(如ARM)使用DSP使用FPGA使用ASIC27ADC0809時(shí)序START是轉(zhuǎn)換啟動(dòng)信號(hào),高電平有效;ALE是3位通道選擇地址(ADDC、ADDB、ADDA)信號(hào)的鎖存信號(hào)。當(dāng)模擬量送至某一輸入端(如IN1或IN2等),由3位地址信號(hào)選擇,而地址信號(hào)由ALE鎖存;EOC是轉(zhuǎn)換情況狀態(tài)信號(hào)(類似于AD574的STATUS),當(dāng)啟動(dòng)轉(zhuǎn)換約100us后,EOC產(chǎn)生一個(gè)負(fù)脈沖,以示轉(zhuǎn)換結(jié)束;在EOC的上升沿后,若使輸出使能信號(hào)OE為高電平,則控制打開(kāi)三態(tài)緩沖器,把轉(zhuǎn)換好的8位數(shù)據(jù)結(jié)果輸至數(shù)據(jù)總線。至此ADC0809的一次轉(zhuǎn)換結(jié)束。28moduleadcint(reset,d,clk,eoc,lock1,ale,start,oe,adda,q);input[7:0]d;inputreset,clk,eoc;outputlock1,ale,start,oe,adda;output[7:0]q;reg

ale,start,oe;parameterst0=0,st1=1,st2=2,st3=3,st4=4,st5=5,st6=6;reg[2:0]current_state=st0;reg[2:0]next_state=st0;reg[7:0]regl;reglock;assignadda=1'b1;assignlock1=lock;29always@(current_stateoreocorreset)beginif(reset)beginale<=1'b0;start<=1'b0;oe<=1'b0;lock<=1'b0;next_state<=st0;endelsebegincase(current_state)st0:beginale<=1'b0;start<=1'b0;

oe<=1'b0;lock<=1'b0;

next_state<=st1;end30

st1:beginale<=1'b1;start<=1'b0;oe<=1'b0;lock<=1'b0;next_state<=st2;endst2:begin

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論