版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)字系統(tǒng)設(shè)計(jì)的核心知識(shí)
復(fù)雜數(shù)字系統(tǒng)的構(gòu)成;基本電路和Verilog的對(duì)應(yīng)關(guān)系;同步有限狀態(tài)機(jī)在電路中的作用;時(shí)鐘樹(shù)與自動(dòng)綜合技術(shù)數(shù)字系統(tǒng)設(shè)計(jì)的核心知識(shí)
復(fù)雜數(shù)字系統(tǒng)的構(gòu)成;1數(shù)字邏輯電路的構(gòu)成
-組合邏輯:輸出只是輸入邏輯電平的函數(shù)(有延時(shí)),與電路的原始狀態(tài)無(wú)關(guān)。時(shí)序邏輯:輸出不只是輸入的邏輯電平的函數(shù),還與電路所處的狀態(tài)有關(guān)。同步時(shí)序邏輯是在同一時(shí)鐘跳變節(jié)拍的前提下,如輸入條件滿足,則進(jìn)入下一狀態(tài),否則仍留在原來(lái)的狀態(tài)的狀態(tài)機(jī)。數(shù)字邏輯電路的構(gòu)成
-組合邏輯:輸出只是輸入邏輯電平的函2數(shù)字邏輯電路的構(gòu)成組合邏輯:由與、或、非門組成的網(wǎng)絡(luò)。常用的有:多路器、數(shù)據(jù)通路開(kāi)關(guān)、加法器、乘法器等,沒(méi)有記憶功能。時(shí)序邏輯:
由多個(gè)觸發(fā)器和多個(gè)組合邏輯塊組成的網(wǎng)絡(luò)。常用的有:計(jì)數(shù)器、復(fù)雜的數(shù)據(jù)流動(dòng)控制邏輯、運(yùn)算控制邏輯、指令分析和操作控制邏輯。同步時(shí)序邏輯的設(shè)計(jì)是設(shè)計(jì)復(fù)雜的數(shù)字邏輯系統(tǒng)的核心。存儲(chǔ)器和寄存器:用于暫時(shí)存儲(chǔ)數(shù)據(jù)信息。數(shù)字邏輯電路的構(gòu)成組合邏輯:由與、或、非門組成的網(wǎng)絡(luò)。常用的3組合邏輯舉例之一
一個(gè)八位數(shù)據(jù)通路控制器`defineON1‘b1`defineOFF1‘b0wireControlSwitch;wire[7:0]out,in;assignout=(ControlSwith==`ON)?in:8‘h00in[7]ControlSwitchout[7]in[0]out[0]…...…...組合邏輯舉例之一
一個(gè)八位數(shù)據(jù)通路控制器`define4一個(gè)八位數(shù)據(jù)通路控制器的波形:
in[7:0]開(kāi)關(guān)out[7:0]tt31
0215
3262
88
0215
320000in[7]ControlSwitchout[7]in[0]out[0]…...…...一個(gè)八位數(shù)據(jù)通路控制器的波形:
in[7:0]開(kāi)關(guān)out[5帶寄存器的八位數(shù)據(jù)通路控制器的波形in[7]ControlSwitchout[7]CLOCKDQ[7]CLOCKin[0]ControlSwitchout[0]DQ[0]out[7]out[0]帶寄存器的八位數(shù)據(jù)通路控制器的波形in[7]ControlS6帶寄存器的八位數(shù)據(jù)通路控制器的Verilog描述`defineON1‘b1`defineOFF1‘b0wireControlSwitch;wireclockwire[7:0]out,in;always@(posedgeclock)if(ControlSwith==`ON)out<=in;elseout<=out;帶寄存器的八位數(shù)據(jù)通路控制器的Verilog描述`defin7帶復(fù)位端和使能端的寄存器
moduleregena(clock,ena,reset,R,Q);parametern=8;input[n-1:0]R;inputclock,enareset;output[n-1:0]Q;always@(posedgeclockornegedgereset)if(!reset)Q<=0;elseif(ena)Q<=R;endmoduleenaRclockDQQreset帶復(fù)位端和使能端的寄存器moduleregena(cl8具有并行置數(shù)和使能控制輸入的移位寄存器R1enawclockDQQresetQ1DQQ0R0load具有并行置數(shù)和使能控制輸入的移位寄存器R1enawclock9具有并行置數(shù)和使能控制輸入的移位寄存器moduleshiftregs(R,load,ena,w,clock,Q,reset);input[3:0]R;inputw,load,ena,reset,clock;output[3:0]Q;reg[3:0]Q;integerk;always@(posedgeclockornegedgereset)if(!reset)Q<=0;elseif(load)Q<=R;elseif(ena)beginQ[0]<=W;for(k=1;k<4;k+1)Q[k]<=Q[k-1];endendmodule具有并行置數(shù)和使能控制輸入的移位寄存器moduleshif10組合邏輯舉例之二:
一個(gè)八位三態(tài)數(shù)據(jù)通路控制器`defineON1‘b1`defineOFF1‘b0wireLinkBusSwitch;wire[7:0]outbuf;inout[7:0]bus;assignbus=(LinkBusSwitch==`ON)?outbuf:8‘hzz…...…...outbuf[7]LinkBusSwitchbus[7]組合邏輯舉例之二:
一個(gè)八位三態(tài)數(shù)據(jù)通路控制器`define11八位三態(tài)數(shù)據(jù)通路控制器的波形:
outbuf[7:0]開(kāi)bus[7:0]tt31
0215
3262
88
0215
32ZZZZLinkBusSwitch關(guān)outbuf[7]LinkBusSwitchbus[7]八位三態(tài)數(shù)據(jù)通路控制器的波形:
outbuf[7:0]開(kāi)b12靜態(tài)隨機(jī)存儲(chǔ)器(SRAM)
Sel信號(hào)必須維持一定時(shí)間,直到經(jīng)過(guò)兩個(gè)反向器傳遞過(guò)來(lái)的Data信號(hào)可以自動(dòng)保持;Data的驅(qū)動(dòng)能力必須大于小反向器的驅(qū)動(dòng)能力;用的三極管很少,可以把密度做得很高。SelData靜態(tài)隨機(jī)存儲(chǔ)器(SRAM)Sel信號(hào)必須維持一定時(shí)間13靜態(tài)隨機(jī)存儲(chǔ)器(SRAM)陣列Sel0Data[0]Sel1Data[1]靜態(tài)隨機(jī)存儲(chǔ)器(SRAM)陣列Sel0Data[0]Sel114地址譯碼和SRAM塊的讀寫DataoutputAddressAm-1A1A0Am-2writereadDatainputsel0sel1Sel2m-2Sel2m-1地址譯碼器地址譯碼和SRAM塊的讀寫DataoutputAddre15開(kāi)關(guān)邏輯應(yīng)用舉例
寄存器間數(shù)據(jù)流動(dòng)的控制開(kāi)關(guān)qdqdqdqdqdqdqdqdqdqdqdqdclock開(kāi)關(guān)S1
開(kāi)關(guān)S2組合邏輯組合邏輯寄存器1寄存器2寄存器3開(kāi)關(guān)邏輯應(yīng)用舉例
寄存器間數(shù)據(jù)流動(dòng)的控制開(kāi)關(guān)qdqdqdqd16開(kāi)關(guān)邏輯應(yīng)用舉例
寄存器間數(shù)據(jù)流動(dòng)的控制開(kāi)關(guān)clock開(kāi)關(guān)S5
寄存器Cqd開(kāi)關(guān)S6開(kāi)關(guān)S3
寄存器Bqd開(kāi)關(guān)S4開(kāi)關(guān)S1
寄存器Aqd開(kāi)關(guān)S2開(kāi)關(guān)邏輯應(yīng)用舉例
寄存器間數(shù)據(jù)流動(dòng)的控制開(kāi)關(guān)clock開(kāi)關(guān)S17開(kāi)關(guān)邏輯的時(shí)延問(wèn)題
控制數(shù)據(jù)運(yùn)算和流動(dòng)的開(kāi)關(guān)的開(kāi)啟和關(guān)閉時(shí)序.
組合邏輯輸出控制開(kāi)關(guān)Sn
in[7:0]out[15:0]in[7:0]
8‘d31
8‘d202
16‘d93
16‘d606延時(shí)10nsSn開(kāi)關(guān)out[15:0]ttt開(kāi)關(guān)邏輯的時(shí)延問(wèn)題
控制數(shù)據(jù)運(yùn)算和流動(dòng)的開(kāi)關(guān)的開(kāi)啟和關(guān)閉時(shí)序18全局時(shí)鐘網(wǎng)和平衡樹(shù)結(jié)構(gòu)全局時(shí)鐘網(wǎng)絡(luò)觸發(fā)器緩沖器
觸發(fā)器1觸發(fā)器n圖1全局時(shí)鐘網(wǎng)示意圖
圖2平衡樹(shù)結(jié)構(gòu)示意圖全局時(shí)鐘網(wǎng)和平衡樹(shù)結(jié)構(gòu)全局時(shí)鐘網(wǎng)絡(luò)觸發(fā)器緩沖器觸發(fā)器1觸19避免冒險(xiǎn)和競(jìng)爭(zhēng)由于組合邏輯和布線的延遲引起abttcclockabc避免冒險(xiǎn)和競(jìng)爭(zhēng)由于組合邏輯和布線的延遲引起abttccloc20避免冒險(xiǎn)和競(jìng)爭(zhēng)與流水線組合邏輯和布線的延遲在組合邏輯中的疊加ba#2#3#4cedba#2#3#4ced總延遲=Max{2,3}+4=7時(shí)鐘周期必須>7ns總延遲={Max{2,3}+4+1}=8時(shí)鐘周期必須>4ns總處理數(shù)據(jù)的吞吐量增加#1#1clock避免冒險(xiǎn)和競(jìng)爭(zhēng)與流水線組合邏輯和布線的延遲在組合邏輯中的疊加21為什么要設(shè)計(jì)有限狀態(tài)機(jī)?
如果能嚴(yán)格以時(shí)鐘跳變沿為前提,按排好時(shí)時(shí)序,來(lái)操作邏輯系統(tǒng)中每一個(gè)開(kāi)關(guān)Si,則系統(tǒng)中數(shù)據(jù)的流動(dòng)和處理會(huì)按同一時(shí)鐘節(jié)拍有序地進(jìn)行,可以控制冒險(xiǎn)和競(jìng)爭(zhēng)現(xiàn)象對(duì)邏輯運(yùn)算的破壞,時(shí)延問(wèn)題就能有效地加以解決。利用同步有限狀態(tài)機(jī)就能產(chǎn)生復(fù)雜的以時(shí)鐘跳變沿為前提的同步時(shí)序邏輯,并提供操作邏輯系統(tǒng)的開(kāi)關(guān)陣列所需要的復(fù)雜控制時(shí)序(具有信號(hào)互鎖和先后次序等要求的)。為什么要設(shè)計(jì)有限狀態(tài)機(jī)?
如果能嚴(yán)格以時(shí)鐘跳變沿為前提22為什么要設(shè)計(jì)有限狀態(tài)機(jī)?如果我們能設(shè)計(jì)這樣一個(gè)電路:1)能記住自己目前所處的狀態(tài);2)狀態(tài)的變化只可能在同一個(gè)時(shí)鐘的跳變沿時(shí)刻發(fā)生,而不可能發(fā)生在任意時(shí)刻;3)在時(shí)鐘跳變沿時(shí)刻,如輸入條件滿足,則進(jìn)入下一狀態(tài),并記住自己目前所處的狀態(tài),否則仍保留原來(lái)的狀態(tài);4)在進(jìn)入不同的狀態(tài)時(shí)刻,對(duì)系統(tǒng)的開(kāi)關(guān)陣列做開(kāi)啟或關(guān)閉的操作。為什么要設(shè)計(jì)有限狀態(tài)機(jī)?如果我們能設(shè)計(jì)這樣一個(gè)電路:23為什么要設(shè)計(jì)有限狀態(tài)機(jī)?clock10nsS2開(kāi)關(guān)S1tttSnS3tttS4為什么要設(shè)計(jì)有限狀態(tài)機(jī)?clock10nsS2開(kāi)關(guān)S124為什么要設(shè)計(jì)有限狀態(tài)機(jī)?
有了以上電路,我們就不難設(shè)計(jì)出復(fù)雜的控制序列來(lái)操縱數(shù)字系統(tǒng)的控制開(kāi)關(guān)陣列。能達(dá)到以上要求的電路就是時(shí)序和組合電路互相結(jié)合的產(chǎn)物:同步有限狀態(tài)機(jī)和由狀態(tài)和時(shí)鐘共同控制的開(kāi)關(guān)邏輯陣列。我們只要掌握有限狀態(tài)機(jī)的基本設(shè)計(jì)方法,加上對(duì)基本電路的掌握,再加上對(duì)數(shù)據(jù)處理的過(guò)程的細(xì)致了解,我們就可以避免由于邏輯器件和布線延遲產(chǎn)生的冒險(xiǎn)競(jìng)爭(zhēng)現(xiàn)象所造成的破壞,設(shè)計(jì)出符合要求的復(fù)雜數(shù)字邏輯系統(tǒng)。為什么要設(shè)計(jì)有限狀態(tài)機(jī)?有了以上電路,我們就不難設(shè)計(jì)出25數(shù)字系統(tǒng)的構(gòu)成示意圖同步有限狀態(tài)機(jī)ena_2ena_3ena_nena_1clock組合邏輯1寄存器組組合邏輯2寄存器組組合邏輯3寄存器組組合邏輯N寄存器組input_1input_2input_n數(shù)字系統(tǒng)的構(gòu)成示意圖ena_2ena_3ena_nena_126同步有限狀態(tài)機(jī)的設(shè)計(jì)什么是有限狀態(tài)機(jī)(FSM)FSM的種類和不同點(diǎn)設(shè)計(jì)舉例同步有限狀態(tài)機(jī)的設(shè)計(jì)什么是有限狀態(tài)機(jī)(FSM)27什么是有限狀態(tài)機(jī)?
-有限狀態(tài)機(jī)是由寄存器組和組合邏輯構(gòu)成的硬件時(shí)序電路;-其狀態(tài)(即由寄存器組的1和0的組合狀態(tài)所構(gòu)成的有限個(gè)狀態(tài))只能在同一時(shí)鐘跳變沿的情況下才能從一個(gè)狀態(tài)轉(zhuǎn)向另一個(gè)狀態(tài);-究竟轉(zhuǎn)向哪一狀態(tài)不但取決于各個(gè)輸入值,還取決于當(dāng)前狀態(tài)。-狀態(tài)機(jī)可用于產(chǎn)生在時(shí)鐘跳變沿時(shí)刻開(kāi)關(guān)的復(fù)雜的控制邏輯,是數(shù)字邏輯的控制核心。什么是有限狀態(tài)機(jī)?
28Mealy狀態(tài)機(jī)
下一個(gè)狀態(tài)=F(當(dāng)前狀態(tài),輸入信號(hào));
輸出信號(hào)=G(當(dāng)前狀態(tài),輸入信號(hào));
圖1.時(shí)鐘同步的狀態(tài)機(jī)結(jié)構(gòu)(Mealy狀態(tài)機(jī))下一狀態(tài)的邏輯F輸出邏輯G狀態(tài)寄存器時(shí)鐘信號(hào)clkclk輸入輸入輸出當(dāng)前狀態(tài)激勵(lì)信號(hào)Mealy狀態(tài)機(jī)
下一個(gè)狀態(tài)=F(當(dāng)前狀態(tài),輸入信號(hào)29
Moor狀態(tài)機(jī)
下一個(gè)狀態(tài)=F(當(dāng)前狀態(tài),輸入信號(hào))
輸出信號(hào)=G(當(dāng)前狀態(tài));
下一狀態(tài)的邏輯F輸出邏輯G狀態(tài)寄存器時(shí)鐘信號(hào)clkclk輸入輸入輸出當(dāng)前狀態(tài)激勵(lì)信號(hào)圖2.時(shí)鐘同步的狀態(tài)機(jī)結(jié)構(gòu)(Moor狀態(tài)機(jī))
Moor狀態(tài)機(jī)
下一個(gè)狀態(tài)=F(當(dāng)前狀態(tài),輸入信號(hào)30
帶流水線輸出的Mealy狀態(tài)機(jī)
下一個(gè)狀態(tài)=F(當(dāng)前狀態(tài),輸入信號(hào));
輸出信號(hào)=G(當(dāng)前狀態(tài),輸入信號(hào));
輸出圖3帶流水線輸出的Mealy狀態(tài)機(jī)下一狀態(tài)的邏輯F輸出邏輯G狀態(tài)寄存器時(shí)鐘信號(hào)clkclk輸入輸入當(dāng)前狀態(tài)激勵(lì)信號(hào)輸出流水線寄存器
clk輸入
帶流水線輸出的Mealy狀態(tài)機(jī)
下一個(gè)狀態(tài)=31簡(jiǎn)單的狀態(tài)機(jī)設(shè)計(jì)舉例狀態(tài)轉(zhuǎn)移圖表示RTL級(jí)可綜合的Verilog模塊表示簡(jiǎn)單的狀態(tài)機(jī)設(shè)計(jì)舉例狀態(tài)轉(zhuǎn)移圖表示32有限狀態(tài)機(jī)的圖形表示圖形表示:狀態(tài)、轉(zhuǎn)移、條件和邏輯開(kāi)關(guān)圖3.4狀態(tài)轉(zhuǎn)移圖Idle
Start
StopClear
A/K1=0
!AA/K2=1
!Reset/K2=0K1=0!Reset/K2=0K1=0
(!Reset|!A)/K2=0K1=1!Reset/K2=0K1=0有限狀態(tài)機(jī)的圖形表示圖形表示:狀態(tài)、轉(zhuǎn)移、條件和邏輯開(kāi)關(guān)圖333有限狀態(tài)機(jī)的Verilog描述定義模塊名和輸入輸出端口;定義輸入、輸出變量或寄存器;定義時(shí)鐘和復(fù)位信號(hào);定義狀態(tài)變量和狀態(tài)寄存器;用時(shí)鐘沿觸發(fā)的always塊表示狀態(tài)轉(zhuǎn)移過(guò)程;在復(fù)位信號(hào)有效時(shí)給狀態(tài)寄存器賦初始值;描述狀態(tài)的轉(zhuǎn)換過(guò)程:符合條件,從一個(gè)狀態(tài)到另外一個(gè)狀態(tài),否則留在原狀態(tài);驗(yàn)證狀態(tài)轉(zhuǎn)移的正確性,必須完整和全面。有限狀態(tài)機(jī)的Verilog描述定義模塊名和輸入輸出端口;34表示方法之一modulefsm(Clock,Reset,A,K2,K1);inputClock,Reset,A;//定義時(shí)鐘、復(fù)位和輸入信號(hào)outputK2,K1;//定義輸出控制信號(hào)的端口regK2,K1;//定義輸出控制信號(hào)的寄存器reg[1:0]state;
//定義狀態(tài)寄存器parameterIdle=2’b00,Start=2’b01,Stop=2’b10,Clear=2’b11;//定義狀態(tài)變量參數(shù)值always@(posedgeClock)if(!Reset)begin//定義復(fù)位后的初始狀態(tài)和輸出值state<=Idle;K2<=0;K1<=0;end表示方法之一modulefsm(Clock,Rese35表示方法之一(續(xù))elsecase(state)Idle:beginif(A)beginstate<=Start;K1<=0;endelsestate<=Idle;endStart:beginif(!A)state<=Stop;elsestate<=Start;end表示方法之一(續(xù))else36表示方法之一(續(xù))
Stop:begin//符合條件進(jìn)入新?tīng)顟B(tài),否則留在原狀態(tài)if(A)beginstate<=Clear;K2<=1;endelsestate<=Stop;endClear:beginif(!A)beginstate<=Idle;K2<=0;K1<=1;endelsestate<=Clear;endendcaseendmodule
表示方法之一(續(xù))Stop:begin//符37表示方法之二我們還可以用另一個(gè)VerilogHDL模型來(lái)表示同一個(gè)有限狀態(tài),見(jiàn)下例。(用可綜合的Verilog模塊設(shè)計(jì)用獨(dú)熱碼表示狀態(tài)的狀態(tài)機(jī))
modulefsm(Clock,Reset,A,K2,K1);inputClock,Reset,A;outputK2,K1;regK2,K1;reg[3:0]state;
parameterIdle=4’b1000,Start=4’b0100,Stop=4’b0010,Clear=4’b0001;
表示方法之二我們還可以用另一個(gè)VerilogHDL模型來(lái)38表示方法之二(續(xù))always@(posedgeclock)if(!Reset)beginstate<=Idle;K2<=0;K1<=0;endelsecase(state)Idle:if(A)beginstate<=Start;K1<=0;endelsestate<=Idle;
表示方法之二(續(xù))always@(posedgeclo39表示方法之二(續(xù))
Start:if(!A)state<=Stop;elsestate<=Start;Stop:if(A)beginstate<=Clear;K2<=1;endelsestate<=Stop;Clear:if(!A)beginstate<=Idle;K2<=0;K1<=1;endelsestate<=Clear;表示方法之二(續(xù))Start:if(!A)40表示方法之二(續(xù))
default:state<=Idle;endcaseendmodule
[例2]與[例1]的主要不同點(diǎn)是狀態(tài)編碼,[例2]采用了獨(dú)熱編碼,而[例1]則采用Gray碼,究竟采用哪一種編碼好要看具體情況而定。
表示方法之二(續(xù))default:s41表示方法之三
在比較復(fù)雜的狀態(tài)機(jī)設(shè)計(jì)過(guò)程中,我們往往把狀態(tài)的變化與輸出開(kāi)關(guān)的控制分成兩部分來(lái)考慮。就象前面講過(guò)的Mealy狀態(tài)機(jī)輸出部分的組合邏輯。為了調(diào)試方便,還常常把每一個(gè)輸出開(kāi)關(guān)寫成一個(gè)個(gè)獨(dú)立的always組合塊。在調(diào)試多輸出狀態(tài)機(jī)時(shí),這樣做比較容易發(fā)現(xiàn)問(wèn)題和改正模塊編寫中出現(xiàn)的問(wèn)題。建議同學(xué)們?cè)谠O(shè)計(jì)復(fù)雜的多輸出狀態(tài)機(jī)時(shí)采用下面的風(fēng)格舉例,說(shuō)明如下:
表示方法之三在比較復(fù)雜的狀態(tài)機(jī)設(shè)計(jì)過(guò)程中,我們往往把42表示方法之三(續(xù))modulefsm(Clock,Reset,A,K2,K1);inputClock,Reset,A;outputK2,K1;regK2,K1;reg[1:0]state,nextstate;
parameterIdle=2'b00,Start=2'b01,Stop=2'b10,Clear=2'b11;表示方法之三(續(xù))modulefsm(Clock,R43表示方法之三(續(xù))
//--------每一個(gè)時(shí)鐘沿產(chǎn)生一次可能的狀態(tài)變化-----------always@(posedgeClock)beginif(!Reset)state<=Idle;elsestate<=nextstate;end//-------------------------------------------------------表示方法之三(續(xù))//--------每一個(gè)時(shí)鐘沿產(chǎn)生一44表示方法之三(續(xù))//------產(chǎn)生下一狀態(tài)的組合邏輯-------------------------
always@(stateorA)case(state)Idle:if(A)nextstate=Start;elsenextstate=Idle;Start:if(!A)nextstate=Stop;elsenextstate=Start;Stop:if(A)nextstate=Clear;elsenextstate=Stop;Clear:if(!A)nextstate=Idle;elsenextstate=Clear;default:nextstate=2'bxx;endcase表示方法之三(續(xù))//------產(chǎn)生下一狀態(tài)的組合邏輯45表示方法之三(續(xù))//----產(chǎn)生輸出K1的組合邏輯--------------always@(stateorResetorA)if(!Reset)K1=0;elseif(state==Clear&&!A)//從Clear轉(zhuǎn)向IdleK1=1;elseK1=0;
//---產(chǎn)生輸出K2的組合邏輯---------------always@(stateorResetorA)if(!Reset)K2=0;elseif(state==Stop&&A)//從Stop轉(zhuǎn)向ClearK2=1; elseK2=0;//------------------------------------------endmodule
表示方法之三(續(xù))//----產(chǎn)生輸出K1的組合邏輯--46表示方法之四
用輸出指定的碼表示狀態(tài)的狀態(tài)機(jī)
方法四采用了另一種方法:直接把狀態(tài)碼定義為輸出。也就是把狀態(tài)碼的指定與狀態(tài)機(jī)控制的輸出聯(lián)系起來(lái),把狀態(tài)的變化直接用作輸出,這樣做可以提高輸出信號(hào)的開(kāi)關(guān)速度并節(jié)省電路器件。這種設(shè)計(jì)方法常用在高速狀態(tài)機(jī)中。建議同學(xué)們?cè)谠O(shè)計(jì)高速狀態(tài)機(jī)時(shí)采用方法四的風(fēng)格。例中state[3]和state[0]分別表示前面兩個(gè)例子中的輸出K2和K1。表示方法之四
用輸出指定的碼表示狀態(tài)的狀態(tài)機(jī)方法四采用了47表示方法之四(續(xù))modulefsm(Clock,Reset,A,K2,K1,state);inputClock,Reset,A;outputK2,K1;output[4:0]state;reg[4:0]state;
assignK2=state[4];//把狀態(tài)變量的最高位用作輸出K2assignK1=state[0];//把狀態(tài)變量的最低位用作輸出K1表示方法之四(續(xù))modulefsm(Clock,R48表示方法之四(續(xù))parameter//-------outputcodedstateassignment---//--------K2_i_j_n_K1–Idle=5'b0_0_0_0_0,Start=5'b0_0_0_1_0,Stop=5'b0_0_1_0_0,StopToClear=5'b1_1_0_0_0,Clear=5'b0_1_0_1_0,ClearToIdle=5'b0_0_1_1_1;
表示方法之四(續(xù))parameter49表示方法之四(續(xù))
always@(posedgeClock)if(!Reset)beginstate<=Idle;endelsecase(state)Idle:if(A)state<=Start;elsestate<=Idle;
Start:if(!A)state<=Stop;elsestate<=Start;
表示方法之四(續(xù))always@(posedgeClo50表示方法之四(續(xù))Stop:if(A)state<=StopToClear;elsestate<=Stop;StopToClear:state<=Clear;Clear:if(!A)state<=ClearToIdle;elsestate<=Clear;
ClearToIdle:state<=Idle;
default:state<=Idle;endcaseendmodule表示方法之四(續(xù))Stop:if(A)51狀態(tài)機(jī)的測(cè)試不同風(fēng)格的描述適合不同規(guī)模的狀態(tài)機(jī)和不同的綜合工具,有的風(fēng)格查錯(cuò)和修改較容易,但寫簡(jiǎn)單的狀態(tài)機(jī)時(shí)比較麻煩。Synopsys公司的綜合器建議使用這種風(fēng)格來(lái)描述狀態(tài)機(jī)。
上面四個(gè)例子是同一個(gè)狀態(tài)機(jī)的四種不同的VerilogHDL模型,它們都是可綜合的,在設(shè)計(jì)復(fù)雜程度不同的狀態(tài)機(jī)時(shí)有它們各自的優(yōu)勢(shì)。如用不同的綜合器對(duì)這四個(gè)例子進(jìn)行綜合,綜合出的邏輯電路可能會(huì)有些不同,但邏輯功能是相同的。下面列出測(cè)試這些不同風(fēng)格狀態(tài)機(jī)的測(cè)試模塊,供同學(xué)們參考:
狀態(tài)機(jī)的測(cè)試不同風(fēng)格的描述適合不同規(guī)模的狀態(tài)機(jī)和不同52
狀態(tài)機(jī)的測(cè)試模塊`timescale1ns/1nsmodulet;rega;regclock,rst;wirek2,k1;initial//initial常用于仿真時(shí)信號(hào)的給出。begina=0;rst=1;//給復(fù)位信號(hào)變量賦初始值clock=0;//給時(shí)鐘變量賦初始值#22rst=0;//使復(fù)位信號(hào)有效#133rst=1;//經(jīng)過(guò)一個(gè)多周期后使復(fù)位信號(hào)無(wú)效end
狀態(tài)機(jī)的測(cè)試模塊`timescale1ns/1ns53
狀態(tài)機(jī)的測(cè)試模塊
always#50clock=~clock;//產(chǎn)生周期性的時(shí)鐘
always@(posedgeclock)//在每次時(shí)鐘正跳變沿時(shí)刻產(chǎn)生不同的abegin#30a={$random}%2;//每次a是0還是1是隨機(jī)的。#(3*50+12);//a的值維持一段時(shí)間endinitialbegin#100000$stop;end//系統(tǒng)任務(wù),暫停仿真以便觀察仿真波形。
//-----------調(diào)用被測(cè)試模塊t.m----------fsmm(.Clock(clock),.Reset(rst),.A(a),.K2(k2),.K1(k1));
endmodule
狀態(tài)機(jī)的測(cè)試模塊always#50clock=~54狀態(tài)機(jī)設(shè)計(jì)的總結(jié):有限狀態(tài)機(jī)設(shè)計(jì)的一般步驟:
1)
邏輯抽象,得出狀態(tài)轉(zhuǎn)換圖
2)
狀態(tài)化簡(jiǎn)
3)
狀態(tài)分配在觸發(fā)器資源豐富的FPGA或ASIC設(shè)計(jì)中采用獨(dú)熱編碼(one-hot-coding)既可以使電路性能得到保證又可充分利用其觸發(fā)器數(shù)量多的優(yōu)勢(shì),也可以采取輸出編碼的狀態(tài)指定來(lái)簡(jiǎn)化電路結(jié)構(gòu),并提高狀態(tài)機(jī)的運(yùn)行速度。
4)選定觸發(fā)器的類型并求出狀態(tài)方程、驅(qū)動(dòng)方程和輸出方程。
5)
按照方程得出邏輯圖狀態(tài)機(jī)設(shè)計(jì)的總結(jié):有限狀態(tài)機(jī)設(shè)計(jì)的一般步驟:55狀態(tài)機(jī)設(shè)計(jì)的總結(jié):
用VerilogHDL來(lái)描述有限狀態(tài)機(jī),可以充分發(fā)揮硬件描述語(yǔ)言的抽象建模能力,使用always塊語(yǔ)句和case(if)等條件語(yǔ)句及賦值語(yǔ)句即可方便地實(shí)現(xiàn)。具體的邏輯化簡(jiǎn)及邏輯電路到觸發(fā)器映射均可由計(jì)算機(jī)自動(dòng)完成,上述設(shè)計(jì)步驟中的第2步及4、5步不再需要很多的人為干預(yù),使電路設(shè)計(jì)工作得到簡(jiǎn)化,效率也有很大的提高。狀態(tài)機(jī)設(shè)計(jì)的總結(jié):56邏輯電路的測(cè)試故障模型測(cè)試集合的復(fù)雜性路徑的激活樹(shù)狀結(jié)構(gòu)的電路隨機(jī)測(cè)試時(shí)序電路的測(cè)試電路內(nèi)部自測(cè)試(Build-inSelf-Test)線路板的測(cè)試邏輯電路的測(cè)試故障模型57邏輯電路的測(cè)試
故障模型信號(hào)無(wú)法變化的模型
信號(hào)w總是固定在0或1:stuck_at_0表示為:w/0stuck_at_1表示為:w/1單個(gè)故障和多個(gè)故障
把多個(gè)故障問(wèn)題簡(jiǎn)化為許多個(gè)單個(gè)故障問(wèn)題來(lái)處理。CMOS電路的故障特點(diǎn)
晶體三極管的開(kāi)路或短路:stuck_at_0或stuck_at_1復(fù)雜的情形,不定態(tài);組合邏輯變?yōu)闀r(shí)序邏輯的行為….邏輯電路的測(cè)試
故障模型信號(hào)無(wú)法變化的模型58邏輯電路的測(cè)試
測(cè)試集合的復(fù)雜性
想要知道模塊中a,b,c,d,f端中是否有電平不能變化的,需要測(cè)試信號(hào)w1,w2,w3的各種變化組合。最全的情況有8種,最少有四種:測(cè)試集合={001,010,011,100}w1fw2w3dbac邏輯電路的測(cè)試
測(cè)試集合的復(fù)雜性
想要知道模塊中a,b59邏輯電路的測(cè)試
測(cè)試路徑的激活(Sensitizing)
把w1端的變化直接傳到f端,必須把w2置1,w3置0,w4置1。這叫做從w1到f的路徑被激活。W3=0fW2=1w1bacW4=1邏輯電路的測(cè)試
測(cè)試路徑的激活(Sensitizing)
把60邏輯電路的測(cè)試
樹(shù)狀結(jié)構(gòu)的電路
最小測(cè)試集合的確定比較麻煩fW4
W1W4W2W2W3
W1W3 ̄W3 ̄ ̄ ̄邏輯電路的測(cè)試
樹(shù)狀結(jié)構(gòu)的電路
最小測(cè)試集合的確定比較麻煩f61掃描路徑的安排clockDQ
y3clockDQ
y2正常0/掃描1Dy1
Q組合邏輯電路111000掃描輸入
Y3
Y2
Y1······掃描路徑的安排clockDQy3clockDQ62電路內(nèi)部自測(cè)試
(Build-inSelf-Test)在芯片中必須存儲(chǔ)有對(duì)測(cè)試向量的正確響應(yīng),經(jīng)過(guò)比較知道被測(cè)試電路是否有故障。測(cè)試向量被測(cè)試電路測(cè)試結(jié)果處理x0Pm-1P0Xn-1電路內(nèi)部自測(cè)試
(Build-inSelf-Test)在芯63四位內(nèi)部邏輯塊觀察器
Built-inLogicBlockObserver(BILBO)M1M2的不同組合產(chǎn)生不同的功能10DQDQDQDQM1M2q0q2q3q1clockP0P1P2P3G/Ssinxor四位內(nèi)部邏輯塊觀察器
Built-inLogicBloc64四位內(nèi)部邏輯塊觀察器
(BILBO)的M1M2的不同組合時(shí)不同的功能
M1M2=11,正常系統(tǒng)模式,p0到p3直接傳遞到q0到q3;M1M2=00,當(dāng)G/S=1時(shí),為移位寄存器模式,測(cè)試矢量一位一位地移動(dòng)進(jìn)入,給被測(cè)試電路一位一位地加上測(cè)試信號(hào)。當(dāng)G/S=0時(shí),電路成為二進(jìn)制偽隨機(jī)序列發(fā)生器。(xor的兩個(gè)為輸入端相同時(shí),輸出為0,否則為1)M1M2=10,為簽字模式,p0到p3與寄存器中存儲(chǔ)的數(shù)比較后,得到簽字輸出q0到q3,相同為0,不同出現(xiàn)1。M1M2=01,復(fù)位模式,所有觸發(fā)器置0。四位內(nèi)部邏輯塊觀察器
(BILBO)的M1M2的不同組合65簽字分析分五個(gè)步驟完成簽字分析過(guò)程:組合電路塊CN1組合電路塊CN2BILBO1BILBO2掃描輸出掃描輸入簽字分析分五個(gè)步驟完成簽字分析過(guò)程:組合電路塊CN1組合電路66簽字分析的
五個(gè)步驟把測(cè)試向量一位一位地輸入BILBO1,復(fù)位BILBO2。用BILBO1做偽隨機(jī)序列信號(hào)源,用BILBO2產(chǎn)生簽字分析結(jié)果。把BILBO2的內(nèi)容逐位輸出,在外面比較簽字分析;然后逐位向BILBO2輸入CN2的測(cè)試向量,啟動(dòng)測(cè)試;把BILBO1中的寄存器復(fù)位。用BILBO2做偽隨機(jī)序列信號(hào)源,用BILBO1產(chǎn)生簽字分析結(jié)果。把BILBO1的內(nèi)容逐位輸出,在外面比較簽字分析。簽字分析的
五個(gè)步驟把測(cè)試向量一位一位地輸入BILBO1,復(fù)67邊界掃描電路的可測(cè)試性:可以施加測(cè)試向量,并可觀察輸出結(jié)果。電路的可測(cè)試性包括:芯片的可測(cè)試、線路板可測(cè)試、系統(tǒng)可測(cè)試。用移位寄存器的方法,把測(cè)試向量逐位移入寄存器,把測(cè)試結(jié)果逐位移出寄存器,與EDA仿真工具的結(jié)果進(jìn)行比較,分析真實(shí)的物理線路是否運(yùn)行正常。這個(gè)方法非常普及。已經(jīng)建立有關(guān)邊界掃描的國(guó)際標(biāo)準(zhǔn):IEEEStandard1149.1.設(shè)計(jì)線路板、芯片都要符合國(guó)際標(biāo)準(zhǔn)。有自動(dòng)化工具在芯片設(shè)計(jì)的過(guò)程中(功能邏輯設(shè)計(jì)結(jié)束后)插入有關(guān)DFT(DesignForTest)設(shè)計(jì)。邊界掃描電路的可測(cè)試性:可以施加測(cè)試向量,并可觀察輸出結(jié)果68有關(guān)測(cè)試的總結(jié)小規(guī)模的電路可以進(jìn)行全覆蓋測(cè)試來(lái)驗(yàn)證它的功能。組合邏輯可以根據(jù)真值表來(lái)測(cè)試。時(shí)序邏輯可以根據(jù)狀態(tài)轉(zhuǎn)移表來(lái)測(cè)試。如果電路是根據(jù)上面介紹的可測(cè)試性來(lái)設(shè)計(jì)的,則小規(guī)模的電路進(jìn)行完整的測(cè)試是比較容易的。大規(guī)模電路無(wú)法進(jìn)行全覆蓋的窮舉測(cè)試,因?yàn)闇y(cè)試向量數(shù)量太大,必須動(dòng)腦筋想辦法找到可管理的有效測(cè)試集合,以節(jié)省測(cè)試時(shí)間。EDA工具對(duì)于得到設(shè)計(jì)電路的測(cè)試集是有幫助的,但是并不能確定電路的功能確實(shí)完全符合設(shè)計(jì)初衷。有關(guān)測(cè)試的總結(jié)小規(guī)模的電路可以進(jìn)行全覆蓋測(cè)試來(lái)驗(yàn)證它的功能。69數(shù)字系統(tǒng)設(shè)計(jì)的核心知識(shí)
復(fù)雜數(shù)字系統(tǒng)的構(gòu)成;基本電路和Verilog的對(duì)應(yīng)關(guān)系;同步有限狀態(tài)機(jī)在電路中的作用;時(shí)鐘樹(shù)與自動(dòng)綜合技術(shù)數(shù)字系統(tǒng)設(shè)計(jì)的核心知識(shí)
復(fù)雜數(shù)字系統(tǒng)的構(gòu)成;70數(shù)字邏輯電路的構(gòu)成
-組合邏輯:輸出只是輸入邏輯電平的函數(shù)(有延時(shí)),與電路的原始狀態(tài)無(wú)關(guān)。時(shí)序邏輯:輸出不只是輸入的邏輯電平的函數(shù),還與電路所處的狀態(tài)有關(guān)。同步時(shí)序邏輯是在同一時(shí)鐘跳變節(jié)拍的前提下,如輸入條件滿足,則進(jìn)入下一狀態(tài),否則仍留在原來(lái)的狀態(tài)的狀態(tài)機(jī)。數(shù)字邏輯電路的構(gòu)成
-組合邏輯:輸出只是輸入邏輯電平的函71數(shù)字邏輯電路的構(gòu)成組合邏輯:由與、或、非門組成的網(wǎng)絡(luò)。常用的有:多路器、數(shù)據(jù)通路開(kāi)關(guān)、加法器、乘法器等,沒(méi)有記憶功能。時(shí)序邏輯:
由多個(gè)觸發(fā)器和多個(gè)組合邏輯塊組成的網(wǎng)絡(luò)。常用的有:計(jì)數(shù)器、復(fù)雜的數(shù)據(jù)流動(dòng)控制邏輯、運(yùn)算控制邏輯、指令分析和操作控制邏輯。同步時(shí)序邏輯的設(shè)計(jì)是設(shè)計(jì)復(fù)雜的數(shù)字邏輯系統(tǒng)的核心。存儲(chǔ)器和寄存器:用于暫時(shí)存儲(chǔ)數(shù)據(jù)信息。數(shù)字邏輯電路的構(gòu)成組合邏輯:由與、或、非門組成的網(wǎng)絡(luò)。常用的72組合邏輯舉例之一
一個(gè)八位數(shù)據(jù)通路控制器`defineON1‘b1`defineOFF1‘b0wireControlSwitch;wire[7:0]out,in;assignout=(ControlSwith==`ON)?in:8‘h00in[7]ControlSwitchout[7]in[0]out[0]…...…...組合邏輯舉例之一
一個(gè)八位數(shù)據(jù)通路控制器`define73一個(gè)八位數(shù)據(jù)通路控制器的波形:
in[7:0]開(kāi)關(guān)out[7:0]tt31
0215
3262
88
0215
320000in[7]ControlSwitchout[7]in[0]out[0]…...…...一個(gè)八位數(shù)據(jù)通路控制器的波形:
in[7:0]開(kāi)關(guān)out[74帶寄存器的八位數(shù)據(jù)通路控制器的波形in[7]ControlSwitchout[7]CLOCKDQ[7]CLOCKin[0]ControlSwitchout[0]DQ[0]out[7]out[0]帶寄存器的八位數(shù)據(jù)通路控制器的波形in[7]ControlS75帶寄存器的八位數(shù)據(jù)通路控制器的Verilog描述`defineON1‘b1`defineOFF1‘b0wireControlSwitch;wireclockwire[7:0]out,in;always@(posedgeclock)if(ControlSwith==`ON)out<=in;elseout<=out;帶寄存器的八位數(shù)據(jù)通路控制器的Verilog描述`defin76帶復(fù)位端和使能端的寄存器
moduleregena(clock,ena,reset,R,Q);parametern=8;input[n-1:0]R;inputclock,enareset;output[n-1:0]Q;always@(posedgeclockornegedgereset)if(!reset)Q<=0;elseif(ena)Q<=R;endmoduleenaRclockDQQreset帶復(fù)位端和使能端的寄存器moduleregena(cl77具有并行置數(shù)和使能控制輸入的移位寄存器R1enawclockDQQresetQ1DQQ0R0load具有并行置數(shù)和使能控制輸入的移位寄存器R1enawclock78具有并行置數(shù)和使能控制輸入的移位寄存器moduleshiftregs(R,load,ena,w,clock,Q,reset);input[3:0]R;inputw,load,ena,reset,clock;output[3:0]Q;reg[3:0]Q;integerk;always@(posedgeclockornegedgereset)if(!reset)Q<=0;elseif(load)Q<=R;elseif(ena)beginQ[0]<=W;for(k=1;k<4;k+1)Q[k]<=Q[k-1];endendmodule具有并行置數(shù)和使能控制輸入的移位寄存器moduleshif79組合邏輯舉例之二:
一個(gè)八位三態(tài)數(shù)據(jù)通路控制器`defineON1‘b1`defineOFF1‘b0wireLinkBusSwitch;wire[7:0]outbuf;inout[7:0]bus;assignbus=(LinkBusSwitch==`ON)?outbuf:8‘hzz…...…...outbuf[7]LinkBusSwitchbus[7]組合邏輯舉例之二:
一個(gè)八位三態(tài)數(shù)據(jù)通路控制器`define80八位三態(tài)數(shù)據(jù)通路控制器的波形:
outbuf[7:0]開(kāi)bus[7:0]tt31
0215
3262
88
0215
32ZZZZLinkBusSwitch關(guān)outbuf[7]LinkBusSwitchbus[7]八位三態(tài)數(shù)據(jù)通路控制器的波形:
outbuf[7:0]開(kāi)b81靜態(tài)隨機(jī)存儲(chǔ)器(SRAM)
Sel信號(hào)必須維持一定時(shí)間,直到經(jīng)過(guò)兩個(gè)反向器傳遞過(guò)來(lái)的Data信號(hào)可以自動(dòng)保持;Data的驅(qū)動(dòng)能力必須大于小反向器的驅(qū)動(dòng)能力;用的三極管很少,可以把密度做得很高。SelData靜態(tài)隨機(jī)存儲(chǔ)器(SRAM)Sel信號(hào)必須維持一定時(shí)間82靜態(tài)隨機(jī)存儲(chǔ)器(SRAM)陣列Sel0Data[0]Sel1Data[1]靜態(tài)隨機(jī)存儲(chǔ)器(SRAM)陣列Sel0Data[0]Sel183地址譯碼和SRAM塊的讀寫DataoutputAddressAm-1A1A0Am-2writereadDatainputsel0sel1Sel2m-2Sel2m-1地址譯碼器地址譯碼和SRAM塊的讀寫DataoutputAddre84開(kāi)關(guān)邏輯應(yīng)用舉例
寄存器間數(shù)據(jù)流動(dòng)的控制開(kāi)關(guān)qdqdqdqdqdqdqdqdqdqdqdqdclock開(kāi)關(guān)S1
開(kāi)關(guān)S2組合邏輯組合邏輯寄存器1寄存器2寄存器3開(kāi)關(guān)邏輯應(yīng)用舉例
寄存器間數(shù)據(jù)流動(dòng)的控制開(kāi)關(guān)qdqdqdqd85開(kāi)關(guān)邏輯應(yīng)用舉例
寄存器間數(shù)據(jù)流動(dòng)的控制開(kāi)關(guān)clock開(kāi)關(guān)S5
寄存器Cqd開(kāi)關(guān)S6開(kāi)關(guān)S3
寄存器Bqd開(kāi)關(guān)S4開(kāi)關(guān)S1
寄存器Aqd開(kāi)關(guān)S2開(kāi)關(guān)邏輯應(yīng)用舉例
寄存器間數(shù)據(jù)流動(dòng)的控制開(kāi)關(guān)clock開(kāi)關(guān)S86開(kāi)關(guān)邏輯的時(shí)延問(wèn)題
控制數(shù)據(jù)運(yùn)算和流動(dòng)的開(kāi)關(guān)的開(kāi)啟和關(guān)閉時(shí)序.
組合邏輯輸出控制開(kāi)關(guān)Sn
in[7:0]out[15:0]in[7:0]
8‘d31
8‘d202
16‘d93
16‘d606延時(shí)10nsSn開(kāi)關(guān)out[15:0]ttt開(kāi)關(guān)邏輯的時(shí)延問(wèn)題
控制數(shù)據(jù)運(yùn)算和流動(dòng)的開(kāi)關(guān)的開(kāi)啟和關(guān)閉時(shí)序87全局時(shí)鐘網(wǎng)和平衡樹(shù)結(jié)構(gòu)全局時(shí)鐘網(wǎng)絡(luò)觸發(fā)器緩沖器
觸發(fā)器1觸發(fā)器n圖1全局時(shí)鐘網(wǎng)示意圖
圖2平衡樹(shù)結(jié)構(gòu)示意圖全局時(shí)鐘網(wǎng)和平衡樹(shù)結(jié)構(gòu)全局時(shí)鐘網(wǎng)絡(luò)觸發(fā)器緩沖器觸發(fā)器1觸88避免冒險(xiǎn)和競(jìng)爭(zhēng)由于組合邏輯和布線的延遲引起abttcclockabc避免冒險(xiǎn)和競(jìng)爭(zhēng)由于組合邏輯和布線的延遲引起abttccloc89避免冒險(xiǎn)和競(jìng)爭(zhēng)與流水線組合邏輯和布線的延遲在組合邏輯中的疊加ba#2#3#4cedba#2#3#4ced總延遲=Max{2,3}+4=7時(shí)鐘周期必須>7ns總延遲={Max{2,3}+4+1}=8時(shí)鐘周期必須>4ns總處理數(shù)據(jù)的吞吐量增加#1#1clock避免冒險(xiǎn)和競(jìng)爭(zhēng)與流水線組合邏輯和布線的延遲在組合邏輯中的疊加90為什么要設(shè)計(jì)有限狀態(tài)機(jī)?
如果能嚴(yán)格以時(shí)鐘跳變沿為前提,按排好時(shí)時(shí)序,來(lái)操作邏輯系統(tǒng)中每一個(gè)開(kāi)關(guān)Si,則系統(tǒng)中數(shù)據(jù)的流動(dòng)和處理會(huì)按同一時(shí)鐘節(jié)拍有序地進(jìn)行,可以控制冒險(xiǎn)和競(jìng)爭(zhēng)現(xiàn)象對(duì)邏輯運(yùn)算的破壞,時(shí)延問(wèn)題就能有效地加以解決。利用同步有限狀態(tài)機(jī)就能產(chǎn)生復(fù)雜的以時(shí)鐘跳變沿為前提的同步時(shí)序邏輯,并提供操作邏輯系統(tǒng)的開(kāi)關(guān)陣列所需要的復(fù)雜控制時(shí)序(具有信號(hào)互鎖和先后次序等要求的)。為什么要設(shè)計(jì)有限狀態(tài)機(jī)?
如果能嚴(yán)格以時(shí)鐘跳變沿為前提91為什么要設(shè)計(jì)有限狀態(tài)機(jī)?如果我們能設(shè)計(jì)這樣一個(gè)電路:1)能記住自己目前所處的狀態(tài);2)狀態(tài)的變化只可能在同一個(gè)時(shí)鐘的跳變沿時(shí)刻發(fā)生,而不可能發(fā)生在任意時(shí)刻;3)在時(shí)鐘跳變沿時(shí)刻,如輸入條件滿足,則進(jìn)入下一狀態(tài),并記住自己目前所處的狀態(tài),否則仍保留原來(lái)的狀態(tài);4)在進(jìn)入不同的狀態(tài)時(shí)刻,對(duì)系統(tǒng)的開(kāi)關(guān)陣列做開(kāi)啟或關(guān)閉的操作。為什么要設(shè)計(jì)有限狀態(tài)機(jī)?如果我們能設(shè)計(jì)這樣一個(gè)電路:92為什么要設(shè)計(jì)有限狀態(tài)機(jī)?clock10nsS2開(kāi)關(guān)S1tttSnS3tttS4為什么要設(shè)計(jì)有限狀態(tài)機(jī)?clock10nsS2開(kāi)關(guān)S193為什么要設(shè)計(jì)有限狀態(tài)機(jī)?
有了以上電路,我們就不難設(shè)計(jì)出復(fù)雜的控制序列來(lái)操縱數(shù)字系統(tǒng)的控制開(kāi)關(guān)陣列。能達(dá)到以上要求的電路就是時(shí)序和組合電路互相結(jié)合的產(chǎn)物:同步有限狀態(tài)機(jī)和由狀態(tài)和時(shí)鐘共同控制的開(kāi)關(guān)邏輯陣列。我們只要掌握有限狀態(tài)機(jī)的基本設(shè)計(jì)方法,加上對(duì)基本電路的掌握,再加上對(duì)數(shù)據(jù)處理的過(guò)程的細(xì)致了解,我們就可以避免由于邏輯器件和布線延遲產(chǎn)生的冒險(xiǎn)競(jìng)爭(zhēng)現(xiàn)象所造成的破壞,設(shè)計(jì)出符合要求的復(fù)雜數(shù)字邏輯系統(tǒng)。為什么要設(shè)計(jì)有限狀態(tài)機(jī)?有了以上電路,我們就不難設(shè)計(jì)出94數(shù)字系統(tǒng)的構(gòu)成示意圖同步有限狀態(tài)機(jī)ena_2ena_3ena_nena_1clock組合邏輯1寄存器組組合邏輯2寄存器組組合邏輯3寄存器組組合邏輯N寄存器組input_1input_2input_n數(shù)字系統(tǒng)的構(gòu)成示意圖ena_2ena_3ena_nena_195同步有限狀態(tài)機(jī)的設(shè)計(jì)什么是有限狀態(tài)機(jī)(FSM)FSM的種類和不同點(diǎn)設(shè)計(jì)舉例同步有限狀態(tài)機(jī)的設(shè)計(jì)什么是有限狀態(tài)機(jī)(FSM)96什么是有限狀態(tài)機(jī)?
-有限狀態(tài)機(jī)是由寄存器組和組合邏輯構(gòu)成的硬件時(shí)序電路;-其狀態(tài)(即由寄存器組的1和0的組合狀態(tài)所構(gòu)成的有限個(gè)狀態(tài))只能在同一時(shí)鐘跳變沿的情況下才能從一個(gè)狀態(tài)轉(zhuǎn)向另一個(gè)狀態(tài);-究竟轉(zhuǎn)向哪一狀態(tài)不但取決于各個(gè)輸入值,還取決于當(dāng)前狀態(tài)。-狀態(tài)機(jī)可用于產(chǎn)生在時(shí)鐘跳變沿時(shí)刻開(kāi)關(guān)的復(fù)雜的控制邏輯,是數(shù)字邏輯的控制核心。什么是有限狀態(tài)機(jī)?
97Mealy狀態(tài)機(jī)
下一個(gè)狀態(tài)=F(當(dāng)前狀態(tài),輸入信號(hào));
輸出信號(hào)=G(當(dāng)前狀態(tài),輸入信號(hào));
圖1.時(shí)鐘同步的狀態(tài)機(jī)結(jié)構(gòu)(Mealy狀態(tài)機(jī))下一狀態(tài)的邏輯F輸出邏輯G狀態(tài)寄存器時(shí)鐘信號(hào)clkclk輸入輸入輸出當(dāng)前狀態(tài)激勵(lì)信號(hào)Mealy狀態(tài)機(jī)
下一個(gè)狀態(tài)=F(當(dāng)前狀態(tài),輸入信號(hào)98
Moor狀態(tài)機(jī)
下一個(gè)狀態(tài)=F(當(dāng)前狀態(tài),輸入信號(hào))
輸出信號(hào)=G(當(dāng)前狀態(tài));
下一狀態(tài)的邏輯F輸出邏輯G狀態(tài)寄存器時(shí)鐘信號(hào)clkclk輸入輸入輸出當(dāng)前狀態(tài)激勵(lì)信號(hào)圖2.時(shí)鐘同步的狀態(tài)機(jī)結(jié)構(gòu)(Moor狀態(tài)機(jī))
Moor狀態(tài)機(jī)
下一個(gè)狀態(tài)=F(當(dāng)前狀態(tài),輸入信號(hào)99
帶流水線輸出的Mealy狀態(tài)機(jī)
下一個(gè)狀態(tài)=F(當(dāng)前狀態(tài),輸入信號(hào));
輸出信號(hào)=G(當(dāng)前狀態(tài),輸入信號(hào));
輸出圖3帶流水線輸出的Mealy狀態(tài)機(jī)下一狀態(tài)的邏輯F輸出邏輯G狀態(tài)寄存器時(shí)鐘信號(hào)clkclk輸入輸入當(dāng)前狀態(tài)激勵(lì)信號(hào)輸出流水線寄存器
clk輸入
帶流水線輸出的Mealy狀態(tài)機(jī)
下一個(gè)狀態(tài)=100簡(jiǎn)單的狀態(tài)機(jī)設(shè)計(jì)舉例狀態(tài)轉(zhuǎn)移圖表示RTL級(jí)可綜合的Verilog模塊表示簡(jiǎn)單的狀態(tài)機(jī)設(shè)計(jì)舉例狀態(tài)轉(zhuǎn)移圖表示101有限狀態(tài)機(jī)的圖形表示圖形表示:狀態(tài)、轉(zhuǎn)移、條件和邏輯開(kāi)關(guān)圖3.4狀態(tài)轉(zhuǎn)移圖Idle
Start
StopClear
A/K1=0
!AA/K2=1
!Reset/K2=0K1=0!Reset/K2=0K1=0
(!Reset|!A)/K2=0K1=1!Reset/K2=0K1=0有限狀態(tài)機(jī)的圖形表示圖形表示:狀態(tài)、轉(zhuǎn)移、條件和邏輯開(kāi)關(guān)圖3102有限狀態(tài)機(jī)的Verilog描述定義模塊名和輸入輸出端口;定義輸入、輸出變量或寄存器;定義時(shí)鐘和復(fù)位信號(hào);定義狀態(tài)變量和狀態(tài)寄存器;用時(shí)鐘沿觸發(fā)的always塊表示狀態(tài)轉(zhuǎn)移過(guò)程;在復(fù)位信號(hào)有效時(shí)給狀態(tài)寄存器賦初始值;描述狀態(tài)的轉(zhuǎn)換過(guò)程:符合條件,從一個(gè)狀態(tài)到另外一個(gè)狀態(tài),否則留在原狀態(tài);驗(yàn)證狀態(tài)轉(zhuǎn)移的正確性,必須完整和全面。有限狀態(tài)機(jī)的Verilog描述定義模塊名和輸入輸出端口;103表示方法之一modulefsm(Clock,Reset,A,K2,K1);inputClock,Reset,A;//定義時(shí)鐘、復(fù)位和輸入信號(hào)outputK2,K1;//定義輸出控制信號(hào)的端口regK2,K1;//定義輸出控制信號(hào)的寄存器reg[1:0]state;
//定義狀態(tài)寄存器parameterIdle=2’b00,Start=2’b01,Stop=2’b10,Clear=2’b11;//定義狀態(tài)變量參數(shù)值always@(posedgeClock)if(!Reset)begin//定義復(fù)位后的初始狀態(tài)和輸出值state<=Idle;K2<=0;K1<=0;end表示方法之一modulefsm(Clock,Rese104表示方法之一(續(xù))elsecase(state)Idle:beginif(A)beginstate<=Start;K1<=0;endelsestate<=Idle;endStart:beginif(!A)state<=Stop;elsestate<=Start;end表示方法之一(續(xù))else105表示方法之一(續(xù))
Stop:begin//符合條件進(jìn)入新?tīng)顟B(tài),否則留在原狀態(tài)if(A)beginstate<=Clear;K2<=1;endelsestate<=Stop;endClear:beginif(!A)beginstate<=Idle;K2<=0;K1<=1;endelsestate<=Clear;endendcaseendmodule
表示方法之一(續(xù))Stop:begin//符106表示方法之二我們還可以用另一個(gè)VerilogHDL模型來(lái)表示同一個(gè)有限狀態(tài),見(jiàn)下例。(用可綜合的Verilog模塊設(shè)計(jì)用獨(dú)熱碼表示狀態(tài)的狀態(tài)機(jī))
modulefsm(Clock,Reset,A,K2,K1);inputClock,Reset,A;outputK2,K1;regK2,K1;reg[3:0]state;
parameterIdle=4’b1000,Start=4’b0100,Stop=4’b0010,Clear=4’b0001;
表示方法之二我們還可以用另一個(gè)VerilogHDL模型來(lái)107表示方法之二(續(xù))always@(posedgeclock)if(!Reset)beginstate<=Idle;K2<=0;K1<=0;endelsecase(state)Idle:if(A)beginstate<=Start;K1<=0;endelsestate<=Idle;
表示方法之二(續(xù))always@(posedgeclo108表示方法之二(續(xù))
Start:if(!A)state<=Stop;elsestate<=Start;Stop:if(A)beginstate<=Clear;K2<=1;endelsestate<=Stop;Clear:if(!A)beginstate<=Idle;K2<=0;K1<=1;endelsestate<=Clear;表示方法之二(續(xù))Start:if(!A)109表示方法之二(續(xù))
default:state<=Idle;endcaseendmodule
[例2]與[例1]的主要不同點(diǎn)是狀態(tài)編碼,[例2]采用了獨(dú)熱編碼,而[例1]則采用Gray碼,究竟采用哪一種編碼好要看具體情況而定。
表示方法之二(續(xù))default:s110表示方法之三
在比較復(fù)雜的狀態(tài)機(jī)設(shè)計(jì)過(guò)程中,我們往往把狀態(tài)的變化與輸出開(kāi)關(guān)的控制分成兩部分來(lái)考慮。就象前面講過(guò)的Mealy狀態(tài)機(jī)輸出部分的組合邏輯。為了調(diào)試方便,還常常把每一個(gè)輸出開(kāi)關(guān)寫成一個(gè)個(gè)獨(dú)立的always組合塊。在調(diào)試多輸出狀態(tài)機(jī)時(shí),這樣做比較容易發(fā)現(xiàn)問(wèn)題和改正模塊編寫中出現(xiàn)的問(wèn)題。建議同學(xué)們?cè)谠O(shè)計(jì)復(fù)雜的多輸出狀態(tài)機(jī)時(shí)采用下面的風(fēng)格舉例,說(shuō)明如下:
表示方法之三在比較復(fù)雜的狀態(tài)機(jī)設(shè)計(jì)過(guò)程中,我們往往把111表示方法之三(續(xù))modulefsm(Clock,Reset,A,K2,K1);inputClock,Reset,A;outputK2,K1;regK2,K1;reg[1:0]state,nextstate;
parameterIdle=2'b00,Start=2'b01,Stop=2'b10,Clear=2'b11;表示方法之三(續(xù))modulefsm(Clock,R112表示方法之三(續(xù))
//--------每一個(gè)時(shí)鐘沿產(chǎn)生一次可能的狀態(tài)變化-----------always@(posedgeClock)beginif(!Reset)state<=Idle;elsestate<=nextstate;end//-------------------------------------------------------表示方法之三(續(xù))//--------每一個(gè)時(shí)鐘沿產(chǎn)生一113表示方法之三(續(xù))//------產(chǎn)生下一狀態(tài)的組合邏輯-------------------------
always@(stateorA)case(state)Idle:if(A)nextstate=Start;elsenextstate=Idle;Start:if(!A)nextstate=Stop;elsenextstate=Start;Stop:if(A)nextstate=Clear;elsenextstate=Stop;Clear:if(!A)nextstate=Idle;elsenextstate=Clear;default:nextstate=2'bxx;endcase表示方法之三(續(xù))//------產(chǎn)生下一狀態(tài)的組合邏輯114表示方法之三(續(xù))//----產(chǎn)生輸出K1的組合邏輯--------------always@(stateorResetorA)if(!Reset)K1=0;elseif(state==Clear&&!A)//從Clear轉(zhuǎn)向IdleK1=1;elseK1=0;
//---產(chǎn)生輸出K2的組合邏輯---------------always@(stateorResetorA)if(!Reset)K2=0;elseif(state==Stop&&A)//從Stop轉(zhuǎn)向ClearK2=1; elseK2=0;//------------------------------------------endmodule
表示方法之三(續(xù))//----產(chǎn)生輸出K1的組合邏輯--115表示方法之四
用輸出指定的碼表示狀態(tài)的狀態(tài)機(jī)
方法四采用了另一種方法:直接把狀態(tài)碼定義為輸出。也就是把狀態(tài)碼的指定與狀態(tài)機(jī)控制的輸出聯(lián)系起來(lái),把狀態(tài)的變化直接用作輸出,這樣做可以提高輸出信號(hào)的開(kāi)關(guān)速度并節(jié)省電路器件。這種設(shè)計(jì)方法常用在高速狀態(tài)機(jī)中。建議同學(xué)們?cè)谠O(shè)計(jì)高速狀態(tài)機(jī)時(shí)采用方法四的風(fēng)格。例中state[3]和state[0]分別表示前面兩個(gè)例子中的輸出K2和K1。表示方法之四
用輸出指定的碼表示狀態(tài)的狀態(tài)機(jī)方法四采用了116表示方法之四(續(xù))modulefsm(Clock,Reset,A,K2,K1,st
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年人教版PEP八年級(jí)生物上冊(cè)月考試卷含答案
- 2025年蘇教新版九年級(jí)歷史上冊(cè)月考試卷
- 2025年廣西幼兒師范高等??茖W(xué)校高職單招高職單招英語(yǔ)2016-2024歷年頻考點(diǎn)試題含答案解析
- 2025年廣東省外語(yǔ)藝術(shù)職業(yè)學(xué)院高職單招高職單招英語(yǔ)2016-2024歷年頻考點(diǎn)試題含答案解析
- 2025年山東電子職業(yè)技術(shù)學(xué)院高職單招語(yǔ)文2018-2024歷年參考題庫(kù)頻考點(diǎn)含答案解析
- 2025年安徽廣播影視職業(yè)技術(shù)學(xué)院高職單招語(yǔ)文2018-2024歷年參考題庫(kù)頻考點(diǎn)含答案解析
- 2025年四川機(jī)電職業(yè)技術(shù)學(xué)院高職單招語(yǔ)文2018-2024歷年參考題庫(kù)頻考點(diǎn)含答案解析
- 2025年四川體育職業(yè)學(xué)院高職單招語(yǔ)文2018-2024歷年參考題庫(kù)頻考點(diǎn)含答案解析
- 2025年咸陽(yáng)職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年常考版參考題庫(kù)含答案解析
- 2025年南京信息職業(yè)技術(shù)學(xué)院高職單招高職單招英語(yǔ)2016-2024歷年頻考點(diǎn)試題含答案解析
- 國(guó)家電網(wǎng)招聘2025-企業(yè)文化復(fù)習(xí)試題含答案
- 醫(yī)院物業(yè)服務(wù)組織機(jī)構(gòu)及人員的配備、培訓(xùn)管理方案
- 外觀判定標(biāo)準(zhǔn)
- 江西上饒市2025屆數(shù)學(xué)高二上期末檢測(cè)試題含解析
- 腦卒中后吞咽障礙患者進(jìn)食護(hù)理團(tuán)體標(biāo)準(zhǔn)
- 工行人工智能風(fēng)控
- 2023風(fēng)電機(jī)組預(yù)應(yīng)力混凝土塔筒與基礎(chǔ)結(jié)構(gòu)設(shè)計(jì)標(biāo)準(zhǔn)
- 小學(xué)語(yǔ)文閱讀教學(xué)落實(shí)學(xué)生核心素養(yǎng)方法的研究-結(jié)題報(bào)告
- 一年級(jí)的成長(zhǎng)歷程
- 2024年南京鐵道職業(yè)技術(shù)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 正月十五元宵節(jié)介紹課件
評(píng)論
0/150
提交評(píng)論