【數字邏輯入門】計算機如何存儲1位二進制數

0 前言

本文將會以R-S鎖存器為例,引出鎖存器的核心和本質,之后再帶你構建更多類型的鎖存器,你能夠:

  • 感受到由淺入深的學習方式
  • 體會到掌握核心本質的快感
  • 深刻理解核心套外殼的設計理念(產品迭代1.0–>2.0–>3.0)

同時,強烈建議你使用logisim軟件,邊看文章邊實踐,這樣能夠加深理解,這款軟件半小時即可入門,圖形化的操作方式,簡單又好用。

核心套外殼的思想,能夠幫助你【區分表象與本質,抓住問題的核心,理解設計理念!】

1 確立一個目標,提升你的認知效率

點進這篇文章,我想你是非常想要學會鎖存器相關知識的,那么,為了進一步提高你的認知效率,我先給你定下一個目標,帶著這個目標,再去一步一步尋找和學習相關知識,并且,你應該使用軟件,在實踐中學習,這么一來,你的認知效率將會翻倍。

我們都知道計算機的硬盤和內存,我們也知道,這些設備能夠存儲數據,并且這些數據是二進制信息,也就是0、1的各種排列組合,那么,你是否曾經產生疑惑,4GB、16GB,乃至1TB的信息,是如何被存儲的?

今天讓我們來解答這個問題,我們先不管1TB的信息如何存儲的,今天我們就談:如何存儲1位二進制信息,也就是如何存儲一個0或者一個1

我們需要制作一個器件,能夠存儲一個0或者一個1。這個器件,就是R-S鎖存器,在通電狀態下,它能夠鎖住(存儲)1個二進制位,也就是1 bit

讓我們來一步步地揭開它的神秘面紗吧!

2 R-S鎖存器

2.1 基本結構

我們來看一下他=它的結構,通常有兩種描述方法:

  • 描述1
    在這里插入圖片描述
  • 描述2
    在這里插入圖片描述

這兩種結構完全一樣,只不過放置的方式不一樣,通常我們會采用描述2的方式。

可以看到,R-S鎖存器包含了2個或非門,2個輸入端口,1個輸出端口,這個結構真的簡單至極。

如果你學過一點數字邏輯的知識,也許你會跟我爭辯,R-S鎖存器不是2個輸出端口嗎?先按照我說的繼續往下聽,之后會解釋的。

2.2 如何鎖住1-bit

那么,這樣一個結構,如何鎖住(存儲)1-bit的?

為了方便描述,我們先為上面的結構命名一下。

在這里插入圖片描述

  • 2個輸入端口分別命名為RS
  • 1個輸出端口被命名為Q

讓我們記住這個初始狀態

RSQ
000

然后,我們將R置為1
在這里插入圖片描述
你會發現,此時的狀態是

RSQ
100

我們再S置為1
在這里插入圖片描述
此時的狀態是

RSQ
110

我們再R置為0
在這里插入圖片描述
此時的狀態是

RSQ
011

我們再S置為0
在這里插入圖片描述
此時的狀態是

RSQ
001

接下來,我們匯總一下上面的幾種狀態

RSQ
000
100
110
011
001

我們可以看到,同樣是0,0,但是輸出卻可能是01,這也就意味著,這不是組合邏輯,而是時序邏輯,輸入的順序會影響結果

同時,我們再繼續進行實驗可以發現(此處請自行完成實驗,親自體驗以下結論

  • 一旦置R = 1,S = 0,S不變的情況下,無論R如何改變,Q都等于0
  • 一旦置R = 0,S = 1,R不變的情況下,無論S如何改變,Q都等于1
  • R = 0,S = 0的時候,Q的結果,取決于上一個狀態。如果之前是因為R = 1,S = 0導致的Q = 0,則現在的Q依然0;如果之前是因為R = 0,S = 1導致的Q = 1,則現在的Q依然為1
  • 一旦置R = 1,S = 1,Q一定等于0,這種情況與我們的目標不符,我們需要禁止

因此,我們得到了R-S鎖存器特性表

RSQ
00和之前狀態的Q一樣
011
100
11禁止使用

我帶你分析完了這些,我們改回看主題,看一下它是如何鎖住1-bit的。我們看一下剛才描述的狀態:

  • 一旦置R = 1,S = 0,S不變的情況下,無論R如何改變,Q都等于0
  • 一旦置R = 0,S = 1,R不變的情況下,無論S如何改變,Q都等于1

我們觀察后面加粗的句子,不難看出,1個二進制數被“鎖在”了器件中,這也就是所謂的鎖存器,它在功能上,實現了存儲1個二進制位

2.3 為什么可以鎖住1-bit

剛才,我們知道了R-S鎖存器能夠存儲1個二進制位,并且已經達成了目標,是的,我們成功存儲了1個二進制位,但是,這還不夠,我們應該保持好奇心,問一問自己,為什么能夠鎖住?

讓我們來分析一下R-S鎖存器的工作,以R = 1,S = 0為初態舉例。

下面是初態,并且我在幾個關鍵的地方做了標記。
在這里插入圖片描述
之后,我令R = 0,我們來逐步地分析一下,到底發生了什么。

首先,0信號傳到了a端,此時a = 0
在這里插入圖片描述
然后,ae進行或非運算,得到的結果傳到了b端,此時b = 0
在這里插入圖片描述
然后b端的結果,反饋到了c端,c = 0;之后,可以得到d = 1;之后,d端的結果又反饋到了e端,可以得知,e = 1并沒有發生變化,就此,這個過程就穩定了下來,b端輸出到Q的數據也就是最終結果了。

我們梳理一下這個過程,在令R = 0之后,只有a端的數據變為了0,其他端口的數據均沒有變化,這樣一來,也就產生了鎖住數據的現象,產生這種現象的原因,是因為反饋回路的存在

我們可以知道,bc鎖住了0de鎖住了1,這二者正好相反,因此我們有時候也會將R-S鎖存器設計為下面的樣子,這樣可以獲得兩個一直相反的輸出結果
在這里插入圖片描述
其中,上面讀作輸出Q,下面讀作輸出Q拔,二者的取值永遠相反,你也能夠理解,為什么之前我們禁止了R = S = 1的情況,因為這樣輸出就不相反了,與設計目標不符。

2.4 為什么叫“R-S鎖存器”

為什么這個器件被命名為R-S鎖存器呢?為什么不叫別的名字?

我們要知道,凡是命名,都有其含義,都能表達其意義,這樣的命名才有價值,R-S鎖存器也是如此。

它是英文名稱是:Set-Reset latch,有被稱為S-R Latch或者R-S Latch

我們來解釋一下

  • R就是reset重置、復位的意思,所以,當僅有它為1的時候,輸出Q = 0
  • S就是set設置、置位的意思,所以,當僅有它為1的時候,輸出Q = 1
  • Latch,鎖存器的意思,它能夠存儲1個二進制位

2.5 R-S鎖存器的功能

R-S鎖存器,也可以被稱為置位復位觸發器,我想你明白這個含義了,現在我們只是總結一下。

RSQ說明
00和之前狀態的Q一樣保持
011置位
100復位
11禁止使用非法

3 鎖存器的核心和本質

通過R-S鎖存器,我們可以理解鎖存器的本質,掌握一類鎖存器的核心,這才是我們要關注的重點內容,至于鎖存器的設計和樣子,不是最重要的,那只不過是在核心的基礎之上,套上了外殼,從而讓其擁有更廣泛的的應用。

關于核心套外殼,我有必要進一步解釋一下,我們知道,計算機領域又很多核心部件,例如CPU,這是被外國壟斷的高科技器件,它是核心,而計算機其他的部分,內存、硬盤、顯示器等等,都是外殼,我們給核心套上不同的外殼,就構成了不同的計算機,能夠進行不同的應用;又比如富士康代工廠,他們做的就是給核心套上外殼的工作。

我想你應該能夠理解核心的重要性了。

那么鎖存器的核心是什么?

在這里插入圖片描述
這就是鎖存器的核心,原理方面,我之前已經詳細講解過,不再贅述,但是希望你認真對待那些看似簡單容易的知識,因為它們可能蘊含著擁有無窮力量的核心思想

3.1 核心套外殼的產品

那么核心套外殼之后,有那些產品呢?有很多,例如:

  • 基本R-S鎖存器
  • 門控R-S鎖存器
  • D型鎖存器

甚至,由此核心,還可以構成各種各樣觸發器

需要注意的是,這些外殼,并不是死板的,你完全可以根據需要,靈活地變化他們,不必拘泥于某種特定的形式,不過前提是,變化之后的產品真的很好用,否則,你更應該直接使用封裝好的產品。

后面的小節,我會為你詳細講解核心套外殼的產品

3 外殼一:基本R-S鎖存器

嘿!一個新的目標出現了,之前我們為了存儲1位數據,制作了R-S鎖存器,現在,我們需要存儲一位數據,并能夠讓他輸出存儲的數據,以及和存儲數據互補(0和1在二進制下是互補的)的數據

這個產品我不再分析,因為你之前見過了:
在這里插入圖片描述
現在我們將其封裝一下,讓它更像一個產品。
在這里插入圖片描述
至于它的功能,我想你已經知道了,基本R-S鎖存器,增加的外殼是一個輸出端口

4 外殼二:門控R-S鎖存器

現在,新的任務又下達了,我們的基本R-S鎖存器,可以隨意被使用,這可不好,現在我們需要增加一個開關,只有開關打開的時候,基本R-S鎖存器才可以被使用。

我們考慮一下,看看上面封裝好的基本R-S鎖存器,我們可以加的外殼是:在進入R、S輸入端口之前,增加2個與門,這樣就可以控制輸入信號的有效、無效。

在這里插入圖片描述
你可以試一試這個電路,這就是門控R-S鎖存器

名稱的含義,門控,就是加一個開關,它被稱為使能端(Enable terminal),簡寫EN

我們將它封裝一下:
在這里插入圖片描述

5 外殼三:D型鎖存器

全新的任務

  1. 徹底禁止掉R = S = 1的情況,對于任何輸入的數據,使其,不可能存在這種情況,保證安全,完全避免非法狀態。
  2. 讓這個器件能夠實現數據0和1的寫入,并且能夠控制是否寫入。

我們由門控R-S鎖存器開始思考,既然R和S不能相同,那就只能相反了,這樣雖然會舍棄掉R = S = 0的情況,不過,既然這種情況會與上一個狀態相同,而上一個狀態R和S一定相反,所以,舍棄掉又有何妨呢?因此,我們的思路就有了,讓R和S永遠相反,我們怎么做呢?我想你應該知道了,使用1個輸入端和1個非門

就像下面這樣,加緩沖器是為了讓數據流動時間和加了非門的線路同步
在這里插入圖片描述
那么第二個目標如何達成?顯然我們已經完成了一部分,1個輸入端和1個開關我們已經有了,我們只需要,去掉Qbar即可。
在這里插入圖片描述
你會發現,這里有了較大的變化,我的節奏加快了,如果你前面認真實踐了的話,我想你是適應這種變化的。

我來解釋一下這些變化

  1. 為了達成目標,我們要讓R和S的值一直相反,因此我們加了一個非門和緩沖門,用一個輸入端操控它,注意,不要將非門放錯位置,你仔細想一下會明白怎么放置的(舉一個例子就好,例如DI = 0的時候,如何讓DO = 0)。
  2. 我們將開關作為寫入端
  3. 我們不使用Qbar端口

我來解釋一下端口名稱的變化

  1. DI:數據輸入端,可以控制輸入的數據是0還是1
  2. DO:數據輸出端,可以讀取存儲在鎖存器中的數據
  3. W:寫入端,可以控制是否將數據寫入端的數據寫入到鎖存器中
    1. W = 1,則DI中的數據會被寫入到鎖存器中,并且存儲起來,此時,DO讀取的數據是和DI一樣的
    2. W = 0,則DI中的數據不會被寫入到鎖存器中,此時,DO將會讀取鎖存器中存儲的數據,與DI的數據無關

我們封裝一下這個器件
在這里插入圖片描述

擴展內容:這也是我們現在會常用的鎖存器類型,我們通常會使用Verilog HDL實現它

module moduleName (input wire w,input wire Din,output reg Dout);always @(w or Din)beginif(w)Dout <= Din;elseDout <= Dout;endendmodule

關于Verilog HDL的知識,你可以自行搜索,如果你不感興趣,這部分內容可以忽略。

6 一點注意

這里器件的存儲,不是永久保存,因為它的本質是電子器件,電是難免會泄露的,我們還需要對其做一些補充,這里不深入展開。

另外,對于門控R-S鎖存器中的開關,也被稱為保持位(Hold That Bit),當它為0的時候,無論R、S怎么變,鎖住的數據也不會改變,這也就是所謂的保持

7 思考題&預告

我留下思考題和預告,請你仔細思考并認真實踐

  1. 最初,我們使用或非門構造了R-S鎖存器,事實上,與非門一樣可以完成這件事情,我在3.1節提過,產品的設計的不能死板,它是靈活的,請你思考一下如何設計。
  2. 請思考一下,具體講解的幾種外殼,有沒有感受到,外殼的設計也又核心思想支撐? 之后我們會揭秘。
  3. 核心套外殼的產品,也完全可以作為新的核心,為他們再賦予外殼,做出更多有用的產品。
  4. 我們的目標是構建一個RAM存儲器,以R-S為鎖存器的RAM產品,隨著時代的發展,它的性能提升進入了瓶頸期,這個時候,人們的最佳選擇是優化核心,這也由RAM存儲器,轉變成了SRAM、DRAM等類型的存儲器,這些后面也會提及(也可以按照此思路,去想一想:算盤–>計算器–>電子計算機–>量子計算機)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/384713.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384713.shtml
英文地址,請注明出處:http://en.pswp.cn/news/384713.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【算法訓練】DAY1:整數反轉

1 前言 題目來源于Leetcode。 重點&#xff1a;理清邏輯&#xff0c;忽略細節&#xff0c;模仿高手&#xff0c;五毒神掌 2 題目分析 題目很容易理解&#xff0c;先分成兩個部分 正數負數 先解決正數 最開始想到的是 intchar數組long唯一增加的就是&#xff0c;先判斷整…

【匯編語言】(x86)test與跳轉指令(je jle jge jg jl……)組合的含義

在x86指令集中&#xff0c;經常遇到test指令與條件跳轉指令組合&#xff0c;這是什么含義呢&#xff1f; 博主表示&#xff0c;查了很多資料也沒人完全說清楚…… 這里只用最簡單的&#xff0c;抽象層次進行說明&#xff0c;不講原理。 舉例 test edx,edx jle 某地址含義是&…

【藍橋杯】BASIC-8 回文數(2020-06-08)

題目 試題 基礎練習 回文數 資源限制 時間限制&#xff1a;1.0s 內存限制&#xff1a;512.0MB 問題描述   1221是一個非常特殊的數&#xff0c;它從左邊讀和從右邊讀是一樣的&#xff0c;編程求所有這樣的四位十進制數。    輸出格式   按從小到大的順序輸出滿足條件的…

【算法訓練】Leetcode 1295. 統計位數為偶數的數字(2020.06.09 )

1 題目 1295. 統計位數為偶數的數字 給你一個整數數組 nums&#xff0c;請你返回其中位數為 偶數 的數字的個數。 示例 1&#xff1a; 輸入&#xff1a;nums [12,345,2,6,7896] 輸出&#xff1a;2 解釋&#xff1a; 12 是 2 位數字&#xff08;位數為偶數&#xff09; 345 …

Vivado設置指定源文件進行RTL優化

像VS編譯器設置啟動項一樣&#xff0c;Vivado中&#xff0c;也有類似設計&#xff0c;可以看到&#xff0c;當前選中的是ALU&#xff0c;那么進行RTL優化的時候&#xff0c;會優化RTL的結果&#xff0c;而不是別的&#xff0c;如何改成別的&#xff1f; 在某文件上右鍵單擊選擇…

【完整流程】用VSCode替換Vivado默認編輯器

本文樓主找了很多資料&#xff0c;選出了最有用的資料&#xff0c;按照教程走&#xff0c;就可以順利搞定&#xff0c;先給出畫面 很酷很方便&#xff0c;同時還有 自動補全檢測錯誤列選自動生成仿真測試文件 等重要功能 Vivado原來的編輯器是這樣的…… 關鍵是&#xff0c…

IEDA中JavaDoc的自動生成、手動生成,以及生成html文檔

1 自動生成類的注釋 JavaDoc就是java特有的一種注釋。 1.1 配置 首先&#xff0c;IDEA點擊File-->Settings 然后Editor-->File and Code Templates-->Class 之后在這地方&#xff0c;添加一些代碼 /** * ${description} * * <p> * 創建日期&#xff1a;$…

【java】父類與子類的引用賦值關系

理清楚4個目標 父類引用&#xff08;“名”&#xff09;父類對象&#xff08;“實”&#xff09;子類引用子類對象 理清楚幾個操作 // 父類 public class parent{}// 子類 public class sun{}父類引用指向父類對象 parent p1 new parent();子類引用指向子類對象 son s1 …

IDEA自動生成 構造方法 get set方法

對于一個類&#xff0c;創建好成員變量后 右鍵單擊&#xff0c;選中Generate 然后 這幾個依次是 構造方法getsetget和set 我們可以選中一個&#xff0c;然后選中要生成的變量&#xff0c;點擊OK 這樣就可以自動生成 構成方法get方法set方法

IDEA快速修改類名和文件名

在你要修改的類名上&#xff0c;選中類名&#xff0c;然后 右鍵單擊選中Refactor選中Rename 也可以使用快捷鍵 Win用戶是Shift F6

java中 靜態方法與成員方法何時使用

靜態方法 不操作成員變量&#xff0c;可以直接調用 是用來直接對傳入的數據進行操作的 成員方法 需要操作對象的成員變量的 區別 靜態方法&#xff0c;不能操作成員變量&#xff0c;只是一個操作成員方法&#xff0c;可以操作成員變量&#xff0c;不僅僅是操作&#xff0…

通過編程解決問題的正確思路

1. 先知道我們面對一個怎樣的問題 2. 考慮這個問題在現實生活中&#xff0c;我們要用怎樣的方式去解決 3. 從現實到計算機&#xff0c;如何用編程的思路解決 4. 實現&#xff0c;編碼和測試 5. 迭代 現實問題自然語言解決方案機器語言解決方案編碼實現測試迭代

數據庫設計的核心原則 外鍵的設計 提高插入數據速度

大道至簡&#xff1a;數據庫設計的核心原則 數據庫設計&#xff0c;不得不承認&#xff0c;有很多專業化的理論知識&#xff0c;但是對于初學者來說&#xff0c;只需要大道至簡的原則就可以了。 能不重復的就不重復&#xff0c;太重復的就拆開&#xff0c;使用指定數據做識別…

MySQL提高插入數據的效率(結合JDBC)

0 解決問題最佳途徑&#xff1a;直接找官方 先說明的是&#xff0c;有問題直接去找官方文檔&#xff0c;而不應該去百度搜索&#xff0c;您很容易體驗到&#xff0c;搜索引擎很難快速找到真正對您有價值的解決方案&#xff0c;而官方文檔是最快捷的途徑。 本篇也是基于官方文…

【計算機心理學】先設計再實現 在實現中完善設計

先設計再實現 在物理學中&#xff0c;通常都是先理論證明觀點&#xff0c;再進行實踐&#xff0c;然后&#xff0c;再有世界各地的科學家根據理論進行實驗&#xff0c;以證明觀點正確。 在計算機軟件開發&#xff0c;硬件開發等&#xff0c;都講求先邏輯抽象設計&#xff0c;…

【FPGA VerilogHDL】第一次嘗試:LED燈基礎實驗

0 實驗環境 0.1 軟件環境 ISE 14.7win10vivado 2017.4 0.2 硬件設備 ISE適用的FPGA開發板&#xff1a;ALINK AX309 1 需求 能夠靈活控制4個LED燈 2 Verilog實現 timescale 1ns / 1ps // // Create Date: 14:18:20 08/08/2020 // Module Name: led // Revision…

使用ISE一鍵生成bit文件

我們知道&#xff0c;這幾個&#xff0c;在第一次做好源文件之后&#xff0c;需要一個個進行右鍵單擊-->run&#xff0c;以發現錯誤。 但是之后的調試&#xff0c;只要一點點變化&#xff0c;哪怕是注釋變化&#xff0c;都需要重新run3次&#xff0c;太麻煩了。 不過經過實…

【FPGA Verilog】實驗二:key按鍵基礎實驗

只說一下經驗和教訓 1 必須按照設計流程走 不要因為實驗簡單&#xff0c;就直接進行綜合&#xff0c;比如按照 設計編碼RTL優化仿真綜合管腳分配&#xff0c;實現下載 一定要按照這個步驟來。 2 必須先查看開發板說明文檔 開始出了一個令人困惑的問題&#xff0c;后來發現…

【Java】字符串轉換為數字:Integer的parseInt方法

Java官方文檔[1]的解釋 public static int parseInt?(String s) throws NumberFormatException Parses the string argument as a signed decimal integer. The characters in the string must all be decimal digits, except that the first character may be an ASCII minus…

在win10上使用Vmware安裝Mac OS

安裝macOS 如何在Windows上VMware上安裝macOS Catalina 10.15 做一些提示&#xff1a; 如果您在第一次啟動mac的時候&#xff0c;在出現【語言選擇】之前&#xff0c;出現了連接藍牙內容。 您可以將教程中【修改為win10 x64】那一步跳過&#xff0c;請注意&#xff0c;如果您…