七、寄存器
學(xué)匯編的時候聽過這個東西,“寄存”這個詞讓我感覺寄人籬下可憐巴巴的。寄存器的功能是把數(shù)據(jù)(約定里說的0和1,實際就是電路的通斷狀態(tài))保存下來,以后還可以取出來用。寄存器這東西比之前的器件都復(fù)雜,需要一步一步來做。
八、R-S觸發(fā)器
先看下面這個電路,這是各種有存儲功能的器件的基礎(chǔ)。

上圖展示的是在R和S開關(guān)都斷開的情況下啟動電路得到的結(jié)果?!洞┰接嬎銠C的迷霧》里說這種情況下,哪個燈泡亮是不一定的,就看哪個邏輯門轉(zhuǎn)的快了。不過我用multisim12仿真的時候,兩個燈泡是在忽亮忽滅不停地閃。這可以說是非正常人類使用R-S觸發(fā)器的情況。下面再看看正常人類使用R-S觸發(fā)器的情況。

R-S觸發(fā)器的R是Reset,意思是把Q燈泡重置為0,S是Set,意思是把Q燈泡置為1??梢钥吹?,只閉合S,則Q亮NQ不亮;只閉合R,則Q不亮NQ亮;同時閉合RS,則Q和NQ都不亮;同時斷開RS,則Q和NQ保持剛才的狀態(tài)不變。
九、D觸發(fā)器
既然要保存數(shù)據(jù),我們就要求只在希望保存某個數(shù)據(jù)的時候存進去,否則就不理他。所以我們給R-S觸發(fā)器加一個新的輸入作為控制端,只有控制端為1的時候才能保存新來的數(shù)據(jù)。這里也把RS端合并為一個D端,用一個非門實現(xiàn)了只能使R和S有且只有一個開關(guān)是閉合的(即要么Q燈泡變?yōu)?要么Q燈泡變?yōu)?)。

D觸發(fā)器的符號我也沒在multisim里找到,大家看這個吧。

十、上升沿D觸發(fā)器
我們只希望在某一瞬間把數(shù)據(jù)存起來,而不是像D觸發(fā)器那樣,控制端為1的整個時間端都會保存新數(shù)據(jù)。(這樣最安全)于是我們在D觸發(fā)器基礎(chǔ)上設(shè)計了上升沿D觸發(fā)器。這個觸發(fā)器只在控制端從0變?yōu)?的瞬間存儲新數(shù)據(jù)。是不是很奇妙的設(shè)計?

上升沿D觸發(fā)器使用了兩個D觸發(fā)器,再加一個非門,就OK了。平時,我們把要存儲的數(shù)據(jù)(D開關(guān))放好。然后,當(dāng)控制端CP為斷開時,圖中上面那個D觸發(fā)器是能夠存數(shù)據(jù)的,但是下面那個存不了。就是說新數(shù)據(jù)已經(jīng)到了兩個D觸發(fā)器之間的導(dǎo)線上。在控制端CP閉合的瞬間,上面的D觸發(fā)器無法再存新數(shù)據(jù)了,而下面的D觸發(fā)器可以存新數(shù)據(jù)了,那么它存的是哪個新數(shù)據(jù)?只能是剛剛在兩個D觸發(fā)器之間的導(dǎo)線上的數(shù)據(jù)了。這個瞬間之后,新數(shù)據(jù)無法通過上面的D觸發(fā)器,自然也就無法保存了。
這次我終于在multisim12里找到了上升沿D觸發(fā)器的符號。
十一、乒乓觸發(fā)器
這是個有點類似振蕩器的器件。兩者的區(qū)別在于,振蕩器是自動地改變輸出,乒乓觸發(fā)器是在輸入一個上升沿的時候改變輸出。電路圖如下所示。

可以看出,乒乓觸發(fā)器其實就是把上升沿D觸發(fā)器的非Q輸出端接到了輸入端。很顯然每次存的新數(shù)據(jù)總是和輸出信號相反。
乒乓觸發(fā)器可以用來做計數(shù)器。計數(shù)器有這樣的功能:每收到一個上升沿的信號,就增加1。例如下圖所示的能統(tǒng)計二進制的00000到11111(即0到31)這32個數(shù)。計數(shù)器的每一位計數(shù)器件都是一個乒乓觸發(fā)器。燈泡亮表示1,燈泡滅表示0。

十二、走馬燈
利用上升沿D觸發(fā)器還可以做“走馬燈”。走馬燈是每次都讓前面一個燈泡亮的設(shè)備,最后一個燈泡亮過之后,又從第一個燈泡開始亮,循環(huán)往復(fù)。下圖所示電路就是一個有5個燈泡循環(huán)走馬的走馬燈。為了在電路剛接通的時候讓第一個燈亮起來,我加了兩個開關(guān)S1和S2,大家可以分析一下怎么用S1和S2。這有助于加深體會上升沿D觸發(fā)器的功能,并加速對更復(fù)雜器件的理解。

十三、寄存器
能保存5位二進制數(shù)的寄存器如下圖所示。其實就是5個上升沿D觸發(fā)器并列起來而已。

想保存數(shù)據(jù)的時候,調(diào)整好D0、D1、D2、D3、D4五個開關(guān)(實際應(yīng)用的時候就可能是其他電路的輸出導(dǎo)線了),然后斷開再閉合一下控制端的開關(guān)S5即可,數(shù)據(jù)就保存到了5個上升沿D觸發(fā)器的Q端。
我這里只畫了保存5位數(shù)的寄存器,是因為再畫就太大了,在word里圖就看不清楚了。我們知道現(xiàn)在計算機的寄存器已經(jīng)到32位或者64位了。那就是有32或64個并列的上升沿D觸發(fā)器組成一個寄存器。我們也看到了一個上升沿D觸發(fā)器需要幾十個繼電器(晶體管),那么一個寄存器就需要上千個繼電器(晶體管)了。而CPU里包含的寄存器、加法器等運算器還有各種控制器,其包含的繼電器(晶體管)數(shù)目上百萬也就很好理解了。內(nèi)存條里的內(nèi)存也是用上升沿D觸發(fā)器和一個門電路組成存儲一位(一個bit,8個bit是一個字節(jié))的存儲結(jié)構(gòu)的,其包含的繼電器(晶體管)數(shù)目可想而知有多少。
