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