数据通路(1)--Basic Datapath
本文最后更新于:Sunday, September 27th 2020, 7:08 pm
1、Preface
计算机性能:①指令数目(编译器和指令集),②时钟周期长度(组合电路最大延时),③每条指令所需要的时钟周期数(处理器架构,指令类别,多发射超标量流水)
本篇只是一个基本的MIPS实现。
- 存储器访问指令:取字(
lw) 和存字(sw) - 算数逻辑指令:加法(
add)、减法(sub)、与运算(and)、或运算(or)和小于则设置(slt) - 分支指令:相等则分支(
beq)和跳转(j)

R指令对应算数逻辑指令。(rs, rt对应两个源操作数,rd对应目的寄存器)1
2add $t1, $t2, $t3 # $t1=$t2+$t3
slt $to, $s0, $a1 # reg $t0 = 0 if $s0 >= $a1I指令对应访存和分支指令。1
2
3
4
5sw $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;J指令对应无条件跳转1
j for2tst # jump tp for2tst2、An Overview of the Implementation
- 实现每条指令的前两步是一样的
- 程序计数器(PC)指向指令所在的存储单元,并从中取出指令。(PC是地址)
- 通过指令字段内容,选择读取一个或两个寄存器。对于取字指令,只需读一个寄存器即
rs,而其它大多数指令要求读取两个寄存器(rs,rt)。
前面两步完成后,为完成指令而进行的后续步骤则取决于具体的指令类型

- 所有指令中除了
jump,在读取寄存器后都要使用ALU。- 访存指令:address calculation
- 算术逻辑指令:operation execution
- 分支指令:comparison
- ALU之后又各不相同
- 访问Data Memory:
store指令要写入数据到data memory;load指令要从memory读数据 - 写回registers:
R指令需要把ALU计算的结果;load指令要data memory读出的数据 - 改变PC: 如果分支成立那么改变PC值,否则自增4。
- 访问Data Memory:
3、Building a Datapath
数据通路部件:一个用来操作或保存处理器中数据的单元。在MPIS实现中,数据通路部件包括
指令存储器、数据存储器、寄存器堆、ALU、加法器.
3.1、basic components



3.2、combination components


3.3、single data path
假设我们在
一个时钟周期内执行任意一条指令。那意味着每条指令不能用某个部件两次或以上。所以任何需要重复的部件都必须被复制。1、需要一个指令存储器外,还需要一个数据存储器
2、尽管有的功能单元需要复制,但在执行不同指令时,很多功能单元可以被共享(复用)

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