1. 程式人生 > >設計一個簡易的處理器(4)--SEQ CPU的實現(2):SEQ CPU的控制邏輯與硬體實現

設計一個簡易的處理器(4)--SEQ CPU的實現(2):SEQ CPU的控制邏輯與硬體實現

接上文,本文介紹SEQ CPU的邏輯和硬體實現.著重使用HCL語言描述SEQ CPU的邏輯.

Y86/SEQ概述

————

SEQ Sequential CPU的實現,表現在指令的執行要依次經歷各個階段(Fetch->Decode->Execut->Memory->WriteBack->PC Update).每一個指令在一個時鐘週期內完成(這條指令執行的所有狀態State在時鐘上升時更新.意味著時鐘週期很長,效率很低,以後再討論).

下面先給出 SEQ的硬體結構(如下圖),然後慢慢討論各個部分的控制邏輯和硬體實現.

:

  • 藍色框:表示硬體單元.
  • 灰色框
    :表示控制邏輯(前面說過是組合邏輯).還有,你會看到New PC在這裡是一種控制邏輯,不是硬體單元.
  • 白色圓框:表示訊號標號.
  • 粗線:表示字寬(32-bit)的資料連線.
  • 細線:表示位元組寬(4 or 8 bit)的資料連線.
  • 虛線:表示位元寬(1-bit)的資料連線.

:指令執行圖是從下到上的這種設計的原因等到PIPE的實現時我們會解釋的之所以Write back階段和PC Update階段要回下來是因為他們要訪問RegisterfilePC這兩個前面階段用過的部件要注意的是雖然在語義動作中說各個可能寫狀態的階段寫狀態的動作是順序發生的.但實際上對於硬體來說,它們是同時在clockrising

的時候發生的.

HCL中的巨集

————

巨集用在HCL中表示指令、暫存器、操作符型別見下表.

取指邏輯

————

1.硬體結構


2.硬體單元(藍色框)

-程式計數器PC(本實現其實並沒有這個硬體單元,而是使用控制邏輯來完成的).

-指令暫存器.

-Split:將指令位元組分為指令和功能碼.

-Align:獲取指令中的rA, rB, valC

3.控制邏輯(灰色框)

控制邏輯是組合電路,用來產生所需要的邏輯. HCL主要就是要描述控制邏輯的.

-instr_valid:是否是有效指令.

-need_regids:指令是否有暫存器.

-need_valC:指令是否有valC.

4. HCL描述控制邏輯

boolinstr_valid = icode in { INOP, IHALT, IRRMOVL, IIRMOVL, IRMMOVL, IMRMOVL, IOPL,IJXX,  ICALL, IRET, IPUSHL, IPOPL };

boolneed_regids = icode in { IRRMOVL, IOPL, IPUSHL, IPOPL, IIRMOVL, IRMMOVL,IMRMOVL };

bool need_valC = icode in{ IIRMOVL, IRMMOVL, IMRMOVL, IJXX, ICALL };

譯碼和寫回邏輯

————

1.硬體結構

2.硬體單元(藍色框)

暫存器檔案:有四個埠.它支援同時進行兩個讀(AB)和兩個寫(在埠EM).每個埠都有一個地址連線和一個數據連線(srcA, valA; srcB, valB; dstE, valE;dstM, valE).地址連線是一個暫存器ID,如果地址埠上的值為oxF(RNONE),則表明不需要訪問暫存器.

3.控制邏輯(灰色框)

-srcA srcB:讀埠地址

-dstE dstM:寫埠地址

4. HCL描述控制邏輯

統一處理的原則:excute階段, valA儘量不參與運算,使用valB參與運算;memory階段,都是valA參與運算(為了使得pushlrmmovl統一處理).

譯碼邏輯:

int srcA= [

icode in { IRRMOVL, IRMMOVL,     IOPL, IPUSHL } : rA;  #計算

icode in { IPOPL, IRET } : RESP;                                            #訪存階段[獲取讀儲存器的有效地址]

1 : RNONE; # Don't need register

];

int srcB= [

icode in { IOPL, IRMMOVL, IMRMOVL } :rB;                  #計算

icode in { IPUSHL, IPOPL, ICALL, IRET } : RESP;               # 執行階段[%esp]

1 : RNONE;  # Don't need register

];

寫回邏輯:

int dstE = [

icode in { IRRMOVL, IIRMOVL, IOPL} :rB;  #寫回rB

icode in { IPUSHL, IPOPL, ICALL, IRET }:RESP;#涉及棧,寫回%esp

1: RNONE;  # Don't need register

];

考慮到cmovXX指令

int dstE =  [

icodein { IRRMOVL } && Cnd : rB;

icode in { IIRMOVL,IOPL} : rB;

icodein { IPUSHL, IPOPL, ICALL, IRET ) : RESP;

1: RNONE; # Don't write any register

];

int dstM =  [

icode in { IMRMOVL, IPOPL } : rA;                              #只有這兩個指令是從memory->register

1 : RNONE; # Don't write any register

];

執行

————

1.硬體結構

2.硬體單元(藍色框)

-算術/邏輯單元ALU

-CC

-cond:用於條件分支或者條件資料傳送.

3.控制邏輯(灰色框)

-ALU A

-ALU B

-Set CC

-ALU fun.

4. HCL描述控制邏輯

boolset_cc = icode in {IOPL};

int aluA= [

icode in { IRRMOVL, IOPL } : valA;

icode in { IIRMOVL, IRMMOVL,IMRMOVL} : valC;

icode in { ICALL, IPUSHL } : -4;

icode in { IRET, IPOPL }     : 4;

# Other instructions don't need ALU

];

int aluB= [

icode in { IRMMOVL, IMRMOVL, IOPL, ICALL, IPUSHL, IRET, IPOPL } :valB;

icode in { IRRMOVL, IIRMOVL ) : 0;

# Other instructions don't need ALU

];

intalufun = [

icode == IOPL : ifun;

1 : ALUADD;

];

訪存邏輯

————

1.硬體結構

2. HCL描述控制邏輯

Mem read/write邏輯: Mem read訊號和Memwrite訊號不會同時為1.

boolmem_read = icode in { IMRMOVL, IPOPL, IRET };

boolmem_write = icode in { IRMMOVL, IPUSHL, ICALL };

intmem_addr = [

icode in { IRMMOVL, IPUSHL, ICALL, IMRMOVL } : valE;      #  valE: memory write address

icode in { IPOPL, IRET } : valA;                                                  # valA: memory read address

#  Other instructions don'tneed address

];

intmem_data = [

# Value from register

icode in { IRMMOVL, IPUSHL } : valA;

# Return PC

icode == ICALL : valP;

# Default: Don't write anything

];

PC更新邏輯

————

1.硬體結構

2. HCL描述控制邏輯

intnew_pc = [

# Call. Use instruction constants

icode == ICALL : valC;

# Taken branch. Use instruction constants

icode == IJXX && Cnd : valC;

# Completion of RET instruction. Use value from stack

icode == IRET : valM;

# Default: Use incremented PC

1 : valP;

];

        (Copyright© 2011, Randal E. Bryant and David R. O'Hallaron )

reference:

相關推薦

設計一個簡易處理器(4)--SEQ CPU實現(2):SEQ CPU控制邏輯硬體實現

接上文,本文介紹SEQ CPU的邏輯和硬體實現.著重使用HCL語言描述SEQ CPU的邏輯. Y86/SEQ概述 ———— SEQ是 Sequential CPU的實現,表現在指令的執行要依次經歷各個階段(Fetch->Decode->Execut-&g

設計一個簡易處理器(6)--簡單的流水線實現PIPE-

上一篇已經介紹了SEQ+的實現,本篇介紹流水線的通用原理及其簡單的流水線實現PIPE-. SEQ/SEQ+的侷限性 ———— 通過前面幾篇文章介紹SEQ/SEQ+,不難發現SEQ/SEQ+的一些侷限性. -實際中的SEQ/SEQ+太慢, CPU的時鐘太慢,效能太差.

設計一個簡易處理器(7)--流水線的相關和冒險

PIPE-已經是一個流水線化的處理器了,但是當相近指令間存在相關時PIPE-會出現問題.後一指令引用前一指令的結果,是非常常見的,所以一個完整的處理器必須要解決這個問題. 本文探討流水線的兩種形式的相關及其冒險. 相關的兩種形式 ———— 相關有兩種形式 (1).資料相

設計一個簡易處理器(1)--定義指令集體系結構(ISA)

處理器的主要作用就是執行指令,那麼設計處理器的第一步就是要定義或者相容指令集體系結構(Instruction Set Architecture,ISA). 定義一個指令集體系結構,包括定義各種狀態元素,指令集及編碼,一組程式設計規範和異常事件處理. 傳統的指令集的設計

android 設計一個簡易的Http網路請求框架

    一.開發初衷:最近專案中需要用到版本升級這一塊,需要用到一些基本的資料請求與檔案下載功能。之前做專案都是用別人的網路框架,類似retrofit 、 okhttp、 fresco等框架,用的多了,發現這幾個網路請求框架,無非都是 按解決以下幾個問題為導向的:   1

《大話設計模式》筆記(4)——行為型模式2

int mage accept 中轉 memento font algorithm 獲得 因此 19、解釋器模式(Interpreter) 定義:給定一個語言,定義它的文法的一種表示,並定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。 UML: PS:覺得解釋器模

設計訊息中介軟體時我關心什麼?(解密電商資料一致性完整性實現,含PPT)

導讀:應對高可用及極端峰值,每個技術團隊都有自己的優秀經驗,但是這些方法遠沒有得到體系化的討論。高可用架構在 6 月 25 日舉辦了『高壓下的架構演進』專題活動,進行了閉門私董會研討及對外開放的四個專題的演講,期望能促進業界對應對峰值的方法及工具的討論,本文是去哪兒網餘昭輝介紹設計電商訊息中介軟體的

Coursera deeplearning.ai 深度學習筆記1-4-Deep Neural Networks-深度神經網路原理推導程式碼實現

在掌握了淺層神經網路演算法後,對深度神經網路進行學習。 1. 原理推導 1.1 深度神經網路表示 定義:L表示神經網路總層數,上標[l]代表第l層網路,n[l]代表第l層的節點數,a[l]

PHP實現微信退款的分析原始碼實現

* 1.微信退款到零錢要求必傳證書,需要到https://pay.weixin.qq.com 賬戶中心->賬戶設定->API安全->下載證書,然後修改程式碼中的證書路徑  * 2.該檔案需放到支付授權目錄下,可以在微信支付商戶平臺->產品中心->開發配置中設定。&nb

京東高併發搶購系統的核心邏輯架構實現

1、服務介紹 限時搶購又稱閃購,英文Flash sale,起源於法國網站Vente Privée。閃購模式即是以網際網路為媒介的B2C電子零售交易活動,以限時特賣的形式,定期定時推出國際知名品牌的商品,一般以原價1-5折的價格供專屬會員限時搶購,每次特賣時間持續5-10

Arduino-開發入門2-Arduino藍芽模組Android實現通訊

 首先show一下新入手的藍芽模組  藍芽引數特點 1.藍芽核心模組使用HC-06從模組,引出介面包括VCC,GND,TXD,RXD,預留LED狀態輸出腳,微控制器可通過該腳狀態判斷藍芽是否已經連線 2.led指示藍芽連線狀態,閃爍表示沒有藍芽連線,

[譯]C語言實現一個簡易的Hash table(4)

att urn 開放 image num pri 實現 需要 code 上一章我們解釋了Hash table中最重要的hash函數,並用偽代碼和C語言實現了一個我們自己的hash函數,hash函數中碰撞是無法避免的,當發生碰撞時我們改如何有效的處理呢?這章我們就來講解下。

設計實現一個簡易通訊錄,要求使用結構體

實現一個通訊錄;通訊錄可以用來儲存1000個人的資訊,每個人的資訊包括:姓名、性別、年齡、電話、住址提供方法:1.新增聯絡人資訊2.刪除指定聯絡人資訊3.查詢指定聯絡人資訊4.修改指定聯絡人資訊5.顯示所有聯絡人資訊6.清空所有聯絡人7.以名字排序所有聯絡人由於一般儲存都使用

一個簡易郵件群發軟件設計實現

1 需求概述 指定一批郵箱地址,使用指定的郵箱傳送指定的內容。 2 功能需求 配置檔案配置用於傳送的郵箱資訊 郵件傳送功能 日誌視窗輸出顯示 3 介面介面 郵件列表框 標題內容輸入框 傳送按鈕 日誌輸出框 4 技術選型 .Net 4.0 C# Winform 5 實現 5.1 新建專案 專案命名為

【重學Node.js 第4篇】實現一個簡易爬蟲&啟動定時任務

實現一個簡易爬蟲&啟動定時任務 課程介紹看這裡:https://www.cnblogs.com/zhangran/p/11963616.html 專案github地址:https://github.com/hellozhangran/happy-egg-server 爬蟲 目前 node.js 爬蟲工

用java實現一個簡易編譯器1-詞法解析入門

new 概念 自加 我們 sta 數字 獲得 () 操作系統 本文對應代碼下載地址為: http://download.csdn.net/detail/tyler_download/9435103 視頻地址: http://v.youku.com/v_show/id_XMT

"微信戴聖誕帽"的一個簡易實現程序

由於 找到 blog ubuntu essential 位置 mark uil build 準備安裝 由於是利用別人寫的人臉識別的一個庫,所以需要在import之前安裝好相應的環境。如果直接安裝face_recognition庫的時候就會直接提示缺少的相應的dlib庫。而d

使用 RxJS 實現一個簡易的仿 Elm 架構應用

inter bject compute 幫助 規律 returns date rgs 個人愛好 使用 RxJS 實現一個簡易的仿 Elm 架構應用

用shell寫一個簡易計算器,可以實現加、減、乘、除運算,假如腳本名字為1.sh,執行示例:./1.

a-z 依次 腳本 als 示例 內置 數位 特殊字符 使用 用shell寫一個簡易計算器,可以實現加、減、乘、除運算,假如腳本名字為1.sh,執行示例:./1.sh 1 + 2#!/bin/bash if [ $# -ne 3 ] then echo "參