日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【Computer Organization】The Core Design Thinking of single cycle CPU

發(fā)布時(shí)間:2023/11/30 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Computer Organization】The Core Design Thinking of single cycle CPU 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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),必須:

  • 先有現(xiàn)實(shí)世界的需求
  • 再有抽象的邏輯設(shè)計(jì)
  • 再進(jìn)行計(jì)算機(jī)世界的實(shí)現(xiàn)
  • 反復(fù)迭代上述3個(gè)過程
  • 讓我們來看看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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。