狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

一文看懂計(jì)算機(jī)設(shè)計(jì)原理

admin
2024年3月12日 15:43 本文熱度 623
我和小宇早戀了,我們家住隔壁。




一、編碼與電路——信號(hào)的轉(zhuǎn)換




晚上父母會(huì)把手機(jī)沒收,但我們還想繼續(xù)聊天,又不敢發(fā)出聲音,于是我們想到了這個(gè)辦法...

我們把所有的中文都用燈泡的亮滅組合來表示,同時(shí)約定好每隔一秒讀取一次燈泡的狀態(tài)并記錄下來,這是我們的暗號(hào)。

:亮亮滅滅亮

:滅亮亮滅滅

:亮滅亮滅亮

:亮亮亮滅滅

這樣,我們雖然沒有了手機(jī),依然可以日以繼日地聊天,雖然效率很低,但依然很快樂。

我和小宇就這樣在不經(jīng)意間,將語(yǔ)言轉(zhuǎn)換成為了燈泡的亮滅組合,這個(gè)過程叫做編碼




二、門電路——信號(hào)的關(guān)聯(lián)




我和小宇就這樣一直秘密保持著通話,直到上了大學(xué),父母再也管不了我們用手機(jī)了。

但這么多年的小燈泡通話,使我們總覺得事情沒那么簡(jiǎn)單,于是我們開始了一些新的探索。

我們?cè)黾恿艘粋€(gè)開關(guān)。此時(shí)當(dāng)兩個(gè)開關(guān)同時(shí)閉合時(shí),燈泡才會(huì)亮。

這樣兩個(gè)開關(guān)與燈泡之間,不再是之前簡(jiǎn)單的對(duì)應(yīng)關(guān)系了,而是有了邏輯

開關(guān)的斷開與閉合分別對(duì)應(yīng)著電路的斷開與連通。而小燈泡的不亮與亮,也分別對(duì)應(yīng)著電路的斷開與連通。那這兩者就可以統(tǒng)一,不再依賴于具體的實(shí)物表現(xiàn)了。

還有,開關(guān)的連通與斷開,是主動(dòng)的。而小燈泡的連通與斷開,是被動(dòng)的,是結(jié)果。

我們把開關(guān)這里的連通與斷開稱為輸入端,把燈泡的連通與斷開稱為輸出端,并且將整個(gè)電路都封裝在一個(gè)圖形里,可以得到如下抽象:

我們決定把這種電路叫做門電路, 上面這個(gè)叫與門 

為了今后更為抽象的探索,我們將電路連通表示為數(shù)字 1,電路斷開表示為數(shù)字 0。

我們將這種表示方式稱為二進(jìn)制

輸入 A

輸入 B

輸出

0

0

0

0

1

0

1

0

0

1

1

1

慢慢地,我們發(fā)現(xiàn)了越來越多的玩法。

上面這種電路,我把他抽象成如下門電路形狀,叫做或門

之后便一發(fā)不可收拾,我和小宇設(shè)計(jì)了越來越多的門電路,我們發(fā)現(xiàn),只要是我們能想到的邏輯關(guān)系,都可以設(shè)計(jì)成對(duì)應(yīng)的門電路。




三、加法器——信號(hào)的計(jì)算




十進(jìn)制數(shù)可以轉(zhuǎn)換成二進(jìn)制數(shù),而二進(jìn)制數(shù)又可以對(duì)應(yīng)到門電路的輸入端與輸出端。

于是我和小宇有了一個(gè)大膽的想法,能不能設(shè)計(jì)一個(gè)計(jì)算加法的電路呢?

我們首先從最簡(jiǎn)單的一位二進(jìn)制數(shù)相加開始:

0+0=0;0+1=1;1+0=1;1+1=10

變成一張表格如下

加數(shù) A

加數(shù) B

加和

進(jìn)位輸出

0

0

0

0

0

1

1

0

1

0

1

0

1

1

0

1



即我們需要設(shè)計(jì)出一種電路,可以達(dá)到表中的輸入與輸出效果。


經(jīng)過不懈努力,終于發(fā)現(xiàn)這個(gè)電路可以由異或門與門兩個(gè)門電路組成。

這個(gè)裝置實(shí)現(xiàn)了二進(jìn)制的一位加法,但它并不完美,因?yàn)橹豢紤]了這兩個(gè)數(shù)的進(jìn)位輸出,但沒有考慮上一位的進(jìn)位,所以只能叫半加器

如果將前一個(gè)進(jìn)位考慮進(jìn)來,只需再多一個(gè)半加器,并且拼接一個(gè)或門即可。

此時(shí)我們已經(jīng)建立好了一個(gè)完美的一位加法器,并自豪地稱之為全加器

全加器做出來之后,無論多少位的加法器就都可以做出來了,只需將全加器逐個(gè)拼起來即可。我們嘗試做一個(gè)八位加法器

OK,大功告成,有了加法器,理論上就可以實(shí)現(xiàn)任何的數(shù)學(xué)運(yùn)算了。

因?yàn)槲覀冎莱朔梢赞D(zhuǎn)換成加法,除法可以轉(zhuǎn)換成減法,而減法又可以轉(zhuǎn)換成補(bǔ)碼的加法。現(xiàn)在我們可以自豪地稱這個(gè)部件為,算術(shù)邏輯單元 ALU

 




四、時(shí)鐘——信號(hào)的震蕩




我和小宇都非常高興,終于用電路的方式實(shí)現(xiàn)了計(jì)算功能。

但慢慢的覺得沒什么意思了,于是我們又突發(fā)奇想,設(shè)計(jì)了如下詭異的電路。

當(dāng)閉合開關(guān) A 時(shí),整個(gè)電路聯(lián)通,開關(guān) B 將會(huì)被吸下來,整個(gè)電路斷開,電磁鐵失去磁性,開關(guān) B 又會(huì)彈上去,此時(shí)電路又聯(lián)通,開關(guān) B 又被吸下來。

就這樣,開關(guān) B 不斷地快速地在開和閉之間循環(huán)進(jìn)行,而我們始終沒有去干預(yù)這個(gè)電路,因此該電路有了自反饋的特性。

由于開關(guān) B 的來回震蕩,我們將這種電路稱為振蕩器,由于它可以產(chǎn)生不斷變化的電信號(hào),就像時(shí)鐘一樣不停且規(guī)律地跑著,我們將這個(gè)裝置又稱為時(shí)鐘。它所產(chǎn)生的交替的電信號(hào)稱為時(shí)鐘信號(hào)




五、RAM——保存信號(hào)




雖然有了加法器,但是輸入的數(shù)字從哪里來?能不能先保存在某個(gè)地方呢?

我和小宇經(jīng)過多次實(shí)驗(yàn),發(fā)明了一個(gè)非常復(fù)雜的電路:


如果輸入端為 1,改變"某控制端"信號(hào)(信號(hào)由 0 變化到 1 這個(gè)瞬間),則輸出端變?yōu)?1,之后輸出端仍然保持(存儲(chǔ))著剛剛的 1。
如果輸入端為 0,改變"某控制端"信號(hào),則輸出端變?yōu)?0,之后輸出端仍然保持(存儲(chǔ))著剛剛的 0。


如果想不明白也沒關(guān)系,只要記住這個(gè)電路的設(shè)計(jì),實(shí)現(xiàn)了一位的存儲(chǔ)功能!我們叫它 1 位鎖存器

然后我們把多個(gè)鎖存器組合起來,再加上一些 3-8 譯碼器,8-1 選擇器等電路,就可以實(shí)現(xiàn)一個(gè)能保存 8 位二進(jìn)制的存儲(chǔ)器,并且可以隨機(jī)地讀寫它, 我們把它叫做 RAM,簡(jiǎn)稱為內(nèi)存

這個(gè)組件通過再次組合,可以形成 N × M 的 RAM 陣列。比如我們可以表示一個(gè) 1024 * 8 的 RAM 陣列。

這表示存儲(chǔ)容量為 1024 個(gè)單位,每個(gè)單位占 8 位。

為了更方便地表示,我們規(guī)定 1024 = 1K,8 位 = 1 字節(jié)(8 bit = 1 byte),那么我們就可以說,這個(gè) RAM 的存儲(chǔ)容量為 1K 個(gè)單位,每個(gè)單位占 1B。或者說,地址空間為 1K,存儲(chǔ)容量是 1KB。 

此時(shí)這個(gè) RAM 模塊已經(jīng)近乎完美了,我們甚至可以單獨(dú)對(duì)其進(jìn)行使用,將數(shù)據(jù)存入某個(gè)地址,將某個(gè)地址中的數(shù)據(jù)讀出。

怎么方便人操作呢?只需要將地址輸入、數(shù)據(jù)輸入、寫操作端分別接入一個(gè)控制面板,由開關(guān)來控制這些信號(hào)的輸入是 1 還是 0 即可,然后再將數(shù)據(jù)輸出接入一些燈泡方便觀察,這樣一個(gè)單獨(dú)的可以手動(dòng)操作的存儲(chǔ)裝置,就搞定啦。(下圖中有彩蛋~)

有了可讀寫的內(nèi)存,我們就可以事先把幾個(gè)數(shù)字存儲(chǔ)內(nèi)存中了,接下來,我們能否讓算術(shù)邏輯單元 ALU 自動(dòng)地讀取這個(gè)數(shù)字,進(jìn)行加法運(yùn)算呢?




六、程序——自動(dòng)化




我們先引入一個(gè)新的組件,10 位計(jì)數(shù)器,這里的 Clk 就接入我們?cè)诘谒牟糠种v的時(shí)鐘信號(hào),Clr 是清零端,具體效果下面動(dòng)圖一目了然。

計(jì)數(shù)器的輸出就是 0,1,2,3,4,5,可以當(dāng)作內(nèi)存中的地址

我們把這個(gè)計(jì)數(shù)器,以及上面講的 ALU 與 RAM 全部連在一起,嘗試實(shí)現(xiàn)一個(gè)可以累積求和的裝置。

我們想計(jì)算的是 1+2+3+4+5+6+7,   這個(gè)自動(dòng)化的計(jì)算器是這么運(yùn)行的


1、用控制面板在 RAM 的地址 0~6 處存上 1~7 這幾個(gè)數(shù)字的,在上一節(jié)已經(jīng)實(shí)現(xiàn)了。
2、當(dāng)計(jì)數(shù)器的值是 0 時(shí),數(shù)據(jù) 1 被輸出到加法器進(jìn)行計(jì)算,此時(shí)加法器 A=1,B=0,計(jì)算結(jié)果為 1,但記住鎖存器存儲(chǔ)的是上一次的加法器輸出 0,這次的計(jì)算結(jié)果要等下一次鎖存器遇到上升沿信號(hào)。
3、當(dāng)計(jì)數(shù)器的值是 1 時(shí), 數(shù)據(jù) 2 被輸入到加法器,此時(shí)鎖存器存儲(chǔ)了上一次的計(jì)算結(jié)果 1,并將這個(gè) 1 輸出給小燈泡,并同時(shí)回傳到加法器的B,所以此時(shí)加法器 A=2,B=1,計(jì)算結(jié)果為 3
4、當(dāng)計(jì)數(shù)器的值是 3 時(shí),以此類推,請(qǐng)看下圖 


我們將累加求和這個(gè)過程自動(dòng)化了!之后如果想計(jì)算累加和,只需要用控制面板事先在內(nèi)存里存好數(shù)據(jù)就可以了!是不是很方便?




七、程序指令




我們還想要更多的自動(dòng)化!

現(xiàn)在這個(gè)裝置,只能無腦地將 RAM 中的數(shù)據(jù)從頭到尾一直累加下去,無法選擇加哪個(gè)不加哪個(gè),也無法選擇什么時(shí)候停止。

比如我們 RAM 中的數(shù)據(jù)是這樣的。

地址(16 進(jìn)制)

數(shù)據(jù)(10進(jìn)制)

0x00

...

0x01

10

0x02

...

0x03

20

0x04

30

0x05

...

...

...

我們只想讓 RAM 藍(lán)色地址處的數(shù)據(jù)進(jìn)行累加,其他地方的數(shù)據(jù)忽略,并且到 RAM 0x05 處就停止,該怎么做呢?

我們可以再增加一個(gè) RAM,這個(gè) RAM 里存放的數(shù)據(jù),表示"指令"的含義!

我們先發(fā)明三種指令。


add:把 RAM 這個(gè)位置處的值進(jìn)行累加
nop:忽略此處的值(也就是什么都不做)
halt停止(禁止計(jì)數(shù)器的值加一) 


那么要想達(dá)到上述功能,相應(yīng)的這個(gè)指令 RAM 中的數(shù)據(jù)應(yīng)該是這樣的。

注意:下面指令 RAM 的地址和上面數(shù)據(jù) RAM 的地址之間有一一對(duì)應(yīng)關(guān)系!

地址

(16 進(jìn)制)

指令RAM的值

 

指令含義

0x00

nop

什么都不做

0x01

add

累加

0x02

nop

什么都不做

0x03

add

累加

0x04

add

累加

0x05

halt

停止

...

...

...

我們需要引入一個(gè)控制單元,放在如下位置。

遇到 nop 指令(0x00),那輸出就將鎖存器的 W 位禁止,不允許鎖存器寫操作,這樣累加結(jié)果就不會(huì)錄入。

再比如遇到輸入為 halt 指令(0x05),就將計(jì)數(shù)器的 EN 位禁止,不允許計(jì)數(shù)器 +1,這樣就達(dá)到了停止的效果。

此時(shí)再讓時(shí)鐘信號(hào)震蕩起來,就可以達(dá)到有選擇地求和過程,并且在指定位置懸停。那現(xiàn)在我們就讓時(shí)鐘信號(hào)震動(dòng)起來,看看這個(gè)過程吧。(此處只留關(guān)鍵組件) 

這個(gè)控制單元該怎么實(shí)現(xiàn)呢?我們知道,只要給出輸入,給出輸出,任何組件都可以造出來。本文就不再展開了。 

有了三個(gè)指令,我們知道了通過指令這種方式,配合各種復(fù)雜的控制器,即可實(shí)現(xiàn)將所有操作統(tǒng)統(tǒng)自動(dòng)化。

接下來我們需要做的,就是設(shè)計(jì)控制器,以及約定好一大堆指令,使得通過這一大堆指令的排列組合,可以實(shí)現(xiàn)任何自動(dòng)化的計(jì)算操作。 


我們將設(shè)計(jì)好的一大堆指令

稱作指令集

我們將指令排列組合后可以實(shí)現(xiàn)的功能

稱作程序

我們將指令的排列組合這個(gè)過程

稱作編程

我們將排列組合這些指令的人

稱作程序員

而我們將承載這一切的裝置,叫做什么呢?

沒錯(cuò),這個(gè)破玩意,就是


計(jì)機(jī)



后記





本文靈感來自一本計(jì)算機(jī)科普神作,《編碼 | 隱匿在計(jì)算機(jī)軟硬件背后的語(yǔ)言》,我在此向這本書致敬。
本文來自我三年前的文章 你管這破玩意叫計(jì)算機(jī),稍作修改后重新發(fā)出。三年前這本書算是我真正的計(jì)算機(jī)啟蒙書籍,當(dāng)時(shí)讀完簡(jiǎn)直醍醐灌頂,讓我對(duì)計(jì)算機(jī)的學(xué)習(xí)有了信心,才有了后面很多計(jì)算機(jī)相關(guān)的系列文章。
為了直觀理解計(jì)算機(jī)原理,后面我還親手制作了一個(gè)簡(jiǎn)易版的 CPU,詳見:如何動(dòng)手做出一個(gè) CPU
當(dāng)最底層的硬件原理不再困惑后,我繼續(xù)往上推導(dǎo),嘗試將操作系統(tǒng)的知識(shí)也像這般抽絲剝繭地理解透徹,但中途遇到了很多坎兒。好在最后終于成功了一個(gè)大型系列:操作系統(tǒng)大完結(jié)!最后這個(gè)系列又進(jìn)一步成功出版成書籍:我的第一本書出版了

來源微信公眾號(hào):無聊的閃客


該文章在 2024/3/12 17:43:45 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved