計算機對我來說無非是一個類似于電視機的東西,厚重的顯示器顯示出字符圖畫,對于我來說和課外書上的故事和圖畫相差無幾。雖然有吸引力,但也僅僅是有些好奇罷了。
直到07年的時候,液晶顯示器開始普及。一臺連接了互聯(lián)網(wǎng)的計算機出現(xiàn)在我面前,對我的吸引是致命的。從那時候起,建筑設(shè)計師的夢想離我遠去,計算機隨之替代。
也是從這時候起,我開始使用計算機在互聯(lián)網(wǎng)中傲游。從最開始的Flash小游戲中熟悉鍵盤鼠標的基本操作;到在網(wǎng)絡(luò)游戲中尋找外掛時迷上黑客技術(shù)文化;最后在各種論壇社區(qū)中找尋學(xué)習(xí)計算機各種技術(shù)技巧。
差不多有十三四年的時間是在學(xué)習(xí)如何使用計算機。直到讀了《編碼》這本書,為了更深入的理解計算機,就想弄懂計算機的工作原理。有機會的話,嘗試制作一臺計算機。
至此使用計算機變成了制作計算機。
非科班出身的我自然有很大的知識漏洞缺陷。在第一次讀這本書時,讀到了加法器就再也讀不下去了。關(guān)上書打基礎(chǔ),在學(xué)習(xí)了數(shù)字電路和模擬電路的一些基礎(chǔ)知識后,繼續(xù)嘗試接著讀,發(fā)現(xiàn)之前困擾問題似乎也不在困難,二進制和十六進制開起來也自然多了。
在我之前的一篇筆記《如何實現(xiàn)加法器》中,對于ALU的工作原理做了簡單的了解。
數(shù)據(jù)雖然是保存硬盤中的,如果CPU每次運算都要從硬盤中取數(shù)據(jù)的話就太慢了。CPU的運算速度和IO的速度差異實在是太大了,所以需要把硬盤中的數(shù)據(jù)拷貝到內(nèi)存中,這樣CPU在需要數(shù)據(jù)的時候直接向內(nèi)存要。
所以寄存器的作用就是用來保存數(shù)據(jù),那么如何用電、邏輯門來保存數(shù)據(jù)呢?
異或門
回憶一下或非門,其真值表如下:
RS鎖存器
現(xiàn)在把兩個或非門結(jié)合起來,第一個門電路的輸出是第二個門電路的輸入,第二個門電路的輸出是第一個門電路的輸入。
可以看到這兩個門電路纏繞在一起,輸入既決定輸出,輸出也決定輸入。
真值表如下:
從或非門的真值表可知,只要其中有一個輸入為1,不管另一個是0還是1,輸出都是0。需要注意的是,當兩個輸入都為0時,兩個門電路都無法確定輸出,而兩個門電路都需要另一個的輸出當作輸入,所以此時電路系統(tǒng)處于不確定的狀態(tài)。
只要其中一個輸入為1,那么該門電路的輸出就確定為0了(異或門決定),另一個的門電路的輸入也就確定為0,此時該電路系統(tǒng)就不會出現(xiàn)錯誤。
神奇的地方來了,如下圖:
當輸入2為1時,改變上面的輸入時,輸出隨之改變。(先暫時不考慮輸出2)
但是當輸入2為0時,改變上面的輸入時,會發(fā)現(xiàn)輸出不變了。如下圖:
輸出1被輸入2鎖住了,因此這種電路叫做鎖存器。(當然,反過來也是一樣的)
從上圖還可以得知,但輸入2為0時,輸入1也是可以為0的,此時為什么不是Error呢?
因為之前當兩個都為0時,他們的輸出是不確定的所以為Error,但是當輸入1為1,輸入2為0時,此時電路系統(tǒng)是確定的,改變輸入1,輸入2的輸出并沒有改變,依然確定輸出為1,那么輸入1的輸出也就是確定的了。因此不會發(fā)生錯誤。
為了方便,把該電路的輸入輸出取一個名字,如下:
修改后的真值表如下:(注意輸入2和輸入1交換了位置。)
當S和R都為0時,現(xiàn)在的輸出就不是無法確定了。而是保持上一次的輸出,這很重要。正是因為有了該特點。電路有了記憶功能,也就是說電路可以保存數(shù)據(jù)了。
而當S和R都為1時,在這個系統(tǒng)中不需要用到,因此它被禁止了。因為當S和R都為1時,那么輸出都為0,這和電路設(shè)計中Q和互反矛盾,所以要避免。
這里兩個輸出是相反的,真正需要的只要1個即可。
因為可把輸出鎖起來,兩個輸入端分別為Reset和Set,所以這個電路的名字叫做RS鎖存器。
D觸發(fā)器
繼續(xù)構(gòu)造電路,在原來的基礎(chǔ)上添加兩個或非門。
用一個把兩個輸入端用一個SCK鎖住。當SCK為1時,兩個輸入端都被鎖住,當SCK為0時,輸入端被激活。如下圖:
[gif error]這個電路和之前的電路并沒有什么區(qū)別,同理兩個輸入端不能同時為0(這里因為異或門取反,所以不是同時為1,原理相同)。
數(shù)據(jù)端也只需要一個輸入就可以了,并且不能同時輸入0,繼續(xù)構(gòu)造電路。
把兩個輸入接在一起,并且其中一個取反?,F(xiàn)在就只有一個輸入端和一個保持端了。
當CLK為1時,數(shù)據(jù)輸出保持不變。當CLK為0時,輸出端取決于數(shù)據(jù)輸入端。
[gif error]并且還不用擔(dān)心兩個輸入端同時為0。真值表如下:
輸入端為Data端,這個電路的名字叫做 D觸發(fā)器 。
可以看到這個電路就可以保存1Bit的數(shù)據(jù)了。
把好多個串起來,就可以保存多個Bit了。一般情況下,8Bit等于1Byte,寫數(shù)據(jù)也是一個字節(jié)一個字節(jié)的寫,所以一把把8個觸發(fā)器連起來,共用一根SLK線。所以也叫八位鎖存器。
這種觸發(fā)器的觸發(fā)方式為CLK為0時,數(shù)據(jù)就可以輸入,當CLK為1時,數(shù)據(jù)就被鎖住不能修改了。
當CLK為0時數(shù)據(jù)是可以修改的,如果在CLK為0期間,Data輸入數(shù)據(jù)完畢后,CLK還沒有鎖住時,發(fā)送電磁干擾改變了Data的輸入,那么保存的數(shù)據(jù)也就保存錯了。
邊沿觸發(fā)器
既然電平觸發(fā)可能由于時間太長導(dǎo)致數(shù)據(jù)可能因干擾而改變,那么就減少觸發(fā)的時間,高低電平改變的瞬間時間很短,因此可以利用高低電平變化的瞬間來觸發(fā),把兩個D觸發(fā)器串在一起。為了進行區(qū)分,兩個D觸發(fā)器分別取一個名字。
主觸發(fā)器從Data得到輸入,從觸發(fā)器的輸入來自主觸發(fā)器。主觸發(fā)器不會改變得到的輸入。如下圖:
[gif error]目前來說這個觸發(fā)器和D觸發(fā)器完全關(guān)鍵來了,對兩個觸發(fā)器的CLK其中一個取反,如下圖:
這樣的話,CLK只有一個輸入,在同一時間,主觸發(fā)器和從觸發(fā)器只能有一個起作用。
[gif error]基本原理如下:
- 先把CLK置為0,此時主觸發(fā)器的CLK經(jīng)過取反現(xiàn)在為1,此時主觸發(fā)器就鎖住了。雖然從觸發(fā)器的CLK為0沒有被鎖住,但是從觸發(fā)器的輸入需要從主觸發(fā)器的輸出得到,主觸發(fā)器沒有改變,那么從觸發(fā)器也就不會改變。
- 現(xiàn)在把CLK置為1,此時主觸發(fā)器的CLK解鎖??梢孕薷妮敵?,但是從觸發(fā)器此時被鎖住。主觸發(fā)器的輸出還是無法改變從觸發(fā)器的輸出。
- 重點來了,此時雖然主觸發(fā)器的輸入無法改變,但是主觸發(fā)器的輸出已經(jīng)固定下來了。此時再把CLK置為0,那么從觸發(fā)器此時的輸入可以從被之前的主觸發(fā)器的輸出改變的,只是無法從觸發(fā)器的輸入改變而已。
完成流程如下:
- 先把CLK置為1,鎖從觸發(fā)器,現(xiàn)在可以把需要保存的數(shù)據(jù)輸入到主出觸發(fā)器中。
- 注意,現(xiàn)在保存的數(shù)據(jù)已經(jīng)在主觸發(fā)器中了?,F(xiàn)在把CLK置0,一瞬間,主觸發(fā)器鎖住,從觸發(fā)器打開,保存在主觸發(fā)器的數(shù)據(jù)已經(jīng)輸出到從觸發(fā)器中了。
[gif error]這樣子,一瞬間觸發(fā)的觸發(fā)器的名字叫做 邊沿觸發(fā)器 。
同理把多個邊沿觸發(fā)器連在一起,就能保存多個Bit的數(shù)據(jù)了。
這里把8個組合在一起,就可以保存一個Byte的數(shù)據(jù)了。
它的名字就是寄存器。
-
寄存器
+關(guān)注
關(guān)注
31文章
5433瀏覽量
124417 -
電磁干擾
+關(guān)注
關(guān)注
36文章
2391瀏覽量
106555 -
鎖存器
+關(guān)注
關(guān)注
8文章
925瀏覽量
42362 -
門電路
+關(guān)注
關(guān)注
7文章
201瀏覽量
40739 -
D觸發(fā)器
+關(guān)注
關(guān)注
3文章
169瀏覽量
48753
發(fā)布評論請先 登錄
鎖存器、觸發(fā)器、寄存器和緩沖器的區(qū)別
寄存器、鎖存器和觸發(fā)器的區(qū)別
觸發(fā)器、鎖存器、寄存器三者的區(qū)別
【轉(zhuǎn)】數(shù)字電路三劍客:鎖存器、觸發(fā)器和寄存器
什么是觸發(fā)器 觸發(fā)器的工作原理及作用
什么是邊沿觸發(fā)器_邊沿D觸發(fā)器介紹

評論