4.4 逻辑运算的实现
計(jì)算機(jī)組成
4 算術(shù)邏輯單元
4.4 邏輯運(yùn)算的實(shí)現(xiàn)
ALU也就是算術(shù)邏輯單元,它能夠提供基本的算術(shù)運(yùn)算和邏輯運(yùn)算的功能。那從硬件層面上,它是如何實(shí)現(xiàn)的呢?就讓我們先從相對(duì)簡(jiǎn)單的邏輯運(yùn)算開始分析。
現(xiàn)在我們已經(jīng)掌握了門單元的功能,可以提供基本的邏輯運(yùn)算。例如這個(gè)與門就可以對(duì)兩個(gè)二進(jìn)制的輸入進(jìn)行與操作,并輸出結(jié)果。但這和計(jì)算機(jī)當(dāng)中與運(yùn)算指令所需的功能還是有差距的。例如,and rd, rs, rt,這條and指令,它的兩個(gè)源操作數(shù)都是32位的寄存器,它的目的操作數(shù)也是一個(gè)32位的寄存器。也就是說(shuō)它要同時(shí)對(duì)兩個(gè)32位的二進(jìn)制數(shù)進(jìn)行與操作運(yùn)算,并得到一個(gè)32位的運(yùn)算結(jié)果。那么怎么用與門來(lái)完成呢?
其實(shí)也很簡(jiǎn)單,我們就把32個(gè)與門并排連起來(lái),將32位的輸入分別連接到\(A_0 ... ... A_{31}\)這32個(gè)與門上。可以標(biāo)記為A0,A1一直到A31,這代表第一個(gè)操作數(shù)rs,而從B0,B1一直到B31,這代表第二個(gè)操作數(shù)rt。這32個(gè) 與門的輸出,分別記為Y0,Y1直到Y(jié)31。它們就組成了一個(gè)32位的數(shù)。在這條與運(yùn)算的指令控制下,rs所指定的寄存器的內(nèi)容會(huì)被傳送到這個(gè)端口,而rt所指向的內(nèi)容會(huì)被傳送到另一個(gè)端口。經(jīng)過這些與門之后,得到的運(yùn)算結(jié)果,會(huì)被傳送到rd所指定的寄存器當(dāng)中。這樣就完成了這條指令所要求的與運(yùn)算。
與之類似,如果我們要完成這條或運(yùn)算指令,則需要32個(gè)或門,這樣就構(gòu)成一個(gè)可以完成32位或運(yùn)算的單元。
那在ALU當(dāng)中,實(shí)際上是包含了多種不同的功能部件。包括我們剛才提到的32位的與運(yùn)算,32位的或運(yùn)算,還會(huì)有其它的邏輯運(yùn)算以及算術(shù)運(yùn)算單元。那它們是怎樣合成一個(gè)整體的呢?對(duì)于這個(gè)整體的運(yùn)算單元,它需要有一個(gè)32位的輸入,然后在運(yùn)算單元的內(nèi)部,分別連接到各個(gè)不同的運(yùn)算功能部件的A輸入端口。然后將另一個(gè)32位的輸入也在運(yùn)算單元的內(nèi)部分別連接到各個(gè)不同功能單元的B輸入端口。這樣每個(gè)功能部件都按照各自的功能完成對(duì)應(yīng)的與操作、或操作,以及其它的操作,并產(chǎn)生對(duì)應(yīng)的運(yùn)算結(jié)果。
那現(xiàn)在的問題是,我們到底需要哪個(gè)運(yùn)算結(jié)果作為輸出呢?這就還需要增加一個(gè)部件就是多選器。這里我們假定這個(gè)運(yùn)算單元當(dāng)中包含四種功能,所以我們會(huì)有四個(gè)運(yùn)算的結(jié)果,要經(jīng)過一個(gè)四選一的多選器。那樣從四個(gè)選擇當(dāng)中選出一個(gè)來(lái),我們就需要一個(gè)兩位的選擇信號(hào),當(dāng)這個(gè)選擇信號(hào)為00時(shí),在這個(gè)圖中就會(huì)選擇與運(yùn)算功能部件輸出的結(jié)果。如果它是01時(shí),就會(huì)選擇這個(gè)或運(yùn)算功能部件輸出的結(jié)果。這個(gè)多選器實(shí)際上也是由若干個(gè)門組成的。當(dāng)然如果這個(gè)運(yùn)算單元中也可能包含著更多數(shù)量功能單元,比如說(shuō)8個(gè),那么就要使用一個(gè)8選1的多選器,而運(yùn)算類型的選擇信號(hào)也要擴(kuò)大為3個(gè)bit。那好經(jīng)過這個(gè)多選器之后,我們就可以產(chǎn)生一個(gè)32位的輸出。那對(duì)于這一個(gè)完整運(yùn)算單元來(lái)說(shuō),當(dāng)我們通過運(yùn)算類型選擇信號(hào)選擇了對(duì)應(yīng)的運(yùn)算類型之后,從運(yùn)算單元的輸出端口,我們就可以看到經(jīng)過指定運(yùn)算之后產(chǎn)生的輸出。
回到之前提到過的在模型機(jī)上進(jìn)行邏輯運(yùn)算的這個(gè)例子,如果我們要執(zhí)行 and $8, $9, $10 這條指令,實(shí)際上是在控制電路的控制下,將9號(hào)和10號(hào)寄存器的內(nèi)容分別連接到ALU的兩個(gè)輸入端,這里我們需要進(jìn)行的與運(yùn)算。如果按照上一頁(yè)給出的例子,這時(shí)候控制電路給出的選擇信號(hào)應(yīng)該是00。最后控制電路還會(huì)將ALU的輸出與8號(hào)寄存器的輸入相連,這就相當(dāng)于左邊這張圖所顯示的電路的連接,最上面是由32個(gè)D觸發(fā)器組成的8號(hào)寄存器,中間是9號(hào)寄存器,然后是10號(hào)寄存器。9號(hào)、10號(hào)寄存器的Q端的輸出會(huì)被連接到ALU的兩個(gè)輸入,同時(shí)ALU的功能選擇信號(hào)輸入了與運(yùn)算所對(duì)應(yīng)的編碼。然后ALU的輸出會(huì)被連接到8號(hào)寄存器的輸入D端, 所以在某一個(gè)時(shí)鐘周期內(nèi),ALU會(huì)按照輸入的要求完成相關(guān)的運(yùn)算,并將運(yùn)算結(jié)果送到輸出信號(hào)上,輸出結(jié)果經(jīng)過連線的傳送,會(huì)送到8號(hào)寄存器的輸入端,等到下一個(gè)時(shí)鐘上升沿來(lái)臨的時(shí)候,8號(hào)寄存器就會(huì)將輸入端的信號(hào)采樣,存入到寄存器內(nèi)部,并會(huì)在輸出端表現(xiàn)出來(lái),之后的運(yùn)算如果使用8號(hào)寄存器作為輸入的話,就會(huì)使用這個(gè)新的值。
這一節(jié)我們講解了如何通過簡(jiǎn)單的門電路構(gòu)造出不同的邏輯運(yùn)算單元,而且我們還知道了如何將不同的運(yùn)算單元整合成一個(gè)完整的ALU。但是ALU當(dāng)中的算術(shù)運(yùn)算單元又是如何實(shí)現(xiàn)的呢?我們從下一節(jié)開始分析。
轉(zhuǎn)載于:https://www.cnblogs.com/kafffka/p/9261768.html
總結(jié)
以上是生活随笔為你收集整理的4.4 逻辑运算的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: source ~/.bashrc 什么
- 下一篇: 更改jenkins的默认工作空间并迁移插