蜂鸟E203学习笔记-取指模块概述(2)

本文详细介绍了RISC-V架构中取指模块的工作原理,包括部分译码、分支预测与PC生成、请求与响应、流水线冲刷和阻塞请求。在部分译码中,关注了指令的译码信息,如分支指令类型和乘法相关指令的处理。分支预测采用静态方法,针对Bxx指令的跳转方向进行判断。PC生成则涉及多种情况的处理。请求与响应逻辑确保正确的时间发送和接收指令。流水线冲刷在预测错误时清除错误指令,阻塞请求则允许在特定事务完成后恢复取指操作。
摘要由CSDN通过智能技术生成


前言

本文取指模块概述后半部分,前半部分跳转至:取指模块概述(1)

在这里插入图片描述


1 部分译码

Minidecode中例化decode模块,使用decode部分译码功能,只需要译出IFU所需的部分指令信息。包括此指令是属于普通指令还是分支跳转指令、分支跳转指令的类型和细节。从minidecode的端口可以看出其主要完成这些功能:

  1. 判断寄存器(rs1,rs2,rd)是否被使用,并输出其索引。
  2. 判断指令长度(32 or 16)及指令类型(bjp, jal, jalr, bxx)。
  3. 若指令为乘除法相关指令,判断其是否属于back2back fusing类型,这指的是对于乘法来说,两个32位数相乘最高能得64位数,而寄存器只为32位,因此每次只能将结果的高32位或低32位存入寄存器,如果希望得到两个32位整数相乘的完整64位结果,RISC-V架构推荐使用两条连续的乘法指令“MULH[[S]U] rdh, rsl, rs2; MUL rdl, rsl,rs2”, 而对于除法如果希望同时得到两个32位整数相除的商和余数,RISC-V架构推荐使用两条连续的除法和取余指令“DIV[U] rdq, rsl, rs2; REM[U] rdr, rsl, rs2”其要点如下:
  • 两条指令的源操作数索引号和顺序必须完全相同。
  • 第一条指令的结果寄存器rdh或rdq的索引号必须不能与其rsl和rs2的索引号相等。
  • 处理器实现的微架构可以将两条指令融合(Fused)成为一条指令执行,而不是分离的两条指令,从而提高性能。
  1. 解析jalr的rs1寄存器索引和分支跳转指令bjp使用到的立即数输出至分支预测模块。

2 分支预测与PC生成

对于分支预测,此处为了实现低功耗采用较简单的静态分支预测,对于Bxx指令来说,立即数表示

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值