官术网_书友最值得收藏!

3.1 表示時間

無論在歷史上還是現(xiàn)如今,我們都使用周期函數(shù)來衡量時間,如地球的自轉(zhuǎn)和公轉(zhuǎn)。我們把一個完整的地球自轉(zhuǎn)看作一天,這一天又細(xì)分為更小的單位,如時、分、秒。由于一天有86 400秒,因此我們把地球自轉(zhuǎn)的1/86 400定義為一秒。

除了利用像地球自轉(zhuǎn)這樣的外部事件外,我們也可以使用某些物理現(xiàn)象(如鐘擺擺動所需的時間)來生成周期函數(shù)。就是擺動時長代表時間這項技術(shù),讓老爺鐘里有了“滴答滴答”的聲音。當(dāng)然為了讓鐘擺更有應(yīng)用價值,擺錘必須校準(zhǔn)到擺過一秒鐘所需的標(biāo)準(zhǔn)長度。

計算機與電子學(xué)有關(guān),所以需要一個周期性的電子信號。我們可以通過放置一些開關(guān)來產(chǎn)生電信號,它們就像鐘擺一樣生成信號。不過,除非你是一個嚴(yán)肅的蒸汽朋克玩家,否則很可能還是不太想要一臺鐘擺驅(qū)動的計算機。下一節(jié)將介紹一些更現(xiàn)代的方法。

3.1.1 振蕩器

來看看我們用反相器做的小把戲:把輸入和輸出連接起來,如圖3-1所示。

圖3-1 振蕩器

把輸入和輸出連接起來將產(chǎn)生反饋,就像麥克風(fēng)離揚聲器太近時產(chǎn)生的效果一樣。反相器的輸出在0和1之間來回反彈,或者稱之為振蕩。振蕩的速度是傳播延遲的函數(shù)(見2.4.3節(jié)),而傳播延遲會隨著溫度而變化。頻率穩(wěn)定的振蕩器很有應(yīng)用價值,它可以生成精確的時間參考。

用晶體制作振蕩器是一種經(jīng)濟有效的方法,這個想法還挺新潮!晶體,像磁鐵一樣,與電流有某種關(guān)系。如果把電極(電線)連接到晶體上,然后向晶體施加壓力,它就會產(chǎn)生電流。如果在與晶體連接的電線上通電流,晶體就會彎曲。這就是所謂的壓電效應(yīng),是Paul Jacques兄弟(1855—1941)和Pierre Curie(1859—1906)在19世紀(jì)末發(fā)現(xiàn)的。壓電效應(yīng)有各種各樣的應(yīng)用。晶體可以接收聲音振動,因而可以應(yīng)用到麥克風(fēng)中。晶體通電后產(chǎn)生的聲音振動會使電器發(fā)出惱人的蜂鳴聲。電路圖中的晶體符號如圖3-2所示。

圖3-2 晶體原理圖符號

晶體振蕩器利用電子單極雙擲開關(guān)交替向晶體充電和放電。充電和放電所需的時間是可以預(yù)測的,而且非常準(zhǔn)確。石英是最好的晶體材料之一,這也是你會看到精確石英鐘表的廣告的原因。當(dāng)你在商店里看到高級石英手表的標(biāo)價時,別忘了一塊好的石英售價大約只有25美分。

3.1.2 時鐘

振蕩器給我們提供了一種測量時間的方法。顯而易見,計算機需要保證準(zhǔn)時,比如能夠以同一速度播放視頻。但時間之所以很重要還有另一個原因。在第2章中,我們討論了傳播延遲如何影響電路工作所需的時間。時間為我們提供了一種方法,例如,等待加法器最壞情況下的延遲,然后再查看結(jié)果,這樣我們就知道它是穩(wěn)定和正確的。

振蕩器為計算機提供了時鐘。計算機的時鐘就像軍樂隊中的鼓手,為電路設(shè)定節(jié)奏。最大的時鐘頻率或最快的節(jié)奏由傳播延遲決定。

元件制造涉及大量的統(tǒng)計數(shù)據(jù),因為不同的零件之間差異很大。分選過程根據(jù)測量到的特性,將元件放入不同的箱或堆。速度最快、價格最高的部件放進(jìn)一個箱,速度較慢、價格較低的部件放進(jìn)另一個箱,以此類推。擁有無限多的箱是不切實際的,所以即使箱中部件的差異比所有部件間的差異要小,但還是會有差異。這就是傳播延遲被指定為一個范圍的原因,生產(chǎn)廠家除了提供一個典型值外,還要提供最小值和最大值。一個常見的邏輯電路設(shè)計錯誤是使用典型值,而不使用最小值和最大值。超頻計算機其實是在賭計算機的部件在概率上處于箱的中間,并且時鐘可以在不導(dǎo)致部件失效的情況下增加頻率。

3.1.3 鎖存器

既然有了時間源,我們來試著記住一個單獨的信息位。我們可以通過反饋來做到這一點,比如將OR門的輸出與輸入綁定,如圖3-3所示。因為沒有反相器,所以輸入與輸出綁定不會像圖3-1那樣產(chǎn)生一個振蕩器。假設(shè)圖3-3中的電路輸出初始為0。如果輸入為1,輸出也變?yōu)?,而且由于輸出連接到了另一個輸入端,所以即使輸入變回0,輸出也會保持不變,換句話說,輸出記得它的值。

圖3-3 OR門鎖存器

當(dāng)然,完成這個方案還需要一些工作,因為它沒有辦法再使輸出為0。我們需要通過斷開反饋來重置輸出,如圖3-4所示。

圖3-4 AND-OR門鎖存器

請注意,我們已經(jīng)把反相器的輸出標(biāo)為086-03。把橫線加在符號之上是硬件語言,意思是“相反的”。這代表著某事物為0時為真,為1時為假。有時這被稱為低電平有效,而不是高電平有效,意思是當(dāng)它是0而非1的時候,它會主動觸發(fā)。字符上橫線的發(fā)音是“bar”,所以086-03讀作“reset bar”。

當(dāng)reset為低電平時,086-03為高電平,因此OR門的輸出被反饋給輸入。當(dāng)reset為高電平時,086-03為低電平,打破了反饋,所以輸出是0。

圖3-5表示了一個S-R鎖存器,它是建立位存儲器的一個稍微聰明一點的方法。S-R代表set-reset。它有低電平有效輸入和與輸入互補的輸出,即輸入是低電平有效,輸出是高電平有效。也可以使用NOR門來構(gòu)建一個高電平有效輸入的版本,但NOR門通常比NAND門更耗電,除此之外,也更復(fù)雜,建造成本更高。

圖3-5 S-R鎖存器

086-04086-03都活動時(高電平)的情況很奇怪,一般不會使用這種情況下的電路,因為兩個輸出都是真。另外,如果兩個輸入同時不活動(由高電平跳變到低電平)(即從0過渡為1),輸出的狀態(tài)將不可預(yù)測,因為它取決于傳播延遲。

圖3-5中的電路有一個圖3-4中電路沒有的很好的特性,即電路設(shè)計是對稱的。這意味著set信號和reset信號的傳播延遲都是相似的。

3.1.4 鎖存器組成的門電路

既然已經(jīng)有了一些記憶信息的方法,現(xiàn)在一起來看在某個時間點記住某件事情需要什么。圖3-6所示的電路在輸出端添加了一對門。

圖3-6 S-R鎖存器門電路

可以看到,當(dāng)087-03輸入不活動(高電平)時,是不受086-04086-03影響的。由于S門和R門的輸入都為1,輸出不會改變。

因為我們想記住一位的信息,接下來我們可以做的改進(jìn)是在086-04086-03輸入之間加一個反相器,這樣只需要一個數(shù)據(jù)輸入(簡寫為D)即可。圖3-7展示了修改后的電路。

圖3-7 D鎖存器門電路

當(dāng)087-03處于低電平時,如果D為1時,輸出Q將被設(shè)置為1。同理,當(dāng)087-03處于低電平時,如果D為0,輸出Q會被設(shè)定為0。當(dāng)087-03處于高電平時,D的改變對輸出Q沒有影響。這意味著D的狀態(tài)可以被記住。圖3-8的時序圖展示了這個原理。

圖3-8 D鎖存器門電路的時序圖

這個電路的問題是當(dāng)087-03處于低電平時,D值的變化就會通過,如圖3-8陰影區(qū)域所示。這意味著我們得指望D是“行為良好”的,并且在“門”處于“打開”狀態(tài)時不會改變。如果可以使打開這一操作瞬間完成,就更好了。我們將在下一節(jié)介紹如何做到這一點。

3.1.5 觸發(fā)器

正如上一節(jié)中討論的那樣,我們希望最大限度地減少因數(shù)據(jù)更改導(dǎo)致錯誤結(jié)果的概率。通常的方法是使用邏輯電平之間的過渡來獲取數(shù)據(jù),而不是在邏輯電平具有特定值時獲取數(shù)據(jù)。這些過渡稱為邊沿。你可以將邊沿視為時間的決策衡量準(zhǔn)則。回到圖3-8,可以看到邏輯電平之間幾乎發(fā)生瞬時過渡。邊沿觸發(fā)的鎖存器稱為觸發(fā)器。

鎖存器是用來制作觸發(fā)器的構(gòu)件。我們可以通過巧妙地組合三個S-R鎖存器來構(gòu)造一個稱為D觸發(fā)器的上升沿觸發(fā)觸發(fā)器,如圖3-9所示。上升沿觸發(fā)意味著觸發(fā)器作用于從邏輯0到邏輯1的轉(zhuǎn)換;而對于下降沿觸發(fā),觸發(fā)器將作用于從邏輯1到邏輯0的轉(zhuǎn)換。

圖3-9 D觸發(fā)器的設(shè)計

圖3-9所示的電路有些令人難以置信。右邊的兩個門構(gòu)成了一個S-R鎖存器。從圖3-5可以知道,除非088-04088-05變成低電平,否則輸出不會改變。

圖3-10展示了電路在不同的D值和時鐘下的表現(xiàn)。細(xì)線表示邏輯0,粗線表示邏輯1。

圖3-10 D觸發(fā)器的活動

從左側(cè)開始,可以看到當(dāng)時鐘為0時,088-04088-05都為高電平,所以圖3-9右側(cè)的鎖存器狀態(tài)不變,D值無關(guān)緊要。再往右看,第2、3兩幅圖中,如果088-05為低電平,更改D值無效。同樣,最右邊的兩個圖顯示,如果088-04為低電平,則更改D值無效。因此,無論時鐘為高電平還是低電平,D值的更改均不起作用。

我們來看一下時鐘從低電平變化到高電平時會發(fā)生什么,如圖3-11所示。

圖3-11 D觸發(fā)器的上升沿活動

可以在圖3-11的左邊看到,當(dāng)時鐘為低電平而D值為高電平時,088-04088-05都為高電平,所以鎖存器狀態(tài)沒什么變化。但當(dāng)時鐘變?yōu)?,088-04變?yōu)榈碗娖綍r,就會改變觸發(fā)器的狀態(tài)。在圖3-11的右邊,可以看到當(dāng)D值為低電平而時鐘變成高電平時也有類似的變化,即會引起088-05變低電平并且改變觸發(fā)器狀態(tài)。從圖3-11可以看出,其他的改變都無關(guān)緊要,不會產(chǎn)生什么影響。

1918年,英國物理學(xué)家William Eccles和Frank Jordan發(fā)明了第一個電子版觸發(fā)器,這個觸發(fā)器使用真空管制作。圖3-12展示了一個稍微不那么古老的D觸發(fā)器7474的簡圖。

圖3-12 D觸發(fā)器7474

D觸發(fā)器具有互補的Q090-04輸出以及088-04(設(shè)置)和088-05(復(fù)位)輸入。這有點令人困惑,因為圖中顯示的是SR,而不是088-04088-05;實際上,正是SR和○的結(jié)合使它們成了088-04088-05。所以,除了左邊神秘的部分,它就像我們的S-R鎖存器。神秘的部分是兩個額外的輸入,D代表數(shù)據(jù),CK代表時鐘(用三角形表示)。它是上升沿觸發(fā)的,所以只要CK上的信號從0變?yōu)?,D輸入的值就會被存儲起來。

除傳播延遲外,邊沿觸發(fā)設(shè)備還有其他定時考慮因素,比如建立時間,即在時鐘邊沿之前信號必須穩(wěn)定的時間量,以及保持時間,即時鐘邊沿之后信號必須穩(wěn)定的時間量,如圖3-13所示。

圖3-13 建立及保持時間

如你所見,除了在時鐘邊沿周圍的建立時間和保持時間期間,其他時間不必關(guān)心D輸入上發(fā)生了什么。而且,與其他邏輯電路一樣,輸出在傳播延遲時間之后是穩(wěn)定的,而且獨立于D輸入保持穩(wěn)定。建立時間和保持時間通常用tsetupthold表示。

觸發(fā)器的邊沿行為與時鐘配合得很好。我們將在下一節(jié)中給出示例。

3.1.6 計數(shù)器

計數(shù)是觸發(fā)器的一個常見應(yīng)用。例如,我們可以計算振蕩器的時間,并用解碼器驅(qū)動顯示器來制作數(shù)字時鐘。圖3-14展示了一個產(chǎn)生3位數(shù)字(C2C1C0)的電路,這3位數(shù)字表示信號從0變?yōu)?的次數(shù)。086-03信號可用來把計數(shù)器設(shè)置為0。

圖3-14 3位的紋波計數(shù)器

圖3-14所示的計數(shù)器之所以被稱為紋波計數(shù)器是因為其結(jié)果就像紋波一樣從左到右計數(shù),而不是因為它可以用來數(shù)瓶裝廉價酒的數(shù)量。C0改變C1C1改變C2,如果有更多的位的話,以此類推。由于每個觸發(fā)器的D輸入都與090-04輸出相連,因此在每次CK信號正躍遷時,都會改變狀態(tài)。

它也被稱為異步計數(shù)器,因為每件事都是在它到來的時候才發(fā)生。異步系統(tǒng)的問題是很難知道何時查看結(jié)果。輸出(C2C1C0)在波動期間無效。從圖3-15可以看到為何得到每個連續(xù)位的結(jié)果都需要花費更長的時間,圖中灰色區(qū)域表示由于傳播延遲而未被定義的值。

圖3-15 紋波計數(shù)器的時序

左邊的時序圖顯示,在傳播延遲消除后,我們得到了一個有效的3位數(shù)字。但是在右邊的時序圖,可以看到我們試圖用比傳播延遲允許的更快的速度進(jìn)行計數(shù),因此并非任何時間都能產(chǎn)生有效的數(shù)字。

這是我們在圖2-41中看到的行波進(jìn)位加法器問題的變體。正如能夠用超前進(jìn)位設(shè)計解決這個問題一樣,我們也可以通過同步計數(shù)器設(shè)計來解決紋波問題。

與紋波計數(shù)器不同,同步計數(shù)器在同一時間(同步)輸出所有變化。這意味著所有的觸發(fā)器都是并行計時的。3位的同步計數(shù)器如圖3-16所示。

圖3-16 3位的同步計數(shù)器

可以看到計數(shù)器中的所有觸發(fā)器都同時改變狀態(tài),因為它們都是在同一時間開始計時的。盡管傳播延遲仍然是判斷輸出何時有效的一個影響因素,但是級聯(lián)效應(yīng)已經(jīng)被消除。

計數(shù)器也是一種功能構(gòu)件,這意味著它們有自己的原理圖符號。在本例中,它是一個矩形框,如圖3-17所示。

圖3-17 計數(shù)器的原理圖符號

圖3-17中包含了一些我們以前從未見過的輸入。計數(shù)器可以操作部分或全部的這些輸入。大多數(shù)計數(shù)器都有清理計數(shù)器的CLR輸入,可以將計數(shù)器設(shè)置為0。同樣常見的是EN輸入,它可以啟動計數(shù)器來計數(shù),除非啟用,否則計數(shù)器不計數(shù)。一些計數(shù)器可以在任意方向上計數(shù),使用092-03輸入即可選擇向上或向下。最后,一些計數(shù)器具有數(shù)據(jù)輸入D0–n和負(fù)載信號LD(允許將計數(shù)器設(shè)置為特定值)。

有了計數(shù)器,我們就可以用它們來記錄時間。但計數(shù)并不是我們能用觸發(fā)器做的唯一事情。下一節(jié)將開始介紹如何記住大量信息。

3.1.7 寄存器

D觸發(fā)器有利于計算機記憶。D觸發(fā)器的一個很常見的應(yīng)用是它可以制作寄存器,寄存器是一個包中的一堆共享同一時鐘的D觸發(fā)器。圖3-18顯示了保存前面討論的加法器電路加法結(jié)果的寄存器示例。

圖3-18 保存加法結(jié)果的寄存器

一旦加法器的輸出被記錄到寄存器中,操作數(shù)發(fā)生改變不會讓結(jié)果也改變。請注意,寄存器通常具有與計數(shù)器類似的使能輸入。

主站蜘蛛池模板: 贵阳市| 盖州市| 朝阳市| 祁连县| 徐州市| 丽江市| 庆城县| 宝坻区| 沾化县| 乐陵市| 乐昌市| 乃东县| 巨鹿县| 木里| 城步| 施甸县| 高密市| 集安市| 山西省| 永年县| 墨竹工卡县| 扎赉特旗| 乌鲁木齐县| 竹溪县| 婺源县| 大同县| 福建省| 宣武区| 卢氏县| 岳池县| 庄河市| 宁晋县| 林口县| 南召县| 峨眉山市| 上犹县| 博白县| 萍乡市| 体育| 赣榆县| 胶南市|