502 - 数据通路的建立

2017-07-31  本文已影响92人  航航大魔王

建立数据通路的方法

基本原则

指令的需求

1. 所有指令的共同需求

取指令

取指部件

更新程序计数器(PC)——用于取下一条指令

ProgramCounter

取指令部件和PC整合起来就构成了Instruction Fetch Unit, IFU???

Instruction Fetch Unit, IFU

2. 不同指令的不同需求

(1)加法和减法指令的需求
R[rd] = R[rs] op R[rt]
- addu rd,rs,rt
- subu rd,rs,rt

image.png image.png

(2)逻辑运算指令的需求
R[rt] = R[rs] op ZeroExt[imm16]
ori rt,rs,imm16
对比R型指令和I型指令可知:

所以不能将算术运算部件直接作为逻辑运算部件使用,需要加以修改。修改办法:解决方案:增加两个多选器,增加一个零扩展部件。
注:在修改部件时,增加功能时也要保留原有的功能。

image.png

(3)访存指令(Load)的需求
R[rt] = Mem[R[rs]+SignExt[imm16]]
lw rt,imm16(rs)
与上一版部件相比,少了个符号扩展功能,将原有的零扩展部件增加符号扩展功能;加入数据存储器。

将16位的立即数符号扩展为 32位的数,并通过这个多选器连接到ALU的一个输入端, 而ALU的另一个输入端,则是rs所指定的寄存器的内容, 然后执行加法运算之后,获得了存储器的地址, 我们在这里就需要新增一个数据存储器, 这个存储器根据地址就可以得到对应的存储单元中的数据

image.png

(4)访存指令(Store)的需求
Store指令的地址运算方式和Load指令是一样的, 所不同的是,Store指令是将rt所指定的寄存器当中的内容存放到数据存储器当中去,所以我们要再加一条线使得寄存器堆的数据能够直接进入数据存储器。

image.png

至此,数据通路全部建立完成!

上一篇 下一篇

猜你喜欢

热点阅读