数据通路(1)--Basic Datapath

本文最后更新于:Sunday, September 27th 2020, 7:08 pm

1、Preface

计算机性能:①指令数目(编译器和指令集),②时钟周期长度(组合电路最大延时),③每条指令所需要的时钟周期数(处理器架构,指令类别,多发射超标量流水)

本篇只是一个基本的MIPS实现。

  • 存储器访问指令:取字(lw) 和存字(sw)
  • 算数逻辑指令:加法(add)、减法(sub)、与运算(and)、或运算(or)和小于则设置(slt)
  • 分支指令:相等则分支(beq)和跳转(j)

mark

  1. R指令对应算数逻辑指令。(rs, rt对应两个源操作数,rd对应目的寄存器)

    1
    2
    add $t1, $t2, $t3 # $t1=$t2+$t3
    slt $to, $s0, $a1 # reg $t0 = 0 if $s0 >= $a1
  2. I指令对应访存和分支指令。

    1
    2
    3
    4
    5
    sw $t1, offset_value($t2) # 把$t1的值存到以$t2为基址加上16位地址偏移上去。
    # rs=$t2, rt=$t1(目标寄存器),[15:0]=offset
    lw $t1, offset_value($t2) # 把$t2为基址加上16位地址偏移所在地址的值存到t1。
    beq $t3, $zero, loop1 # if($t3==$zero) go to loop1
    # loop1是后16位。rs=$t3,rt=$zero;
  3. J指令对应无条件跳转

    1
    j for2tst				  # jump tp for2tst

    2、An Overview of the Implementation

  • 实现每条指令的前两步是一样的
    1. 程序计数器(PC)指向指令所在的存储单元,并从中取出指令。(PC是地址)
    2. 通过指令字段内容,选择读取一个或两个寄存器。对于取字指令,只需读一个寄存器即rs,而其它大多数指令要求读取两个寄存器(rsrt)。

前面两步完成后,为完成指令而进行的后续步骤则取决于具体的指令类型

mark

  1. 所有指令中除了jump,在读取寄存器后都要使用ALU。
    • 访存指令:address calculation
    • 算术逻辑指令:operation execution
    • 分支指令:comparison
  2. ALU之后又各不相同
    • 访问Data Memory: store指令要写入数据到data memory;load指令要从memory读数据
    • 写回registers: R指令需要把ALU计算的结果; load指令要data memory读出的数据
    • 改变PC: 如果分支成立那么改变PC值,否则自增4。

3、Building a Datapath

数据通路部件:一个用来操作或保存处理器中数据的单元。在MPIS实现中,数据通路部件包括指令存储器数据存储器寄存器堆ALU加法器.

3.1、basic components

mark

取指令,更新指令

mark

根据寄存器号取操作数进行ALU运算

mark

向内存读或者写数据

3.2、combination components

mark

mark

branch指令需要[15:0]左移两位并符号扩展到32位与PC相加组成新的PC

3.3、single data path

假设我们在一个时钟周期内执行任意一条指令。那意味着每条指令不能用某个部件两次或以上。所以任何需要重复的部件都必须被复制。

1、需要一个指令存储器外,还需要一个数据存储器

2、尽管有的功能单元需要复制,但在执行不同指令时,很多功能单元可以被共享(复用)

mark

复用ALU和寄存器堆

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!