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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

【计算机系统设计】实践笔记(2)数据通路构建:第一类R型指令分析(1)

發布時間:2023/11/30 windows 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【计算机系统设计】实践笔记(2)数据通路构建:第一类R型指令分析(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0 回顧

上一次實踐筆記(0)我們實現了一個最簡單的,能夠每個上升沿+4的PC。

我們最需要關注的就是器件功能的獨立性,避免內外功能混雜,同時一定要注意腦中有電路(RTL級描述的抽象電路而不是實際的門級電路,內個交給EDA工具就行)。

1 針對的指令

現在,我們分析一下R類指令,我們需要構建數據通路,而很多的R類指令是相似的,因此可以直接分析一類指令,就像所有指令都需要取指,我們就分析所有指令一樣。

那么,我們要分析哪一類指令?這取決于我們準備實現的指令有什么,我們先看看。

add addu sub subu and or xor nor slt sltu sll srl sra sllv srlv srav jr

哦是的,我們需要實現以上R類指令,那么我們來分分類吧:

  • 指令格式op rs rt rd 00000 func:
  • 算數運算指令:add addu sub subu and or xor nor
  • 置位指令:slt sltu
  • 移位指令:sllv srlv srav
  • 指令格式op 00000 rt rd shamt func:移位指令:sll srl sra
  • 指令格式op rs 00000 00000 00000 func:跳轉指令:jr
  • 我們需要注意的是,我們是按照指令格式的形式進行分類的,而不是功能,因為同樣指令格式的指令,(各階段的)執行過程是類似的,可以有類似的器件和信號。


    下面,我們來分析一下第一類指令格式:

    指令格式op rs rt rd 00000 func的分析如下:


    2 功能分析

    我們一直強調的是類似,而不是相同,因此我們先完成通用器件的分析,再針對個別特殊情況處理。

    2.1 指令格式

    指令oprsrtrdshamtfunce.g.explainoperation
    add000000rsrtrd00000100000add $1,$2,$3$1=$2+S3(rd)←(rs)+(rt); rs=$2,rt=$3,rd=$1

    我們就先看這一條add指令,它具備通用的特征,首先聲明,我們不實現add指令的異常處理機制

    我們依次分析一下各個字段

    2.2 指令識別

    CPU設計最重要的點,就是需要識別出當前執行的指令,對于該格式來說,需要識別是編碼是 op 和 func。

  • op = 6'b000_000,幾乎所有R型指令都是這樣,在我們要實現的R型指令中,全部都是op = 6'b000_000
  • 對于func,是R型指令識別的關鍵,不同的R型指令(op = 000000),func字段一定不一樣,每個func編號,對應了一個指令,對應了一種操作。
  • 2.3 指令操作

    這一類指令,shamt = 00000都是一樣的,并且并不使用該字段,可以直接忽略。

    而對于rs rt rd字段,這類指令都執行rd = rs 操作 rt。

    我們使用一種通用的表述方式:op $reg1,$reg2,$reg3,那么對應的是

  • 字段:rs = reg2,rt = reg3,rd = reg1
  • 操作:rd = rs op rt
  • 我們目前分析的這一類,都是這樣的!

    它的完整功能(RTL)描述是:

  • 取指:M[PC]; PC <- PC + 4
  • 執行:R[rd] <- R[rs] op R[rd]
  • 3 需要的器件

    之前我們知道了指令的識別操作,現在,我們看看需要什么器件來完成操作

    首先,毫無疑問是從ROM中取指(IF階段),這一點,我們上一篇完成了PC,但是還沒有設計ROM,后面再說。

    現在,假設我們取到了指令,接下來該如何處理呢?

    3.1 ID(譯碼)階段

    我們看看這個操作:R[rd] <- R[rs] op R[rd]

    毫無疑問,我們需要寄存器,是的,就是MIPS的32個內部寄存器,然后我們需要控制器,因為寄存器需要控制的,至少寫入操作需要控制,不是任何時候每條指令都能夠寫入寄存器的。

    現在,我們知道我們需要2個器件了

  • 控制器
  • 寄存器

  • 問題:為什么這兩個器件在譯碼階段?

  • 經典的流水線就是這么設計的(好吧這不是什么分析…)
  • 你可以想想,我們剛剛拿到了一串二進制信息,總得知道它是什么吧,控制器就是解析編碼用的,根據op和func的信息,來確定這是什么指令,需要什么控制信號。
  • 我們又知道,譯碼是需要時間的,不過組合邏輯執行會非常快。我們知道硬件是并行工作的,控制器執行的同時,也可以干點別的事情,我們知道MIPS大部分指令都需要寄存器組的內容,所以,我們就用指令的其他字段完成**寄存器訪問(讀)**的工作。
  • 另外,我們再探析一下,什么叫做譯碼,譯碼就是解析指令,它完成了2項內容
  • 控制器解析op和func字段,獲取控制信號
  • 寄存器使用rs、rt和rd字段,完成數據的訪問,當然,第一階段實際上只是讀取數據,沒有使用rd
  • shamt字段并沒有使用,我們當前分析的指令不需要管它,至于后面的,以后再說。
  • 劇透(可以先不看):后面我們會看見,指令的解析不僅僅在譯碼階段,也可以在其他階段,shamt可以在EX執行階段被使用,而func也可以在該階段被解析,這完全取決于設計者的意志,我們最終能夠達到正確執行指令的目標就好了。
  • 3.1.1 寄存器堆(Register Files)的設計


    我們看看這個寄存器堆的信號

  • 指令字段相關:rs rt rd
  • 通用功能:clk時鐘上升沿\下降沿(取決于設計)觸發寫入操作,rst高電平復位
  • 數據:R[rd]是待寫入的數據,是計算結果,R[rs] R[rd]是根據指令字段讀取的數據
  • 控制相關:RegWrite代表是否允許寫入數據,是來自控制器的控制信號,高電平有效
  • 圖中有一個錯誤:右邊輸出的下面的R[rd]應該是R[rt]

    3.1.2 控制器的設計

    我們的輸入信號是op和func字段,輸出是什么?是控制信號。需要什么控制信號?我們之后再說。

    我們能夠得到輸入輸出,一個純組合邏輯的電路不難設計,是的,控制器的硬件實現非常簡單,困難的是如何設計控制信號,我們后面一步步展開。
    我們先建立一個空架子。

    3.2 EX(執行)階段

    再這個操作:R[rd] <- R[rs] op R[rd],我們需要執行操作是op,那么

  • 這個操作是什么?
  • 如何識別這個操作?
  • 識別操作后,如何執行?
  • 我們依次解答一下。

    首先,這個操作是什么,取決于op和func字段,我們需要使用控制器識別操作,并且輸出相應的控制信號。

    給出了相應的控制信號,我們就知道要執行什么操作(加法,減法,還是乘法……),然后我們就需要ALU運算器完成運算。

    因此,我們需要的新器件是ALU運算器

    這就是我們的ALU了

  • 兩個輸入的數據來自于剛才從寄存器堆讀取的值
  • ALU的操作op來自于控制器輸出的**運算操作ALUop**信號
  • 輸出的值R[rd]會被寫回到寄存器堆中去
  • 現在,我們的數據通路是這樣了,其中紅色字是指令的字段。

    4 控制信號

    4.1 控制器設計

    • 輸入信號:op func
    • 輸出信號:RegWrite ALUop
    instructionopfuncALUopRegWrite
    add00000010000000001
    addu00000010000100011
    sub00000010001000101
    subu00000010001100111
    and00000010010001001
    or00000010010101011
    xor00000010011001101
    nor00000010011101111
    slt00000010101010001
    sltu00000010101110011
    sllv00000010101010101
    srlv00000000011010111
    srav00000000011111001

    其中,RegWrite高電平有效,代表能夠寫入到寄存器,再配合時鐘觸發(暫定上升沿觸發)即可向寄存器堆寫入數據。

    現在有13種操作,后面還有一些操作,因此暫時設置ALUop為4位信號(最多識別16種操作),后續如果需要再更改。

    4.2 ALU設計

    • 數據輸入:R[rs] R[rd]
    • 控制輸入:ALUop
    • 數據輸出:R[rd]
    ALUop操作
    • 操作:對應4.1中的instruction
    • ALUop:對應4.1中的ALUop

    這里就不寫了。

    5 數據線

    輸入的指令就是最重要的數據。

    6 地址線

    7 控制線

    clk時鐘信號和rst復位信號。

    8 實現

    8.1 控制器

    control_1.v

    `timescale 1ns / 1psmodule control_1(input [5:0] op,input [5:0] func,output reg RegWrite,output reg [3:0] ALUop);always @(*) beginif(op == 0)begincase (func)6'b100000: // addbeginRegWrite <= 1;ALUop <= 4'b0000;end6'b100001: // addubeginRegWrite <= 1;ALUop <= 4'b0001;end6'b100010: // subbeginRegWrite <= 1;ALUop <= 4'b0010;end6'b100011: // sububeginRegWrite <= 1;ALUop <= 4'b0011;end6'b100100: // andbeginRegWrite <= 1;ALUop <= 4'b0100;end6'b100101: // orbeginRegWrite <= 1;ALUop <= 4'b0101;end6'b100110: // xorbeginRegWrite <= 1;ALUop <= 4'b0110;end6'b100111: // norbeginRegWrite <= 1;ALUop <= 4'b0111;end6'b101010: // sltbeginRegWrite <= 1;ALUop <= 4'b1000;end6'b101011: // sltubeginRegWrite <= 1;ALUop <= 4'b1001;end6'b000100: // sllvbeginRegWrite <= 1;ALUop <= 4'b1010;end6'b000110: // srlvbeginRegWrite <= 1;ALUop <= 4'b1011;end6'b000111: // sravbeginRegWrite <= 1;ALUop <= 4'b1100;enddefault:beginRegWrite <= 0;ALUop <= 4'b1111;endendcaseendelsebeginRegWrite <= 0;ALUop <= 4'b1111;end endendmodule

    注意默認情況下的值。

    RTL優化

    功能仿真測試

    tb_control_1.v

    `timescale 1ns / 1psmodule tb_control_1(); // control_1 Parameters parameter PERIOD = 10;// control_1 Inputs reg [5:0] op = 0 ; reg [5:0] func = 0 ;// control_1 Outputs wire RegWrite ; wire [3:0] ALUop ;initial beginop = 1 ;func = 0 ;#10op = 0 ;func = 6'b100000;#10op = 0 ;func = 6'b100001;#10op = 0 ;func = 6'b100010;#10op = 0 ;func = 6'b000111;#10op = 0 ;func = 6'b111111; endcontrol_1 u_control_1 (.op ( op [5:0] ),.func ( func [5:0] ),.RegWrite ( RegWrite ),.ALUop ( ALUop [3:0] ));endmodule

    是的,控制器非常簡單,2個輸入,2個輸出,真值表都有了,非常容易不是嗎?


    8.2以及之后的內容,在下一篇文章。

    【計算機系統設計】實踐筆記(2)數據通路構建:第一類R型指令分析(2)

    總結

    以上是生活随笔為你收集整理的【计算机系统设计】实践笔记(2)数据通路构建:第一类R型指令分析(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。