VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計-(10)[175頁]_第1頁
VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計-(10)[175頁]_第2頁
VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計-(10)[175頁]_第3頁
VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計-(10)[175頁]_第4頁
VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計-(10)[175頁]_第5頁
已閱讀5頁,還剩170頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第10章 數(shù)字系統(tǒng)的實際設(shè)計技巧10.1 數(shù)字系統(tǒng)優(yōu)化的基本方法10.2 數(shù)字系統(tǒng)設(shè)計中的工程實際問題習題與思考題10.1 數(shù)字系統(tǒng)優(yōu)化的基本方法10.1.1 相同電路的處理在系統(tǒng)設(shè)計的前期,設(shè)計人員不一定預先知道有多處存在著相同的運算電路,只有在畫出電路框圖后才會發(fā)現(xiàn)它們的存在。例如在圖10-1(a)中,2個狀態(tài)都需進行B+1運算,要正確實現(xiàn)其功能需要3個B+1的運算電路。但是,進行優(yōu)化以后實際上只要用1個B+1的運算電路就可以實現(xiàn)正確的邏輯功能,如圖10-1(b)所示。有多個相同運算的電路;(b) 優(yōu)化后采用一個運算電路圖10-1 多個相同運算電路優(yōu)化實例如圖10-1(a)所示,未優(yōu)化的V

2、HDL程序清單如下:如圖10-1(b)所示,優(yōu)化后的VHDL程序清單如下:10.1.2 運算順序的改變在設(shè)計電路時適當?shù)馗淖冞\算順序就可以達到優(yōu)化電路的目的。如圖10-2(a)所示,為了進行node (ba)+(bc)的運算,按常規(guī)的運算順序畫出的數(shù)據(jù)流圖如圖10-2(a)中的左圖所示。為實現(xiàn)該運算,需要2個乘法器和1個加法器?,F(xiàn)在用因式分解的方法來改變原式的運算順序,即先作加法后再進行乘法運算,即nodeb(a+c),其數(shù)據(jù)流圖如圖10-2(a)中的右圖所示。修改運算順序后,實現(xiàn)該運算只需1個乘法器和1個加法器。顯然,這樣就減少了電路的規(guī)模。圖10-2(b)示出了另一種改變計算順序的方法。原

3、式node(a+b)+c)+d)經(jīng)改變后變?yōu)閚ode(a+b)+(c+d),這樣做可使運算電路的級數(shù)減少,(a+b)和(c+d)可以進行并行運算,從而提高了電路的運算速度。圖10-2 改變運算順序優(yōu)化電路(a) 縮小了電路規(guī)模;(b) 提高了運算速度10.1.3 常數(shù)運算的運用在前面已經(jīng)提到,計算機工作時狀態(tài)有Fetch、Decode等,在形成門級電路時通常將這些狀態(tài)名賦以常數(shù)值,如Fetch賦以0,Decode賦以1等。在運算式中使用布爾代數(shù)性質(zhì)對常數(shù)進行操作可簡化運算電路。例如:x AND 1 = xx AND 0 = 0 x OR 1 = 1x OR 0 = x這種情況下,EDA軟件在編

4、譯時都能進行自動化處理,其原因也就在于此。10.1.4 相同運算電路的使用在設(shè)計電路時,即使參與運算的數(shù)據(jù)不同,只要不是進行同時運算,兩個不同的運算就可以由一個運算電路來實現(xiàn)。例如,圖10-3(a)是一個未經(jīng)優(yōu)化的數(shù)據(jù)流圖,圖中需要使用2個乘法電路??紤]到AB在S0狀態(tài)下進行運算,CD在S1狀態(tài)下進行運算,這2個乘法器運算操作是在不同時間內(nèi)進行的,因此該電路可以同用一個乘法器,優(yōu)化后的數(shù)據(jù)流圖如圖10-3(b)所示。 優(yōu)化前的數(shù)據(jù)流圖;(b) 優(yōu)化后的數(shù)據(jù)流圖圖10-3 相同的運算電路實例在圖10-3 (b)中利用S0和S1進行選擇,在S0時乘法器輸入為A和B,在S1時乘法器輸入為C和D;其輸

5、出也同樣由S0和S1進行選擇,送到不同的選擇器,以實現(xiàn)正確的算術(shù)運算。在進行這樣的優(yōu)化以后,該電路只要一個乘法器即可。如圖10-3(a)所示,優(yōu)化前的程序清單如下: 如圖10-3(b)所示,優(yōu)化后的VHDL程序清單如下:上面討論的是多個運算相同的操作采用同一個運算電路的情況。其實,有時候不同的運算操作也可以用一個運算電路來實現(xiàn)。圖10-4(a)中有一個加法器和一個減法器,如果減法操作用A+(-1B)來代替,那么就可以將減法器變?yōu)榧臃ㄆ鳎贿^操作數(shù)B在加法前應先乘以-1。當然,這樣做的前提是:如圖10-4(b)所示,增加的選擇器和乘以-1所需要的電路其規(guī)模應比加法器小才合理。(a) 優(yōu)化前的數(shù)據(jù)

6、流圖;(b) 優(yōu)化后的數(shù)據(jù)流圖圖10-4 不同運算操作用同一個運算電路的實例如圖10-4(a)所示,優(yōu)化前的VHDL程序清單如下:如圖10-4(b)所示,優(yōu)化后的VHDL程序清單如下:10.1.5 優(yōu)化的必要性及其工程實際意義當前隨著半導體及集成電路技術(shù)的發(fā)展,幾十萬至幾百萬門的單片電路已非常普遍,那么設(shè)計人員是否還有必要像以前那樣關(guān)注電路的冗余問題呢?答案是肯定的。首先,盡管ASIC和FPGA芯片的價格不只由門的數(shù)目來確定,但是門數(shù)多了必定會增加芯片的價格。另外,冗余的電路會使電源消耗增加,電路工作速度降低,同樣也會增加布線困難。其次,無論使用什么樣的EDA軟件工具,總希望綜合得到性能良好的

7、電路。不同的EDA軟件綜合所得到的電路會有一些差別。但是,只要使用上述方法進行優(yōu)化,去除整體部分的冗余電路,最后得到的優(yōu)化結(jié)果就不會相差太遠。最后,根據(jù)實踐表明,電路規(guī)模愈大,其存在的冗余也會愈大。例如,在對數(shù)據(jù)進行處理時,要對幾十至幾百行的C語言程序進行硬化,這對于程序來說可能是小規(guī)模的,但是對于硬件來說其規(guī)模就不小了。假設(shè)該程序有幾十個數(shù)組,含有100個32位的整數(shù)變量。這些變量用硬件寄存器來實現(xiàn),那么需要的門數(shù)量為32位1006門/位=19200門這里,每位寄存器用6個門進行計算。在對位數(shù)長的數(shù)據(jù)進行運算時,去除少量的冗余就會節(jié)約大量的門電路。另外,在設(shè)計時用多個運算電路進行并發(fā)運算是允

8、許的,但是如果其個數(shù)達到了幾十個,那么就應該考慮冗余問題。因為此時存在的冗余可能會對電路性能產(chǎn)生不利影響。剔除冗余是設(shè)計人員為提高電路性能所必須要做的事情,一般應盡可能在電路或系統(tǒng)的框圖設(shè)計階段去除冗余,這樣可以達到事半功倍的效果,而門級的電路化簡或優(yōu)化可以留給EDA軟件去實現(xiàn)。10.2 數(shù)字系統(tǒng)設(shè)計中的工程實際問題10.2.1 提高系統(tǒng)工作速度的方法1影響系統(tǒng)工作速度的主要因素所謂系統(tǒng)的工作速度,是指系統(tǒng)以何種時鐘頻率工作。系統(tǒng)的處理時間可以表示為處理時間=時鐘周期處理所需的時鐘周期數(shù)1) 臨界路徑長度在數(shù)字系統(tǒng)中,臨界路徑長度(Critical Path)決定了系統(tǒng)的工作速度。所謂臨界路徑

9、,是指從系統(tǒng)輸入到系統(tǒng)輸出的各條路徑中信號通過時間最長的那一條路徑。該路徑長度將決定系統(tǒng)的最高工作速度。某一系統(tǒng)的VHDL程序描述如例10-1所示?!纠?0-1】 系統(tǒng)臨界路徑確定實例。從程序中可以看出,aReg = aReg*(bReg*cReg) 的路徑最長,因此,該系統(tǒng)的工作速度由該路徑中信號傳送的時間所確定。假設(shè)每個乘法器的運算時間需要100 ns,每個選擇器的時間延時需要1ns,那么只考慮2個乘法器所需的運算處理時間就不能小于200ns。由此推斷,時鐘頻率一定不能高于5 MHz。2) 門電路之間延時時間的計算數(shù)字系統(tǒng)的延時也包含門電路之間的延時。門電路之間的延時由兩部分組成:門電路本

10、身所產(chǎn)生的延時和連線所產(chǎn)生的傳輸延時。門電路之間的延時時間如圖10-5所示。圖10-5 門電路之間的延時時間一般來說,連線長度和門的扇出數(shù)成正比,當然也就和連線的延時時間成正比。如果某系統(tǒng)都是由門電路組成的,那么其系統(tǒng)總的延時時間應為在ASIC芯片中,標準單元和門陣列的每個門延時約為0.10.5 ns;FPGA芯片中1個單元的延時約為幾個ns;LSTTL芯片每個門延時約為10 ns;ASIC芯片如果按1 ns延時計算,則時鐘頻率可達1GHz。由此可知,這就是ASIC芯片的工作速度比一般電路高得多的原因。3) 系統(tǒng)延時時間的評估在用EDA軟件工具對系統(tǒng)進行綜合時,軟件會自動尋找系統(tǒng)的臨界路徑,并

11、為設(shè)計者指出系統(tǒng)所能工作的最高頻率。由于沒有考慮系統(tǒng)的動態(tài)工作特性,只以電路圖或網(wǎng)表為依據(jù)來尋找臨界路徑,因此把這種分析稱為靜態(tài)定時分析。例如,下面的VHDL程序清單中,EDA軟件把經(jīng)過2個乘法器的路徑認定為該系統(tǒng)的臨界路徑,但是實際的信號傳輸路徑是經(jīng)過一個加法器和一個乘法器(見圖10-6)。圖10-6 實際信號傳輸路徑示意圖這就表明系統(tǒng)的實際工作速度比EDA軟件的仿真速度快。這樣,EDA軟件尋找的臨界路徑就沒有實際意義,這種情況就稱為出現(xiàn)了錯誤的臨界路徑。2在RTL級上提高工作速度的方法在RTL級上改變處理的內(nèi)容、各部件的連接方法并適當?shù)卣{(diào)整數(shù)據(jù)流圖或狀態(tài)圖就可以使系統(tǒng)在構(gòu)建基本結(jié)構(gòu)時達到數(shù)

12、據(jù)路徑最短。這一點在門級是很難達到的。在一般設(shè)計中,由VHDL程序生成門級網(wǎng)表,這一步驟是由EDA軟件來完成的,設(shè)計人員一般不進行人工干預。除非綜合結(jié)果有問題時,設(shè)計人員才在門級對電路進行適當?shù)娜斯ふ{(diào)整。因此,RTL級設(shè)計對提高系統(tǒng)的速度至關(guān)重要。1) 縮短臨界路徑長度(1) 減少臨界路徑上的處理內(nèi)容。減少臨界路徑上的處理內(nèi)容是指把可以在別的通路上進行處理的內(nèi)容移走,使各通路的處理時間盡可能均衡。在設(shè)計時為了確定哪條路徑是臨界路徑,最好用數(shù)據(jù)流圖來描述系統(tǒng)的工作過程,這樣比較直觀,也易識別臨界路徑。在例10-1中,狀態(tài)S1要進行2次乘法運算aReg*bReg*cReg,它是系統(tǒng)的臨界路徑。從例

13、10-2所示的程序中可以看到,系統(tǒng)從S0S1S2,最終的aReg值應為aReg=2in0in1in23個狀態(tài)分別進行不同的運算。如果要保證最后的aReg值不變,只需把運算操作的內(nèi)容進行適當調(diào)整,如將S1狀態(tài)中cReg的運算放在S2狀態(tài)中進行,那么此時的VHDL程序描述就應修改為例10-2所示。經(jīng)修改后,臨界路徑變?yōu)閍Reg = aReg*(cReg*2)。顯然,乘2操作可以用左移1位來實現(xiàn),電路比較簡單,延時比一般乘法小,故減少了系統(tǒng)的臨界路徑長度,達到了提高系統(tǒng)工作速度的目的。表10-1示出了EDA軟件對例10-1和例10-2進行分析比較的結(jié)果。表中的信號用16位二進制表示。從表10-1中可

14、以看到,例10-1中的程序經(jīng)修改后,使工作速度和電路規(guī)模都有了較大的變化。(2) 增加狀態(tài)數(shù)或寄存器數(shù)。除了上述減少臨界路徑上的處理內(nèi)容外,在必要時增加處理的時鐘周期(狀態(tài)數(shù))個數(shù)和寄存器數(shù)也可以達到縮短臨界路徑長度的目的。圖10-7是增加狀態(tài)、縮短臨界路徑長度的實例。圖10-7(a)是某一系統(tǒng)的狀態(tài)圖。不難發(fā)現(xiàn),該系統(tǒng)的臨界路徑是A=ABC?,F(xiàn)在在S0和S1狀態(tài)之間增加一個狀態(tài)S0,并且將某些運算內(nèi)容分攤給該S0狀態(tài)來完成,如圖10-7(b)所示。這樣處理以后臨界路徑長度就縮短了。應該說,增加狀態(tài)會使整個處理時間拉長,但是由于臨界路徑長度縮短,時鐘頻率增加,使得每個狀態(tài)的處理時間縮短,在大多

15、數(shù)情況下,系統(tǒng)整體的工作速度將得到提高。圖10-8是增加寄存器、縮短系統(tǒng)臨界路徑的實例。圖10-8(a)是系統(tǒng)原來的狀態(tài)圖。圖10-8(b)是修改后的狀態(tài)圖。在該圖的S0狀態(tài)中增加了一個C寄存器,并將S0狀態(tài)中的C操作放到S1狀態(tài)中進行。這樣修改以后使系統(tǒng)的臨界路徑由A=ABC變?yōu)锳=AC2。顯然,后者的臨界路徑長度要比前者短,即提高了系統(tǒng)的工作速度。(a) 系統(tǒng)原狀態(tài)圖;(b) 添加狀態(tài)后的狀態(tài)圖圖10-7 增加狀態(tài)、縮短臨界路徑長度的實例(a) 系統(tǒng)原狀態(tài)圖;(b) 增加寄存器后的狀態(tài)圖圖10-8 增加寄存器、縮短臨界路徑的實例2) 改變臨界路徑上的處理順序在計算中,加法和乘法運算所需要的

16、時間是不一樣的,為了提高系統(tǒng)的速度,通常把運算速度慢的計算放在運算樹的短枝上,以充分發(fā)揮并發(fā)運算所帶來的好處。如圖10-9是改變臨界路徑上的處理順序以提高系統(tǒng)速度的實例。圖10-9(a)是乘法運算比加法運算慢的(a+b)cde運算數(shù)據(jù)流程圖;圖10-9(b)是加法比乘法運算慢的(a+b)cde運算數(shù)據(jù)流圖。(a) 加法運算1 ns,乘法運算5 ns情況下的數(shù)據(jù)流圖;(b) 加法運算5 ns,乘法運算1 ns情況下的數(shù)據(jù)流圖圖10-9 改變臨界路徑上的處理順序以提高系統(tǒng)速度的實例3) 提高各個運算器的速度前面所提到的方法都假設(shè)在各運算器工作速度一定的情況下,對運算內(nèi)容、次序進行適當調(diào)度和安排來達

17、到提高系統(tǒng)速度的目的。如果提高各運算器本身的速度,那么無論在任何情況下,都可以達到提高系統(tǒng)速度的目的。這個工作必須在門級設(shè)計時進行。4) 利用多周期路徑提高系統(tǒng)的工作速度當運算操作在一個時鐘周期內(nèi)不能完成時,就用2個時鐘周期來完成,其中間結(jié)果通過寄存器來取得。下面就是利用多周期路徑來提高系統(tǒng)工作速度的實例?!纠?0-3】 利用多周期路徑來提高系統(tǒng)工作速度的實例。未修改前VHDL程序描述如下:在例10-3修改前的S0狀態(tài)中,aReg*bReg在1個時鐘周期中是無法完成的,因此,在S0和S1狀態(tài)之間插入一個中間狀態(tài)Sadd。aReg*bReg在S0狀態(tài)開始時就進行運算,到Sadd狀態(tài)結(jié)束,aReg

18、*bReg的中間值node形成,在S1狀態(tài)開始時node值被賦予aReg,然后完成最后的運算。由VHDL語法知道,node = aReg*bReg語句和PROCESS語句是并發(fā)執(zhí)行的,引入的Sadd狀態(tài)是為了拉長乘法時間,并使node = aReg*bReg運算與PROCESS同步。假設(shè)aReg*bReg需要2個時鐘周期,那么這種修改是有效的。這樣就縮短了臨界路徑長度,提高了系統(tǒng)的整體工作速度。5) 減少臨界路徑上部件的扇出數(shù)眾所周知,一個部件的扇出數(shù)愈多,負載愈重,該部件對信號所產(chǎn)生的延時也就愈大。因此,減少臨界路徑上部件的扇出數(shù)無疑會提高系統(tǒng)的工作速度。圖10-10是減少臨界路徑上部件的扇

19、出數(shù)來提高系統(tǒng)工作速度的實例。圖10-10(a)中,系統(tǒng)臨界路徑上部件的扇出數(shù)為3。將2個乘法器合并后,如圖10-10(b)所示,部件的扇出數(shù)變?yōu)?。(a) 系統(tǒng)原部件連接情況;(b) 利用共享乘法器減少扇出數(shù)情況圖10-10 減少臨界路徑上部件的扇出數(shù)來提高系統(tǒng)工作速度的實例利用計算系統(tǒng)的臨界路徑長度來評估系統(tǒng)的工作速度,在大多數(shù)情況下是可行的,但是也有例外。例如,當組合電路跨模塊進行連接時,有可能使優(yōu)化效果變差。也就是說,多個組合電路模塊合并成一個模塊進行優(yōu)化,其臨界路徑肯定會更短。另外,多模塊連接后的實際路徑長度有可能比各模塊臨界路徑長度之和要長。10.2.2 縮小電路規(guī)模和降低功耗的方

20、法1縮小電路規(guī)模的方法縮小電路規(guī)模的最基本方法是在設(shè)計時盡可能共享資源。1) 共享組合電路的部件使用EDA軟件達到理想的資源(部件)共享效果,這種情況大多是存在的。例如,在計算A+(BC)和(BC)2時,(BC)是相同的,可以用一個電路來實現(xiàn)。2) 共享寄存器在用VHDL語言設(shè)計電路時,要盡可能減少變量和信號量的設(shè)置,能共享的盡可能共享,因為冗余的寄存器將會增大電路規(guī)模和功耗,特別是位數(shù)較長的寄存器更是如此。假如現(xiàn)有100個32位的冗余寄存器,那么就需要3200個觸發(fā)器。這樣大的規(guī)模在當前條件下是不能忽視的。3) 共享連線連線也是一種資源。利用三態(tài)門使多個輸出共享一條總線,這是共享總線的一種形

21、式。當然,在CMOS電路中為了防止總線浮動,通常在輸出端要接上拉電阻或者下拉電阻。為了降低功耗有時也不采用三態(tài)總線。4) 展開處理時間實現(xiàn)資源共享如果在一個狀態(tài)中有幾次相同種類的運算或譯碼,那么將幾個相同運算依次分散到幾個狀態(tài)中進行處理,此時可以利用共享部件的方法使多個相同運算的電路用一個電路進行分時處理。5) 展開處理空間實現(xiàn)資源共享對數(shù)據(jù)流圖的處理順序進行適當調(diào)整就可以縮小數(shù)據(jù)流圖的規(guī)模。(1) 通過改變處理順序來縮小電路規(guī)模。圖10-11是通過改變處理順序來縮小電路規(guī)模的數(shù)據(jù)流圖。圖10-11(a)是未進行修改的數(shù)據(jù)流圖;圖10-11(b)是修改處理順序后的數(shù)據(jù)流圖。兩個圖的不同點是后者

22、先作加法,后作乘法。這樣修改以后可以節(jié)省3個乘法器和1個加法器,從而縮小了電路規(guī)模。未進行修改的數(shù)據(jù)流圖;(b) 修改處理順序后的數(shù)據(jù)流圖圖10-11 通過改變處理順序來縮小電路規(guī)模的數(shù)據(jù)流圖(2) 通過串行處理來縮小電路規(guī)模。圖10-12是通過串行處理來縮小電路規(guī)模的數(shù)據(jù)流圖。圖10-12(a)是未進行修改前的數(shù)據(jù)流圖,圖10-12(b)是進行串行處理后的數(shù)據(jù)流圖。(a) 未修改前的數(shù)據(jù)流圖;(b) 進行串行處理后的數(shù)據(jù)流圖圖10-12 通過串行處理縮小電路規(guī)模的數(shù)據(jù)流圖圖10-12(a)的運算公式為f1=3a+b, f2=a+3b, f3=f1+f2完成此運算需要2個乘法器和3個加法器。如

23、果直接對f3進行運算:f3=3a+b+a+3b=4a+4b=4(a+b)那么完成4(a+b)運算只要1個加法器和進行2次移位操作即可,如圖10-12(b)所示。這樣就大大縮小了電路的規(guī)模。(3) 復雜運算化簡成簡單運算。復雜的運算通過適當改變順序可以變成簡單的運算。例如,(a+1)+b)+2)可以用(a+b)+3)來替代。這樣就可以省掉1個加法器。(4) 利用數(shù)據(jù)流圖中的已有結(jié)果。在數(shù)據(jù)流圖中某些分支可能會得到相同的結(jié)果,此時可省掉1個分支,利用1個分支已得到的結(jié)果參與下一級運算,從而減少重復的運算電路。2在RTL級上降低系統(tǒng)功耗的方法功耗是單片系統(tǒng)的一個很重要的指標,功耗愈低,系統(tǒng)的壽命、可

24、靠性和體積也愈低。1) 縮小電路的規(guī)模電路規(guī)模愈小,功耗也就愈小。前述的縮小電路規(guī)模的方法對降低功耗都有實際意義。2) 停止不必要的運算處理下面是某系統(tǒng)的VHDL程序描述清單,它由S0S3四個狀態(tài)組成。上述程序中,S0進行加法運算,S1進行減法運算,S2進行乘法運算。經(jīng)編譯綜合后,其電路的基本結(jié)構(gòu)如圖10-13所示。這樣結(jié)構(gòu)的電路無論在何種狀態(tài)下,所有運算電路都要進行工作。但是實際上S0狀態(tài)下只要加法運算器工作,S1狀態(tài)下乘法器就沒有必要進行工作。這些運算器沒有選擇的無用工作會增加電路的功耗。采用下面方法可以停止不必要的運算處理。圖10-13 某系統(tǒng)的基本電路結(jié)構(gòu)(1) 只允許必要的運算電路工

25、作。為了降低電路的功耗,只選擇必要的運算電路進行工作,對圖10-13進行修改后電路結(jié)構(gòu)如圖10-14所示。圖10-14中,在各個運算器的輸入端插入一個“與門”,在沒有工作必要時使該電路輸出為“0”。由此可知,S0狀態(tài)下乘法運算器和減法運算器不工作,S1狀態(tài)下乘法器不工作。圖10-14 圖10-13修改后的電路結(jié)構(gòu)(2) 盡可能在數(shù)據(jù)流的前部分屏蔽數(shù)據(jù)流。數(shù)據(jù)流圖中的一個管道增加的控制“與門”像一個閥門,不需要進行運算的數(shù)據(jù)流應盡可能早地在數(shù)據(jù)流的前部分屏蔽,這樣可以降低功耗。在進行流水線操作時,在沒有有效數(shù)據(jù)的情況下管道的輸入側(cè)如果屏蔽數(shù)據(jù),則會停止后階段的操作。如果控制數(shù)據(jù)流入的信號(如“與

26、門”的輸入)與數(shù)據(jù)信號相比滯后,則會出現(xiàn)競爭冒險現(xiàn)象,從而降低減小功耗的效果。因此,必須消除這種競爭冒險現(xiàn)象。有關(guān)細節(jié)將在10.2.3節(jié)詳述。(3) 寄存器的值沒有必要改變時不要改變。若每個時鐘到來時寄存器的輸出值都要變化,那么它后面連接的組合電路也會隨之工作。另外,像移位寄存器等那樣的電路,即使沒有和組合電路相連接,只要數(shù)據(jù)被移位,就會增加功耗。在運算器輸入端設(shè)置專用的寄存器是一種降低功耗的方法。例如在圖10-14中,各運算器在一個時鐘周期內(nèi)有2次動作:第一次是當數(shù)據(jù)輸入時,第二次是當狀態(tài)切換時。要使運算器在一個時鐘周期只進行一次動作,就必須在運算器輸入端設(shè)置專用寄存器。只有當需要進行運算時

27、,才將其數(shù)據(jù)寫入該寄存器。這樣動作減少了,當然功耗也就降低了。3) 減少競爭冒險的總量由于組合電路的信號在多條路徑中的傳輸延時不同,因而就會產(chǎn)生競爭冒險現(xiàn)象。譬如,冒險在信號流圖的前部分發(fā)生,就會向后面部分傳播,數(shù)量也會增加。特別地,多個處理串行連接時問題就會更大。圖10-15是多個加法器串行連接的電路。圖中,加法器產(chǎn)生的冒險現(xiàn)象從前面向后面?zhèn)鞑?,最后一個輸出node6out比第一級加法器輸出 node1out的冒險量增加了11倍。由此可見,這種串行工作的電路其最后一級輸出的冒險量與串聯(lián)的級數(shù)成正比。事實上,要完全消除冒險現(xiàn)象是困難的,但是使其減少卻是完全可以做到的。圖10-15對應的串接加法

28、器的VHDL描述清單如下:通常減少串接電路數(shù)目就可以減少冒險總量。將圖10-15所示的串接加法器的結(jié)構(gòu)改為樹型,結(jié)果使其級數(shù)從6級減少為3級,那么冒險總量就會減少一半。樹型加法器連接的冒險現(xiàn)象如圖10-16所示。圖10-15 多個加法器串行連接的電路圖10-16 樹型加法器連接的冒險現(xiàn)象圖10-16對應的樹型加法器連接的VHDL程序清單如下:4) 控制時鐘通過降低時鐘頻率,用“與門”控制某些工作單元,使其在不工作期間不提供時鐘等措施,同樣也可以降低系統(tǒng)的功耗。10.2.3 系統(tǒng)誤操作的成因及其消除方法系統(tǒng)在工作過程中有可能出現(xiàn)誤操作,其產(chǎn)生原因是多方面的。由于設(shè)計不當或存在的缺陷誘發(fā)的誤操作大

29、致有以下幾種:(1) 冒險現(xiàn)象。冒險現(xiàn)象通常在信號發(fā)生變化時產(chǎn)生,其產(chǎn)生原因主要是輸入信號經(jīng)不同路徑傳輸而出現(xiàn)不同的延時所引起的。冒險的傳播將危及后續(xù)的電路,特別是時序電路的正確工作。(2) 不遵守既定的定時關(guān)系。在用邊沿觸發(fā)器作為數(shù)據(jù)寄存器時,觸發(fā)器的數(shù)據(jù)輸入端和時鐘觸發(fā)邊沿應保持嚴格的定時關(guān)系。圖10-17示出了寄存器的定時關(guān)系,在時鐘上升沿到來之前,觸發(fā)器的數(shù)據(jù)輸入端(D端)所加的信號必須有一段穩(wěn)定的時間,這段時間稱為建立時間。在時鐘上升沿到來以后,D端的輸入信號仍需穩(wěn)定地保持一段時間,該段時間稱為保持時間。建立時間和保持時間對不同的觸發(fā)器和不同工藝的電路都有明確不同的要求。如果在設(shè)計電

30、路時破壞了這種定時關(guān)系,如建立時間不夠或保持時間不夠,則可能導致寄存器輸出值不穩(wěn)定,即“0”或“1”無法確定,從而使系統(tǒng)出現(xiàn)誤操作。圖10-17 寄存器的定時關(guān)系(3) 數(shù)據(jù)和時鐘的臨界競爭。圖10-18是數(shù)據(jù)和時鐘的臨界競爭實例及定時關(guān)系。電路輸入信號在時鐘上升沿到來時,多個寄存器或寄存器各位之間的值出現(xiàn)了參差不齊的變化,從而使輸出出現(xiàn)不穩(wěn)定,這種現(xiàn)象稱為數(shù)據(jù)時鐘的臨界競爭,也稱為競爭。(a) 臨界競爭電路實例;(b) 定時關(guān)系圖10-18 數(shù)據(jù)和時鐘的臨界競爭實例及定時關(guān)系1設(shè)計時應重點注意的地方1) 必須消除冒險現(xiàn)象的地方在與非同步電路的連接線上必須消除冒險現(xiàn)象。(1) 控制存儲器和觸發(fā)

31、器的控制信號。對于存儲器或觸發(fā)器,無論是邊沿控制還是電平控制,如DRAM的RAS、CAS、WE及觸發(fā)器的置位/復位端和鎖存控制端,都不能有冒險信號出現(xiàn),否則就會破壞存儲器和觸發(fā)器的正常數(shù)據(jù)。另外,邊沿觸發(fā)的觸發(fā)器時鐘端和CPU邊沿觸發(fā)的中斷輸入信號同樣也不應混入冒險信號。(2) 應保持數(shù)個時鐘周期的信號。當CPU和存儲器等設(shè)備連接時,對建立/保持時間都有嚴格規(guī)定。如果系統(tǒng)的時鐘頻率比較高,則建立/保持時間要跨越幾個時鐘周期。此時如果信號中混有冒險信號,那么有可能破壞這種定時關(guān)系。例如,所設(shè)計芯片與110ns建立時間的存儲器相連,芯片時鐘為100 MHz(周期為10 ns),如果數(shù)據(jù)總線混入了周

32、期為10ns的冒險信號,那么就會使存儲器產(chǎn)生讀/寫錯誤。2) 必須消除亞穩(wěn)定和競爭的地方需要接收來自非同步系統(tǒng)信號的地方必須考慮消除亞穩(wěn)定和競爭。這里所說的非同步系統(tǒng)是指同一芯片內(nèi)時鐘不同的模塊或芯片外連接的電路,而不是非同步電路。即使同一個時鐘驅(qū)動的電路,如果位于其他芯片或端口上,也應看作非同步系統(tǒng)。這是因為芯片的輸入和輸出驅(qū)動等會使時鐘和數(shù)據(jù)的相位產(chǎn)生延時。2消除冒險現(xiàn)象的方法消除冒險現(xiàn)象的方法很多,這里只舉幾個常用的方法。(1) 利用專用寄存器輸出信號。電路的輸出信號不由組合電路輸出,而是通過專用寄存器直接輸出。圖10-19是未使用專用寄存器出現(xiàn)冒險現(xiàn)象的實例。該實例的電路由一個八進制計

33、數(shù)器和1個3-8譯碼器組成。當八進制計數(shù)器工作時,在其譯碼器輸出端y(0)y(7)就會輪流出現(xiàn)1個時鐘周期的低電平。圖10-19 未使用專用寄存器出現(xiàn)冒險現(xiàn)象的實例從圖10-19的仿真圖中可以發(fā)現(xiàn),在譯碼器的輸出端出現(xiàn)了不應有的負向尖脈沖,也就是說出現(xiàn)了冒險現(xiàn)象。這些負向尖峰脈沖可能會對后接電路產(chǎn)生不利影響。為了消除這種冒險現(xiàn)象,在其各輸出端加一個鎖存寄存器,使它們通過寄存器輸出,以消除冒險現(xiàn)象。圖10-19對應的VHDL程序清單如下:下面是經(jīng)過修改的VHDL程序。該程序和圖10-19對應程序的區(qū)別就是進程受clk時鐘上升沿控制。也就是說,只有在時鐘上升沿到來時,譯碼器的輸出才會發(fā)生變化。這種

34、描述經(jīng)EDA軟件綜合后,會在組合譯碼電路輸出端插入1個寄存器,從而屏蔽了冒險現(xiàn)象的向后傳播。輸出端插入專用寄存器的VHDL描述如下:圖10-20是輸出端插入專用寄存器清除冒險現(xiàn)象的實例。從圖10-20中可以看出,在圖10-19中所出現(xiàn)的冒險現(xiàn)象被專用寄存器屏蔽掉了。寄存器之所以能屏蔽冒險現(xiàn)象,是因為寄存器的輸出值只在時鐘上升沿到來時采樣,在該時刻寄存器的數(shù)據(jù)輸入端處于穩(wěn)定的數(shù)據(jù)狀態(tài),從而避開了數(shù)據(jù)動態(tài)的變化過程。圖10-20 輸出端插入專用寄存器消除冒險現(xiàn)象的實例(2) 輸入至輸出只經(jīng)過一條傳輸路徑。冒險現(xiàn)象是由于變化信號經(jīng)過不同的路徑,產(chǎn)生不同延時而引起的。因此,在組合電路設(shè)計時使變化信號只

35、通過一條路徑就可以消除冒險現(xiàn)象。圖10-21(a)是輸入至輸出只經(jīng)過一條傳輸路徑消除冒險現(xiàn)象的實例。圖10-21(a)中,輸入信號b到達輸出端有2條路徑,這必定會發(fā)生冒險現(xiàn)象?,F(xiàn)在假設(shè)只有輸入信號b發(fā)生變化或a、b、c 3個信號只有一個信號發(fā)生變化,經(jīng)調(diào)整后的邏輯電路如圖10-21(b)所示,此時輸入信號b從輸入到輸出只有一條傳輸路徑,因此該電路就不會發(fā)生冒險現(xiàn)象。當然,如果c和a(或b)同時發(fā)生變化,則在輸出端仍有可能發(fā)生冒險現(xiàn)象。(a) 原電路圖;(b) 修改后的電路圖圖10-21 輸入至輸出只經(jīng)過一條傳輸路徑消除冒險現(xiàn)象的實例(3) 組合電路輸入信號同時只變化1位。如上所述,如果組合電路

36、的多個輸入信號只有1位同時發(fā)生變化,那么在邏輯設(shè)計時就容易做到無冒險現(xiàn)象出現(xiàn)。例如,數(shù)字系統(tǒng)中的狀態(tài)機有多個狀態(tài),許多控制信號是對狀態(tài)機不同的狀態(tài)進行譯碼產(chǎn)生的。圖10-22是8個狀態(tài)的狀態(tài)機編碼實例。圖10-22(a)是一般編碼情況,從000111;圖10-22(b)則是漢明距離為1的編碼情況。前者在一個狀態(tài)向另一個狀態(tài)轉(zhuǎn)移時有可能同時使編碼值發(fā)生1位以上的變化,例如,111000就發(fā)生了3位變化;后者編碼按000000010011110010000000的規(guī)律進行改變,狀態(tài)在轉(zhuǎn)移時狀態(tài)編碼只發(fā)生1位變化。當然,這種方法并不能完全消除冒險現(xiàn)象,通常要對狀態(tài)譯碼電路進行分析,看在什么情況出現(xiàn)冒

37、險。得到確定出現(xiàn)冒險現(xiàn)象的條件后,對邏輯電路進行適當修改,使其信號變化的輸入只有一條傳輸路徑,即可消除冒險現(xiàn)象。(a) 通常的編碼;(b) 漢明距離為1的編碼圖10-22 8個狀態(tài)的狀態(tài)機編碼實例在某些情況下,狀態(tài)編碼不能保證只有1位發(fā)生變化(即漢明距離超過1)時,有2種編碼方法保證狀態(tài)圖編碼仍維持1位變化,如圖10-23所示。第一種方法是一個狀態(tài)分配多個編碼,如圖10-23(b)所示。原001狀態(tài)再分配1個010編碼,這樣可以保證漢明距離為1。例如,原110狀態(tài)轉(zhuǎn)移至001狀態(tài),狀態(tài)編碼發(fā)生了3位變化?,F(xiàn)在加了010編碼,那么該狀態(tài)編碼為001和010。110與該狀態(tài)的010編碼對照,只改變

38、1位編碼。其余依次類推,也可得到相似的結(jié)果。第二種方法是在狀態(tài)譯碼時采用分組譯碼,如圖10-23(c)所示。1011轉(zhuǎn)移至0001時只對低2位譯碼,這樣就保證了只有1位發(fā)生變化。(a) 漢明距離超過1的狀態(tài)圖;(b) 多編碼狀態(tài)圖;(c) 分組譯碼狀態(tài)圖圖10-23 狀態(tài)編碼漢明距離超過1時的處理方法 (4) 在譯碼輸出端加選通電路。冒險現(xiàn)象通常發(fā)生在譯碼電路輸入發(fā)生變化的時刻。如果待輸入信號穩(wěn)定以后,再輸出譯碼信號,那么就可以屏蔽冒險現(xiàn)象。例如,在圖10-19所示的仿真圖中如果加上選通信號STB,那么此時譯碼輸出就消除了,如圖10-24所示。圖10-24中,STB信號應相對clk前沿延時幾十

39、納秒才行。在這里引入了一個比clk時鐘信號頻率高5倍的clk信號。圖10-24 加選通信號消除冒險現(xiàn)象的實例 2個D觸發(fā)器U1、U2連接產(chǎn)生一個周期為clk/5的選通脈沖STB。該STB在clk上升沿時變高,在經(jīng)歷一個clk/5的周期之后變低。將該信號與譯碼輸出信號相“或”,即可屏蔽掉在clk上升沿之后出現(xiàn)的“1”冒險現(xiàn)象。同理,如果譯碼輸出是“1”有效,那么可以將NOT STB與譯碼輸出信號相“與”,從而消除“0”冒險現(xiàn)象。圖10-24對應的加選通信號STB的VHDL程序清單如下: (5) 在譯碼邏輯中增加冗余項。若單個譯碼輸入發(fā)生變化,則可以在譯碼邏輯電路中增加冗余項,從而達到消除冒險現(xiàn)象

40、的目的。圖10-25是增加冗余項消除“1”冒險現(xiàn)象的實例,其表達式為F=AB+AC。這是因為,當B=C=“1”時,F(xiàn)=A+A。若電路在某些輸入組合情況下出現(xiàn)F=AA,那么該電路會產(chǎn)生“0”冒險現(xiàn)象。圖10-25所示電路的邏輯表達式中如增加冗余項BC,則為F=AB+AC+BC。當B=C=1時,F(xiàn)=1,從而消除了“1”冒險現(xiàn)象(產(chǎn)生負向干擾脈沖)。(a) 產(chǎn)生“1”冒險的電路;(b) 增加冗余項消除“1”冒險的電路圖10-25 增加冗余項消除“1”冒險現(xiàn)象的實例10.2.4 非同步信號的控制方法數(shù)字系統(tǒng)的外部輸入和內(nèi)部不同時鐘模塊之間連接的信號都屬于非同步信號,系統(tǒng)只有采用適當?shù)姆峭叫盘柨刂品椒?/p>

41、才能保證可靠的工作。1將非同步信號變?yōu)橥叫盘柕姆椒▽⒎峭叫盘栕優(yōu)橥叫盘柕淖詈唵无k法是用D觸發(fā)器鎖存非同步信號,如圖10-26所示。圖10-26中,非同步輸入信號與D觸發(fā)器的D端相連,時鐘端clk與系統(tǒng)時鐘相連。這樣,在時鐘脈沖上升沿到來時就將非同步輸入信號鎖存于D觸發(fā)器的Q輸出端。在用VHDL描述時,表示鎖存的代入語句應位于IF (clkEVENT AND clk=1)語句的內(nèi)側(cè)。圖10-26 非同步信號同步的實例 2同步時的亞穩(wěn)定現(xiàn)象及其影響如圖10-26所示,為了正確地鎖存非同步信號,非同步信號在clk上升沿到來之前的一段時間(稱為建立時間)和到來后的一段時間(稱為保持時間)必須保持

42、穩(wěn)定。如果在這兩段時間內(nèi)非同步信號有變化,則會使鎖存輸出發(fā)生振蕩現(xiàn)象,使信號出現(xiàn)高或低電平無法確定的狀態(tài),這種狀態(tài)稱為亞穩(wěn)定現(xiàn)象。一般亞穩(wěn)定狀態(tài)大約要維持11ns。如果這種亞穩(wěn)定狀態(tài)向后續(xù)電路傳播,則會使系統(tǒng)產(chǎn)生誤操作。如果時鐘頻率過高,則會由于亞穩(wěn)定現(xiàn)象傳播而發(fā)生誤操作。圖10-27是電路產(chǎn)生亞穩(wěn)定現(xiàn)象傳播的實例。圖中,clk的頻率為100 MHz,其周期為10 ns。非周期信號在建立時間之內(nèi)發(fā)生了從“0”到“1”的變化,這就導致同步D觸發(fā)器輸出信號a發(fā)生亞穩(wěn)定現(xiàn)象,其持續(xù)時間為11ns。圖10-27 電路產(chǎn)生亞穩(wěn)定現(xiàn)象傳播的實例 a點信號經(jīng)電路1ns的延時(b點)作為D觸發(fā)器DFF1的輸入

43、。另一路經(jīng)4 ns延時(c點)作為D觸發(fā)器DFF2的輸入。從波形圖中可以看出,a點波形亞穩(wěn)定引起的振蕩信號對DFF1不會產(chǎn)生什么影響,因為在10 ns以后,b點波形有3 ns的穩(wěn)定時間,為下一個時鐘前沿到來做好了準備;c點波形由于電路延時較長,在下一個時鐘前沿到來前只有1ns的穩(wěn)定時間,這就違反了必須有2ns建立時間的定時關(guān)系,因而導致了DFF2的誤操作。因此,為了防止亞穩(wěn)定現(xiàn)象的傳播,在電路設(shè)計時必須滿足:亞穩(wěn)定持續(xù)時間+組合電路延時時間+觸發(fā)器的建立時間時鐘周期如果同步觸發(fā)器后面所接的組合電路其延時時間較長,那么可以在同步觸發(fā)器后再插入一個D觸發(fā)器。這樣做可以切斷亞穩(wěn)定現(xiàn)象的向下傳播。當然

44、,這種接法會使非同步輸入信號延時2個時鐘周期。 3省略同步裝置的場合亞穩(wěn)定現(xiàn)象是由于用同步裝置對非同步信號進行同步所引起的。在某種情況下,如果沒有同步裝置,電路仍能正常工作,那么就可以不要同步裝置。例如:(1) 同步裝置后續(xù)電路只接一個觸發(fā)器。當后續(xù)電路只接一個觸發(fā)器時,加同步觸發(fā)器就沒有什么意義,可以不插入同步觸發(fā)器。 (2) 任何時刻只有一個觸發(fā)器連接非同步信號。即使后續(xù)電路中連接有多個觸發(fā)器,但是在任何時刻只有一個觸發(fā)器與非同步信號相連接,則也可以省去同步觸發(fā)器,如圖10-28所示。圖10-28中,inp是非同步信號,在S0狀態(tài)時,選通觸發(fā)器DFFA的輸入值;在S1狀態(tài)時,與觸發(fā)器DFF

45、B連接。圖10-28 任何時刻只有一個觸發(fā)器與非同步信號連接的情況該電路用VHDL程序描述如下:這種情況可以等效為后續(xù)電路只與一個觸發(fā)器連接的情況。因此,在這種電路中同步觸發(fā)器也可以省略。 (3) 非同步信號是一個穩(wěn)定的信號。如果從非同步系統(tǒng)傳送過來的信號在有效使用期間其值是穩(wěn)定的,那么對這種非同步信號可以不使用同步裝置進行同步。例如,復位信號一般只在系統(tǒng)上電時使用,平??偸菬o效狀態(tài),對這種信號,一般不需要進行同步。 4對非同步信號控制時應注意的問題對非同步信號控制時應注意以下幾個問題:(1) 多個輸入信號之間的相位差。從非同步系統(tǒng)輸入的數(shù)據(jù)總線信號是一組非同步的并行信號,有時由于路徑長度不同

46、,相互之間可能存在相位差。如果處理不當,則有可能采樣不到正確的值,此時必須采用“握手”的數(shù)據(jù)傳送協(xié)議,在確認數(shù)據(jù)值穩(wěn)定后,再將其讀入寄存器。 (2) 芯片的I/O端的建立時間和保持時間的計算。芯片的I/O端的建立時間和保持時間與單獨的觸發(fā)器的建立時間和保持時間是一樣的,如圖10-29所示。圖10-29 芯片的建立時間和保持時間若芯片數(shù)據(jù)輸入引腳到D觸發(fā)器的D端有tpd的延時時間,芯片時鐘輸入引腳到D觸發(fā)器的時鐘端(clk)有tck的延時時間,那么從芯片外部來看,該芯片的建立時間和保持時間應為芯片的建立時間=觸發(fā)器的建立時間+tpdmax tckmin芯片的保持時間=觸發(fā)器的保持時間+tckma

47、x tpdmin由此可知,芯片的建立時間和保持時間比單獨的觸發(fā)器的建立時間和保持時間都長,在芯片設(shè)計時應充分考慮這種實際情況。 (3) 節(jié)省同步觸發(fā)器與消除冒險現(xiàn)象矛盾。在狀態(tài)機中可以不經(jīng)同步裝置,而使用直接輸入的非同步信號。此時,狀態(tài)寄存器中那些以非同步信號作為輸入的觸發(fā)器的輸出端就有可能出現(xiàn)亞穩(wěn)定現(xiàn)象。若芯片譯碼器輸入部分以這些觸發(fā)器輸出為譯碼輸入信號,那么在其譯碼輸出端就可能產(chǎn)生冒險現(xiàn)象。 (4) 盡可能減少與非同步信號的連接端口。在進行數(shù)字系統(tǒng)設(shè)計時,應盡可能減少與非同步信號連接的端口,因為這種連接是引起系統(tǒng)誤操作的原因之一。為此,設(shè)計時應對系統(tǒng)模塊的結(jié)構(gòu)及通信協(xié)議作一些詳細的研究,做

48、到盡可能少的非同步信號端口連接;在必須與非同步信號進行連接時,應制定合理、可靠的通信協(xié)議,使其在最惡劣的環(huán)境下仍能滿足要求的定時關(guān)系。10.2.5 典型狀態(tài)機狀態(tài)編碼的選擇狀態(tài)機的狀態(tài)編碼情況對綜合后的狀態(tài)機電路的操作性能會產(chǎn)生很大影響。例如在前面提到的,當前一個狀態(tài)向后一個狀態(tài)轉(zhuǎn)移時,狀態(tài)編碼只改變1位比編碼改變多位的情況要好,因為前者出現(xiàn)冒險現(xiàn)象的可能性要小得多,所以選擇好的狀態(tài)編碼也是一種減少系統(tǒng)誤操作及改善系統(tǒng)性能的重要方法之一。 1系統(tǒng)狀態(tài)機的狀態(tài)分解和合并一個數(shù)字系統(tǒng)內(nèi)部可能有多個模塊和多個狀態(tài)機,在對系統(tǒng)進行狀態(tài)分配選擇前應先對這些狀態(tài)機和狀態(tài)進行分解或合并。一般處理原則是:一個

49、狀態(tài)機的狀態(tài)數(shù)應盡可能少,如果不這樣做,則狀態(tài)分配時的難度就會增加。圖10-30是狀態(tài)機狀態(tài)合并的實例。圖10-30 狀態(tài)機狀態(tài)合并的實例(a) 3個狀態(tài)的FSMA;(b) 2個狀態(tài)的FSMB;(c) 6個狀態(tài)的FSMAB圖中,F(xiàn)SMA和FSMB在同一個時鐘驅(qū)動下并發(fā)工作,它們是相互獨立的。如果將2個狀態(tài)機合并,用一個狀態(tài)圖來描述,則結(jié)果如圖10-30(c)所示。圖10-30(c)所示是一個2狀態(tài)數(shù)的狀態(tài)機FSMAB,狀態(tài)分別為SA0SB0、SA0SB1、SA1SB0、SA1SB1、SA2SB0、SA2SB1。狀態(tài)轉(zhuǎn)移箭頭的畫法是:凡是有相同狀態(tài)編碼元素的狀態(tài),相互之間不會發(fā)生轉(zhuǎn)移,故沒有箭頭

50、連接。例如SA2SB1和SA2SB0 2個狀態(tài)中SA2是相同的,故沒有箭頭連接。另外,SA2SB1和SA1SB1及SA0SB0和SA1SB0等都如此。狀態(tài)中雙箭頭線表明可能發(fā)生雙向轉(zhuǎn)移,例如SA0SB1和SA1SB0,因為SA0SA1或SB1SB0都會使這2個狀態(tài)發(fā)生轉(zhuǎn)移。圖10-30(c)所示的狀態(tài)機圖較復雜,因此綜合后的電路也會復雜得多。圖10-30(a)和(b)分別綜合得到的電路比較簡單。當然,為了解決獨立性差或共享部件的問題,也可以采用狀態(tài)機合并的方法。 2典型的狀態(tài)編碼典型的狀態(tài)編碼方式及其優(yōu)缺點如表10-2所示。設(shè)計者可以根據(jù)實際需要選擇編碼。最佳的編碼是不存在的,只能是各種條件的折中。對應表10-2中各狀態(tài)編碼的電路示意圖如圖10-31(a)、(b)、(c)、(d)所示。二進制碼;(b) 格雷碼;(c) 單“1”編碼;(d) 約翰遜計數(shù)碼圖10-31 典型的狀態(tài)編碼的電路示意圖 3選擇狀態(tài)編碼時要考慮的問題1) 電路的速度和規(guī)模為了提高電路速度,狀態(tài)寄存器的各位值應盡可能由少數(shù)位的值

溫馨提示

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

評論

0/150

提交評論