码迷,mamicode.com
首页 > 其他好文 > 详细

BUAA计组p6_Pipeline_复习tips

时间:2021-01-12 10:38:18      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:计组   异常   寄存器   延迟   ike   mars   计算   决定   结果   

p6

乘除模块的start

一、 乘除模块

(一)mdu要求

  1. 执行乘法的时间为5个cycle,包含写入内部的HI和LO
  2. 执行除法的时间为10个cycle,包含写入内部的HI和LO
  3. 通过有效一个cycle的start信号启动乘除法运算
  4. 通过busy输出标志反映延迟

(二)相关指令

  • mult、multu、div、divu
  • mfhi、mflo、mthi、mtlo

(三)模块设计

  • input:clk, reset, A[31:0], B[31:0], start, busy

  • output: HI[31:0], LO[31:0]

  • instr控制control_2内start==1,control_mdu[2:0]控制计算类型

  • 识别start为1,busy置1,且开始计数,计数大小由control_mdu决定取值

  • 识别到start时,计算结果始终存在两个pre寄存器内,当busy计数至目标值时转存给HI和LO

  • 注意busy和start为1时,instr_01为乘除法指令时一律阻塞

  • 同时注意乘除法指令与其他指令的冲突关系

二、指令练习

(一)计算类指令

  • madd、maddu、msub、msubu
    • 注意busy在对应乘除条件下的初始值

(二) 访存类指令

  • lhs
    • 注意与lh指令的区别:
      • 不考虑异常时,lh对于2‘b10和2‘b11同操作,对2‘b00和2‘b01同操作
      • lhs指令仅在2‘b00和2‘b10条件下写寄存器,否则不写入寄存器,即条件写
      • 解决思路:将读数据的地址低两位和instr一同流水,传给control_4;instr和addr[1:0]一同控制写使能与A3_4

(三) 跳转类指令

  1. link: _zal:条件跳转,无条件写入pc+4;但实际与mars行为一致的情况下为条件写
    link likely:_zall:条件跳转,无条件写入pc+4,条件不成立时清空延迟槽
    _zalr:条件跳转,条件写寄存器

三、条件写的冲突

(一) 跳转类条件写地址的冲突
例如_zal 将tnew设置为0时,需要考虑到如果最终没有写入,则会在过程中转发错误值

  • 解决方法1:

    • tnew设置为3
    • 在contorl_4的A3_4和GRF写使能均用branch_4特判
  • 解决方法2:(最终采用下面这种,符合全力转发的要求)

    • tnew依旧设置为0
    • 将branch_1-4导入对应的1-4级的control,每一级的写入寄存器A3用branch特判

(二) 存储类条件写数值的冲突

  • 解决方法
    • tnew设置为2(保险起见,直接给3也可)
    • 由于写入的数据在WB级才确定WD,因此将instr与写入信号一同特判写使能

BUAA计组p6_Pipeline_复习tips

标签:计组   异常   寄存器   延迟   ike   mars   计算   决定   结果   

原文地址:https://www.cnblogs.com/Happy-Huan/p/14254726.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!