【Computer Organization】The Core Design Thinking of single cycle CPU
1 Overview
This section introduces someting that maybe you need to know before learning.
Note:This CPU is based on MIPS instruction set.
1.1 Tools
- Logisim
- CS 3410 Components
- MARS MIPS simulator
- Win10 or Mac OS
1.2 Courses
- 自己動(dòng)手畫CPU《計(jì)算機(jī)組織與結(jié)構(gòu)實(shí)驗(yàn)》
- 計(jì)算機(jī)硬件系統(tǒng)設(shè)計(jì)
1.3 Front Knowledge & Reference Books
- Computer Organization and Design
- Degital Logic Applications and Design
- See MIPS Run
2 Core Thinking
本小節(jié)將會(huì)介紹設(shè)計(jì)單周期CPU的核心思想和重要觀念。
注:本文討論的單周期CPU完全理想化,不考慮時(shí)間延遲問題。
2.1 基于組合邏輯的單周期CPU
我們先來談?wù)?組合邏輯器件 和 存儲(chǔ)器件
- 組合邏輯器件:就像一個(gè)兩邊開口的水管,水進(jìn)水口(輸入端)進(jìn)入,經(jīng)過水管“處理”(指組合邏輯器件的功能),從出水口(輸出端)流出,沒有任何的阻攔
- 存儲(chǔ)器件:就像兩邊都帶閥門的水管,在閘門沒有開的時(shí)候,既不能進(jìn)入,也不能出去
- 讀取:將出水口(輸出端)的閥門打開
- 寫入:將進(jìn)水口(輸入端)的閥門打開
我們?cè)賮砜匆粋€(gè)做好的單周期CPU
圖中框出的部分是存儲(chǔ)器件,其余部分全是組合邏輯器件。
紫色框的器件是指令存儲(chǔ)器,它的讀取是不受限制的,給出地址就能立即讀出,因此它的功能可以理解為一個(gè)組合邏輯。
紅色框的器件自左到右分別是PC寄存器、寄存器堆和數(shù)據(jù)存儲(chǔ)器,它們的讀取是不受限制的,但是寫入受到限制,這些確實(shí)發(fā)揮了存儲(chǔ)器件的功能。
- PC寄存器的寫入是下降沿觸發(fā),當(dāng)時(shí)鐘變化為1-->0的時(shí)候,能夠?qū)懭胄碌闹?/li>
- 寄存器堆和數(shù)據(jù)存儲(chǔ)器是上升沿觸發(fā),寫入控制信號(hào)為1且時(shí)鐘變化為1-->0的時(shí)候,能夠?qū)懭胄碌臄?shù)據(jù)
顯然,這個(gè)系統(tǒng)是一個(gè)由時(shí)鐘控制、由組合邏輯器件和存儲(chǔ)器件共同構(gòu)成的時(shí)序邏輯電路,它的工作情況是(以add指令為例):
- 當(dāng)時(shí)鐘1-->0的時(shí)候,PC寫入新的值,這個(gè)值就是指令的地址,指令由指令寄存器輸出
- 指令被譯碼,發(fā)送給中心控制器,ALU控制器,以及寄存器堆
- 寄存器堆的數(shù)據(jù)被讀出,送給ALU,ALU根據(jù)譯碼結(jié)果運(yùn)算,得到的結(jié)果被送到寄存器堆的門口,等待寫入
以上的過程,都是在時(shí)鐘信號(hào)為0的時(shí)候,以極快的速度,按順序地、無阻攔地執(zhí)行和完成的。 很明顯,這具備組合邏輯器件的特征,看起來,這就像是一個(gè)復(fù)雜的組合邏輯器件而已。
簡(jiǎn)化來說,這就像是
- 將指令碼輸入該器件
- 該器件直接輸出add的結(jié)果,該結(jié)果會(huì)被攔在寄存器堆的“入口”
當(dāng)然,如果是sw指令的話,數(shù)據(jù)一樣會(huì)被運(yùn)算出來,然后被攔在數(shù)據(jù)存儲(chǔ)器的“入口”。
以上過程,是近乎完全的組合邏輯,這也就意味著,它非常容易設(shè)計(jì),甚至,只需要給出輸入和輸出,就能被自動(dòng)地生成,現(xiàn)代計(jì)算機(jī)完全可以做到這點(diǎn)。
接下來,我們?cè)倏纯幢粩r在寄存器堆(Register Files)入口的數(shù)據(jù)吧。
- 時(shí)鐘信號(hào)變化:0-->1,如果允許寫入的信號(hào)有效,“門”就會(huì)被打開
- 之后數(shù)據(jù)就能夠被寫入進(jìn)去了
再之后,時(shí)鐘1-->0又開始重復(fù)之前的過程……
回看本小節(jié)的標(biāo)題,我像你能夠理解什么是基于組合邏輯的單周期CPU了。
2.2 信號(hào)的設(shè)計(jì):受外部約束的信號(hào) 與 自由設(shè)計(jì)的內(nèi)部信號(hào)
在CPU的設(shè)計(jì)中,我們需要指令譯碼,通過控制器生成控制信號(hào),來控制CPU各部件的工作,因此,我們就需要設(shè)計(jì)合理的控制信號(hào)。
我們來看看CPU的控制部件:
這里的CPU設(shè)計(jì)了4個(gè)控制部件
- 中心控制器
- ALU控制器
- 移位操作控制器
- jr操作控制器
我們這里只說關(guān)注兩種,了解后兩種。
分治思想
首先,我們要分清楚,必須遵循的MIPS指令集信號(hào)和自行設(shè)計(jì)的內(nèi)部信號(hào)。
我們的CPU要實(shí)現(xiàn)MIPS指令集的一部分,因此,必須遵循它的設(shè)計(jì)規(guī)范,例如
- 中心控制器的輸入端必須是MIPS的Op字段中的信號(hào)
- ALU控制器的func輸入端必須是MIPS的func字段的信號(hào)
- 移位控制器的輸入必須是MIPS的Shamt字段的信號(hào)
而我們內(nèi)部信號(hào)的設(shè)計(jì),是可以自己決定的,只要能夠正確地完成指令規(guī)定的功能就可以,當(dāng)然要考慮復(fù)雜度等問題,這點(diǎn)我們先不關(guān)注,例如:
- 中心控制器的輸出信號(hào),控制著各部件的運(yùn)行狀態(tài),必須與指令功能匹配
- ALU控制器的輸出信號(hào),決定了ALU的運(yùn)算類型,必須與指令功能匹配
- ……
這里,我們也可以將中心控制器和ALU控制器合并在一起,拆開是為了硬件設(shè)計(jì)的降低復(fù)雜度,你可以看到,我們還拆開出了移位控制器和jr控制器,事實(shí)上,都可以任意地合并,甚至ALU本身也可以集成進(jìn)去,這完全取決于你的設(shè)計(jì),這很自由,唯一可能的constraint可能就是你要讓器件邏輯清晰并且性能較好。
3 Design a CPU: A Top-Down Approach
本節(jié)介紹了設(shè)計(jì)CPU的核心方法,我們采用自頂向下和知識(shí)屏蔽的方法,快速完成一個(gè)簡(jiǎn)易CPU的設(shè)計(jì)。
3.1 CS 3410 Components Guide
- CS 3410 Components Guide
我們先來簡(jiǎn)要地介紹一下我們需要使用的CS 3410器件,在此特別感謝加利福尼亞大學(xué)提供的寶貴資源!
3.1.1 Register Files
A 32-bit wide by 32-registers deep register file. Register $0 is hard-wired to zero at all times, and writes to $0 are ignored. You can rely on register $0 always containing 0, and do not need to test that its value does not change. Inputs rA and rB are used to select register values to output on the A and B outputs. When the clock is triggered, if WE is high, the data value at input W is stored in register rW. The register file can be configured to use rising clock edges as trigger (the default), falling edge, or to be level sensitive.
3.1.2 MIPS ALU
Computes a result as follows. You do not need to test the provided ALU, and can assume it will work exactly as specified.
為簡(jiǎn)化起見,我們最開始只使用這兩個(gè)器件,其余的使用Logisim自動(dòng)的就好。
3.1.2 MIPS Program ROM
我們不使用提供的指令ROM器件,但是,有一些重要的東西需要強(qiáng)調(diào),非常重要!
An interesting aspect of the ROM is that the offset for branch instructions must be a multiple of 4, which assembles to an output offset divided by 4. This output offset follows the MIPS specification and needs to be left shifted by 2 to be added to PC. For example, given an instruction BEQ $0, $0, 4, the outputted offset in binary is 1.
我們采用的ROM是存儲(chǔ)單元是32位的,并不是8位,這也就意味著我們的指令地址是1的倍數(shù)而不是4的倍數(shù),我們的PC自動(dòng)機(jī),先PC << 2,然后+4,之后再PC << 2,而對(duì)于branch指令,我們需要先offset << 2然后與PC + 4相加,之后再>> 2,最后賦給PC,這一點(diǎn)在設(shè)計(jì)的時(shí)候要尤為注意,后面的示例中,這個(gè)地方的設(shè)計(jì)是錯(cuò)誤的,請(qǐng)讀者來修改。
3.2 The soul of CPU design:Abstract and Logic Design
CPU設(shè)計(jì)最重要的就是邏輯和抽象設(shè)計(jì),實(shí)現(xiàn)是將抽象轉(zhuǎn)化為現(xiàn)實(shí),并且反過來驗(yàn)證它,毫無疑問的是,無設(shè)計(jì),無實(shí)現(xiàn),這可不可能像你最開始學(xué)習(xí)C語言那樣,隨便想想就開始寫,一個(gè)復(fù)雜系統(tǒng)的實(shí)現(xiàn),必須:
讓我們來看看CPU的設(shè)計(jì),需要做哪些工作吧。
現(xiàn)在我們擁有的
- MIPS Instruction Set
- ALU Control Signal
我們需要設(shè)計(jì)的
- 中心控制器的信號(hào)
- ALU控制器的信號(hào)
我們只需要將這幾個(gè)控制器協(xié)調(diào)好,幫助我們完成MIPS指令的功能,就能夠讓CPU執(zhí)行對(duì)應(yīng)的指令了。
我們可以使用Excel表格來記錄,這很方便,并且很清晰,例如:
具體CPU的設(shè)計(jì),你可以在開頭提及的MOOC的CPU設(shè)計(jì)的章節(jié)進(jìn)行學(xué)習(xí)。
3.3 Implement our design: A Minimum System
讓我們先來實(shí)現(xiàn)一個(gè)最小的,最簡(jiǎn)單的CPU,并且驗(yàn)證它的正確性,之后我們可以根據(jù)成功的經(jīng)驗(yàn),來實(shí)現(xiàn)更多的指令了。
完成了CPU的邏輯設(shè)計(jì),我們就可以按照邏輯設(shè)計(jì)進(jìn)行實(shí)現(xiàn)了,對(duì)于組合邏輯我們完全可以使用自動(dòng)生成電路功能來完成它,沒有必要手動(dòng)完成。
看示例:
這是一個(gè)極簡(jiǎn)功能的CPU,甚至可能,它的設(shè)計(jì)是有些問題的,但是不妨礙我們真的實(shí)現(xiàn)了一個(gè)CPU,你可以參考它完成自己的CPU。
注意:我們前面提到的ROM器件中特別強(qiáng)調(diào)了地址是4的整數(shù)倍的問題,這里的設(shè)計(jì)有問題,在branch指令中并沒有移位就直接加了PC,請(qǐng)讀者自行學(xué)習(xí)改進(jìn)。
3.4 Verify our design using MARS MIPS simulator
現(xiàn)在,我們?cè)O(shè)計(jì)了一個(gè)簡(jiǎn)單的CPU,現(xiàn)在需要驗(yàn)證正確性了,我們需要使用MARS模擬器,編輯一些簡(jiǎn)單的MIPS指令。
然后我們將其編譯,運(yùn)行
這樣,我們就可以獲得寄存器堆和數(shù)據(jù)存儲(chǔ)器的值了。
之后我們將指令導(dǎo)出,加載到我們剛剛設(shè)計(jì)的CPU的存儲(chǔ)器中去,執(zhí)行指令,看看結(jié)果與MARS的結(jié)果是否一致,如果一致,就設(shè)計(jì)正確,不一樣就依次查找,找到出錯(cuò)的信息,然后糾正它。
在導(dǎo)出之前,我們需要設(shè)置一下MARS,將其數(shù)據(jù)段地址從0開始。
然后,我們就可以導(dǎo)出了
可以分別導(dǎo)出.text和.data,以十六進(jìn)制形式,然后加載到我們的Logsim指令存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器中去。
右鍵單擊,選擇加載即可。
4 Surprise
好吧,我想現(xiàn)在還沒有驚喜……后續(xù)我會(huì)將一些可參考的CPU上傳,這樣大家就可以參考學(xué)習(xí)了。
總結(jié)
以上是生活随笔為你收集整理的【Computer Organization】The Core Design Thinking of single cycle CPU的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成都欢乐谷人工客服电话是多少
- 下一篇: 【汇编语言】王爽 - 内中断复习