美文网首页
502 - 数据通路的建立

502 - 数据通路的建立

作者: 航航大魔王 | 来源:发表于2017-07-31 17:29 被阅读92次

建立数据通路的方法

基本原则

  • 根据指令需求,连接组件,建立数据通路

指令的需求

    1. 所有指令的共同需求
    1. 不同指令的不同需求

1. 所有指令的共同需求

取指令

取指部件
  • 程序计数器(PC)的内容是指令的地址
  • 用PC的内容作为地址,访问指令存储器获得指令编码

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

ProgramCounter
  • 顺序执行时
    • PC = PC + 4
  • 发生分支时
    • PC = 分支目标的地址

取指令部件和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
  • RegWr用于控制是否将ALU产生的数据写入寄存器堆
  • ALUCtr用于选择运算的类型(加减乘除,逻辑运算)
image.png

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

  • 问题1:目的寄存器是rt而非rd
  • 问题2:立即数是ALU的输入
  • 问题3:立即数只有16位

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

image.png
  • RegDst用于选择是算术运算还是逻辑运算
  • ALUSrc用于选择运算数据来源(逻辑运算是一个寄存器rd+一个32位立即数)

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

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

image.png
  • MemtoReg用于是否将ALU的运算数据存入数据存储器(Load的核心)
  • ExtOp用于选择是用零扩展还是符号扩展

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

image.png
  • MemWr用于控制写使能(Store的时候就要置0关闭)?

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

相关文章

网友评论

      本文标题:502 - 数据通路的建立

      本文链接:https://www.haomeiwen.com/subject/vxyrlxtx.html