0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一個(gè)個(gè)開(kāi)關(guān)竟能構(gòu)造出功能強(qiáng)大的CPU

單片機(jī)與嵌入式 ? 來(lái)源:?jiǎn)纹瑱C(jī)與嵌入式 ? 2023-06-28 17:09 ? 次閱讀

幾乎每天都會(huì)開(kāi)燈關(guān)燈,但這簡(jiǎn)單的開(kāi)關(guān)卻是組成CPU的基本單元。

分享本文,來(lái)看下怎么構(gòu)建CPU這個(gè)非0即1的開(kāi)關(guān)世界。

晶體管到門(mén)電路

上世紀(jì)出現(xiàn)了晶體管這個(gè)小而偉大的發(fā)明。

有了晶體管,也就是開(kāi)關(guān),在此基礎(chǔ)之上就可以搭建與、或、非門(mén)電路。

任何一個(gè)邏輯函數(shù)最終都可以通過(guò)與、或、非表達(dá)出來(lái)。也就是說(shuō),計(jì)算機(jī)最終可以通過(guò)簡(jiǎn)單的與、或、非門(mén)構(gòu)造出來(lái)。

與或非門(mén)實(shí)現(xiàn)計(jì)算、存儲(chǔ)電路

計(jì)算

以加法為例。

由于CPU只認(rèn)知 0 和 1,也就是二進(jìn)制,那么二進(jìn)制的加法有哪些組合呢:

0 + 0,結(jié)果為0,進(jìn)位為0

0 + 1,結(jié)果為1,進(jìn)位為0

1 + 0,結(jié)果為1,進(jìn)位為0

1 + 1,結(jié)果為0,進(jìn)位為1

注意進(jìn)位這一列,只有當(dāng)兩路輸入的值都是 1 時(shí),進(jìn)位才是 1 ,這就是與門(mén)啊!

再看下結(jié)果一列,當(dāng)兩路輸入的值不同時(shí)結(jié)果為1,輸入結(jié)果相同時(shí)結(jié)果為0,這就是異或啊!

如下圖,用一個(gè)與門(mén)和一個(gè)異或門(mén)就可以實(shí)現(xiàn)二進(jìn)制加法:

fe76ba2e-1592-11ee-962d-dac502259ad0.png

上述電路就是一個(gè)簡(jiǎn)單的加法器,加法可以用與或非門(mén)實(shí)現(xiàn)。

除了加法,我們也可以根據(jù)需要將不同的算數(shù)運(yùn)算設(shè)計(jì)出來(lái),負(fù)責(zé)計(jì)算的電路有一個(gè)統(tǒng)稱(chēng),這就是所謂的算術(shù)邏輯單元ALU(arithmetic/logic unit),是CPU 中專(zhuān)門(mén)負(fù)責(zé)運(yùn)算的模塊,本質(zhì)上和上面的簡(jiǎn)單電路沒(méi)什么區(qū)別,就是更加復(fù)雜而已。

現(xiàn)在,通過(guò)與或非門(mén)的組合我們獲得了計(jì)算能力,計(jì)算能力就是這么來(lái)的。

但,只有計(jì)算能力是不夠的,電路需要能記得住信息。

存儲(chǔ)

到目前為止,你設(shè)計(jì)的組合電路比如加法器天生是沒(méi)有辦法存儲(chǔ)信息的,它們只是簡(jiǎn)單的根據(jù)輸入得出輸出,但輸入輸出總的有個(gè)地方能夠保存起來(lái),這就是需要電路能保存信息。

電路怎么能保存信息呢?有一天一位英國(guó)物理學(xué)家,給出了這樣一個(gè)神奇電路:

fe9c2868-1592-11ee-962d-dac502259ad0.png

這是兩個(gè)與非門(mén)的組合。

比較獨(dú)特的是該電路的組合方式,一個(gè)與非門(mén)的輸出是另一個(gè)與非門(mén)的輸入。該電路的組合方式會(huì)自帶一種很有趣的特性,只要給S和R端輸入1,那么這個(gè)電路只會(huì)有兩種狀態(tài):

a端為1,此時(shí)B=0、A=1、b=0;

a端為0,此時(shí)B=1、A=0、b=1;

不會(huì)再有其他可能了,我們把a(bǔ)端的值作為電路的輸出。

此后,你把S端置為0的話(huà)(R保持為1),那么電路的輸出也就是a端永遠(yuǎn)為1,這時(shí)就可以說(shuō)我們把1存到電路中了;而如果你把R段置為0的話(huà)(S保持為1),那么此時(shí)電路的輸出也就是a端永遠(yuǎn)為0,此時(shí)我們可以說(shuō)把0存到電路中了。

就這樣,電路具備存儲(chǔ)信息的能力了。

現(xiàn)在為保存信息你需要同時(shí)設(shè)置S端和R端,但你的輸入是有一個(gè)(存儲(chǔ)一個(gè)bit位嘛),為此你對(duì)電路進(jìn)行了改造:

feb97fc6-1592-11ee-962d-dac502259ad0.png

這樣,當(dāng)D為0時(shí),整個(gè)電路保存的就是0,否則就是1。

寄存器與內(nèi)存

現(xiàn)在你的電路能存儲(chǔ)一個(gè)比特位了,想存儲(chǔ)多個(gè)比特位還不簡(jiǎn)單,復(fù)制粘貼就可以了:

fecee26c-1592-11ee-962d-dac502259ad0.png

我們管這個(gè)組合電路就叫寄存器。

如果繼續(xù)搭建更加復(fù)雜的電路以存儲(chǔ)更多信息,同時(shí)提供尋址功能,就這樣內(nèi)存也誕生了。

寄存器及內(nèi)存都離不開(kāi)上文那個(gè)簡(jiǎn)單電路,只要通電,這個(gè)電路中就保存信息,但是斷電后很顯然保存的信息就丟掉了,現(xiàn)在你應(yīng)該明白為什么內(nèi)存在斷電后就不能保存數(shù)據(jù)了吧。

構(gòu)建CPU

硬件平臺(tái)

通過(guò)上文講解知道,電路可以實(shí)現(xiàn)數(shù)據(jù)計(jì)算、信息存儲(chǔ)的通用功能。但現(xiàn)在還有一個(gè)問(wèn)題,真的有必要把所有的邏輯運(yùn)算都用與或非門(mén)實(shí)現(xiàn)出來(lái)嗎?這顯然是不現(xiàn)實(shí)的。

沒(méi)有必要為所有的計(jì)算邏輯實(shí)現(xiàn)出對(duì)應(yīng)的硬件,硬件只需要提供最通用的功能。

接下來(lái)看下硬件是怎么提供所謂的通用功能。

讓我們來(lái)思考一個(gè)問(wèn)題,CPU怎么能知道自己要去對(duì)兩個(gè)數(shù)進(jìn)行加法計(jì)算,以及哪兩個(gè)數(shù)進(jìn)行加法計(jì)算呢?

很顯然,你得告訴CPU,該怎么告訴呢?

CPU也需要機(jī)器指令告訴自己該接下來(lái)該干什么,而指令通過(guò)我們上述實(shí)現(xiàn)的組合電路來(lái)執(zhí)行。

指令集

指令集告訴我們 CPU 可以執(zhí)行什么指令,每種指令需要提供什么樣的操作數(shù)。不同類(lèi)型的CPU會(huì)有不同的指令集。

指令集中的指令其實(shí)都非常簡(jiǎn)單,畫(huà)風(fēng)大體上是這樣的:

從內(nèi)存中讀一個(gè)數(shù),地址是abc

對(duì)兩個(gè)數(shù)加和

檢查一個(gè)數(shù)是不是大于6

把這數(shù)存儲(chǔ)到內(nèi)存,地址是abc

等等

看上去很像碎碎念有沒(méi)有,這就是機(jī)器指令,我們用高級(jí)語(yǔ)言編寫(xiě)的程序,比如對(duì)一個(gè)數(shù)組進(jìn)行排序,最終都會(huì)等價(jià)轉(zhuǎn)換為上面的碎碎念指令,然后 CPU 一條一條的去執(zhí)行。

接下來(lái)看一條可能的機(jī)器指令:

feeb1d92-1592-11ee-962d-dac502259ad0.png

這條指令占據(jù)16比特,其中前四個(gè)比特告訴CPU這是加法指令,這意味著該CPU的指令集中可以包含2^4也就是16個(gè)機(jī)器指令,這四個(gè)比特位告訴CPU該做什么,剩下的bit告訴CPU該怎么做,也就是把寄存器R6和寄存器R2中的值相加然后寫(xiě)到寄存器R6中。

可以看到,機(jī)器指令是非常繁瑣的,現(xiàn)代程序員都使用高級(jí)語(yǔ)言來(lái)編寫(xiě)程序。

時(shí)鐘信號(hào)

現(xiàn)在我們的電路有了計(jì)算功能、存儲(chǔ)功能,還可以通過(guò)指令告訴該電路執(zhí)行什么操作,還有一個(gè)問(wèn)題沒(méi)有解決。

靠什么來(lái)協(xié)調(diào)或者說(shuō)靠什么來(lái)同步電路各個(gè)部分讓它們協(xié)同工作呢?

時(shí)鐘信號(hào)就像指揮家手里拿的指揮棒,指揮棒揮動(dòng)一下整個(gè)樂(lè)隊(duì)會(huì)整齊劃一的有個(gè)相應(yīng)動(dòng)作,同樣的,時(shí)鐘信號(hào)每一次電壓改變,整個(gè)電路中的各個(gè)寄存器(也就是整個(gè)電路的狀態(tài))會(huì)更新一下,這樣我們就能確保整個(gè)電路協(xié)同工作不會(huì)這里提到的問(wèn)題。

現(xiàn)在你應(yīng)該知道CPU的主頻是什么意思了吧,主頻是說(shuō)一秒鐘指揮棒揮動(dòng)了多少次,顯然主頻越高CPU在一秒內(nèi)完成的操作也就越多。

大功告成

現(xiàn)在我們有了可以完成各種計(jì)算的ALU、可以存儲(chǔ)信息的寄存器以及控制它們協(xié)同工作的時(shí)鐘信號(hào),這些統(tǒng)稱(chēng) Central Processing Unit,簡(jiǎn)稱(chēng)就是 CPU。

一個(gè)小小的開(kāi)關(guān)竟然能構(gòu)造出功能強(qiáng)大的 CPU ,這背后理論和制造工藝的突破是人類(lèi)史上的里程碑時(shí)刻,說(shuō) CPU 是智慧的結(jié)晶簡(jiǎn)直再正確不過(guò)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5355

    瀏覽量

    120534
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10873

    瀏覽量

    212022
  • 晶體管
    +關(guān)注

    關(guān)注

    77

    文章

    9701

    瀏覽量

    138352
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    AD原理圖中怎樣將個(gè)庫(kù)中的多個(gè)元件選中次性放置到原理圖中?而不用一個(gè)個(gè)放置。

    似乎只能一個(gè)個(gè)的放置,能不能多個(gè)次性放置.
    發(fā)表于 05-19 11:54

    用labview編程的頻譜分析儀,在進(jìn)行正弦信號(hào)幅頻譜顯示時(shí),為什么不是脈沖,而是一個(gè)個(gè)三角波的疊加?

    用labview編程的頻譜分析儀,在進(jìn)行正弦信號(hào)幅頻譜顯示時(shí),為什么不是脈沖,而是一個(gè)個(gè)三角波的疊加
    發(fā)表于 05-23 10:01

    看效果像是控制很多LED一個(gè)個(gè)亮起來(lái),請(qǐng)教下大家有沒(méi)有做過(guò)得或者額類(lèi)似的方案?

    `看效果像是控制很多LED一個(gè)個(gè)亮起來(lái),請(qǐng)教下大家有沒(méi)有做過(guò)得或者額類(lèi)似的方案~謝謝啦`
    發(fā)表于 05-29 11:54

    變頻串聯(lián)諧振試驗(yàn)裝置功能強(qiáng)大在哪?

    高壓耐壓試驗(yàn)裝置中,變頻串聯(lián)諧振試驗(yàn)裝置是非常理想的選擇,。由于變頻串聯(lián)諧振相比傳統(tǒng)的耐壓試驗(yàn)裝置有非常多的優(yōu)勢(shì),因此串聯(lián)諧振耐壓試驗(yàn)裝置也深受廣大電力工作者的歡迎。變頻串聯(lián)諧振耐壓試驗(yàn)裝置功能強(qiáng)大
    發(fā)表于 11-26 15:19

    如何利用DMA將數(shù)據(jù)一個(gè)個(gè)搬到USART1的DR寄存器中去呢

    如何利用DMA將數(shù)據(jù)一個(gè)個(gè)搬到USART1的DR寄存器中去呢?有哪些操作步驟?
    發(fā)表于 12-13 06:47

    分享個(gè)功能強(qiáng)大的APP藍(lán)牙調(diào)試器

    數(shù)據(jù)發(fā)送到上位機(jī),省去了串口連線(xiàn)到電腦的步驟。今天分享個(gè)功能強(qiáng)大的APP,藍(lán)牙調(diào)試器,它具備以下功能發(fā)送/接收藍(lán)牙串口的數(shù)據(jù)自定義藍(lán)牙串口 發(fā)送/接收數(shù)據(jù)包格式支持多種控件:如按鍵,
    發(fā)表于 02-22 06:03

    labview中能實(shí)現(xiàn)將一個(gè)個(gè)圓堆疊成圓柱嗎?

    labview中能實(shí)現(xiàn)將一個(gè)個(gè)圓堆疊成圓柱嗎? 類(lèi)似下圖
    發(fā)表于 05-03 15:05

    用arduino做一個(gè)功能強(qiáng)大體化萬(wàn)用表

    教你用arduino做一個(gè)功能強(qiáng)大體化萬(wàn)用表。附帶資料包含PCB設(shè)計(jì)圖、相關(guān)代碼等。你也可以簡(jiǎn)單自己制作!
    發(fā)表于 09-27 07:06

    如果所有的機(jī)器人可以互聯(lián),在未來(lái)也許你只需要一個(gè)個(gè)性化數(shù)字助手

    未來(lái),也許你需要一個(gè)個(gè)性化數(shù)字助手。 機(jī)器人在今年變得越來(lái)越火,但其實(shí)人們對(duì)機(jī)器人的開(kāi)發(fā)還處于萌芽階段。Barry Coleman認(rèn)為,為了使機(jī)器人更自然地像人類(lèi)樣執(zhí)行命令、進(jìn)行交互,對(duì)種叫做機(jī)器人群體的新方法的運(yùn)用將成為必
    發(fā)表于 12-31 02:23 ?433次閱讀

    如何用舊手機(jī)做一個(gè)個(gè)性十足的音箱?

    買(mǎi)了新手機(jī),舊手機(jī)該怎么辦?賣(mài)二手吧嫌價(jià)格低,送人吧也沒(méi)人要。反正閑著也是閑著,就把舊手機(jī)回收利用來(lái)做一個(gè)個(gè)性十足的音箱吧!
    的頭像 發(fā)表于 08-10 16:24 ?3.2w次閱讀

    個(gè)功能強(qiáng)大的三級(jí)9V FM發(fā)射器電路

    該電路是個(gè)功能強(qiáng)大的三級(jí) 9V FM 發(fā)射器 (Tx),開(kāi)放范圍可達(dá) 1 公里。它在其輸出級(jí)使用個(gè)射頻晶體管,前兩級(jí)使用兩
    發(fā)表于 07-26 17:25 ?1208次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>功能強(qiáng)大</b>的三級(jí)9V FM發(fā)射器電路

    基于功能強(qiáng)大的子域收集工具

    OneForAll 收集能力強(qiáng)大、支持子域爆破、支持子域驗(yàn)證、支持子域爬取、支持子域置換、支持子域接管、處理功能強(qiáng)大、速度極快、體驗(yàn)良好,是款集百家之長(zhǎng),功能強(qiáng)大的全面快速子域收集工
    的頭像 發(fā)表于 10-25 14:50 ?975次閱讀

    小小開(kāi)關(guān)竟能構(gòu)造出功能強(qiáng)大CPU

    幾乎每天都會(huì)開(kāi)燈關(guān)燈,但這簡(jiǎn)單的開(kāi)關(guān)卻是組成CPU的基本單元。
    的頭像 發(fā)表于 06-25 17:19 ?414次閱讀
    小小<b class='flag-5'>開(kāi)關(guān)</b><b class='flag-5'>竟能</b><b class='flag-5'>構(gòu)造出</b><b class='flag-5'>功能強(qiáng)大</b>的<b class='flag-5'>CPU</b>

    分享個(gè)非常實(shí)用且強(qiáng)大的Linux nc命令

    nc是netcat的簡(jiǎn)寫(xiě),是個(gè)功能強(qiáng)大的網(wǎng)絡(luò)工具,其功能是用于掃描與連接指定端口,有著網(wǎng)絡(luò)界的瑞士軍刀美稱(chēng)。
    的頭像 發(fā)表于 08-16 09:15 ?1.5w次閱讀
    分享<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>非常實(shí)用且<b class='flag-5'>強(qiáng)大</b>的Linux nc命令

    【干貨分享】還在傻傻的一個(gè)個(gè)調(diào)整PCB元件的絲印位號(hào)?

    針對(duì)后期元件裝配,特別是手工裝配元件,般都得出 PCB 的裝配圖,用于元件放料定位之用,這時(shí)絲印位號(hào)就顯示出其必要性了。 初學(xué)畫(huà)PCB的朋友們定有過(guò)這樣的操作,一個(gè)個(gè)手動(dòng)調(diào)整元件的絲印位號(hào),非常
    的頭像 發(fā)表于 03-05 08:40 ?1244次閱讀
    【干貨分享】還在傻傻的<b class='flag-5'>一個(gè)個(gè)</b>調(diào)整PCB元件的絲印位號(hào)?