【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)水口(輸入端)的閥門打開
我們再來看一個(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ù)雜的組合邏輯器件而已。
簡化來說,這就像是
- 將指令碼輸入該器件
- 該器件直接輸出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)。
接下來,我們再看看被攔在寄存器堆(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è)簡易CPU的設(shè)計(jì)。
3.1 CS 3410 Components Guide
- CS 3410 Components Guide
我們先來簡要地介紹一下我們需要使用的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.
為簡化起見,我們最開始只使用這兩個(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,而對于branch指令,我們需要先offset << 2然后與PC + 4相加,之后再>> 2,最后賦給PC,這一點(diǎn)在設(shè)計(jì)的時(shí)候要尤為注意,后面的示例中,這個(gè)地方的設(shè)計(jì)是錯(cuò)誤的,請讀者來修改。
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í)行對應(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è)最小的,最簡單的CPU,并且驗(yàn)證它的正確性,之后我們可以根據(jù)成功的經(jīng)驗(yàn),來實(shí)現(xiàn)更多的指令了。
完成了CPU的邏輯設(shè)計(jì),我們就可以按照邏輯設(shè)計(jì)進(jìn)行實(shí)現(xiàn)了,對于組合邏輯我們完全可以使用自動(dòng)生成電路功能來完成它,沒有必要手動(dòng)完成。
看示例:
這是一個(gè)極簡功能的CPU,甚至可能,它的設(shè)計(jì)是有些問題的,但是不妨礙我們真的實(shí)現(xiàn)了一個(gè)CPU,你可以參考它完成自己的CPU。
注意:我們前面提到的ROM器件中特別強(qiáng)調(diào)了地址是4的整數(shù)倍的問題,這里的設(shè)計(jì)有問題,在branch指令中并沒有移位就直接加了PC,請讀者自行學(xué)習(xí)改進(jìn)。
3.4 Verify our design using MARS MIPS simulator
現(xiàn)在,我們設(shè)計(jì)了一個(gè)簡單的CPU,現(xiàn)在需要驗(yàn)證正確性了,我們需要使用MARS模擬器,編輯一些簡單的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的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成都欢乐谷人工客服电话是多少
- 下一篇: 【汇编语言】王爽 - 内中断复习