【 xiangshan分支预测单元结构及时序介绍】

server/2024/10/25 7:40:12/

xiangshan分支预测单元结构及时序介绍

    • 1.1 子预测器接口信号
      • 1 in
      • 2 out
      • 3 流水线控制信号
      • 4 update更新请求
      • 5 redirect重定向请求
    • 1.2 预测器接口连接
    • 1.3 分支预测单元时序介绍
      • 1.3.1 一周期无空泡预测
    • 1.3.2 预测结果重定向
    • 1.4 相关使能信号

本节主要介绍xiangshan BPU内部是如何整合子预测器的;
xiangshan BPU内部所有子预测器都被包在composer的结构中,且composer和内部所有子预测器具有相同的接口。因此BPU top层只需要关注和composer交互;
要是有时间的话,可以考虑简单学习一下chisel,就会发现子预测器和composer都是继承的相同base类;
在这里插入图片描述

BPU 顶层会为流水线提供预测所需要的信息。首先是 PC 和分支历史记录(包括全局历史和全局折叠历史),BPU_top 会和 Composer 之间连接一些流水线控制信号,最后 BPU 将外部输入的重定向请求接口和更新接口直接连接至 Composer。

1.1 子预测器接口信号

简单子预测器接口的定义:

1 in

  • s1,s2,s3这三个通道(即各自对应每个clk)的预测信息输入
    redirect_
    update_
  • s0_pc需要预测的PC
  • ghist全局历史
  • folded_hist全局历史

2 out

  • s1,s2,s3预测信息输出

3 流水线控制信号

  • s0_fire, s1_fire, s2_fire,s3_fire相应流水级的控制信号,是由ready和valid;
  • s2_redirect,s3_redirect后续流水级发现预测错误时重定向信号
  • s1_ready,s2_ready,s3_ready子预测器相应流水级是否就绪;

4 update更新请求

update更新相关信号;

5 redirect重定向请求

redirect重定向信号;

1.2 预测器接口连接

对于子预测器来说,预测器结果的连接方式是:预测结果输出是下一个预测器的输入。
注意的是:这种连接是组合电路的连接,而没有时序的影响
在这里插入图片描述

这个图我没太看懂,以s1通道为例,从输入到最后一个预测器输出,中间全都是组合电路,不受时序影响。寄存器只在S1,S2和S3通道之间存在。

1.3 分支预测单元时序介绍

1.3.1 一周期无空泡预测

在这里插入图片描述
uFTB是香山BPU子预测器中只需要一个周期便可以产生预测结果的预测器。
s0_pc在顶层送入,s1周期生效时,s1_pc保存上一周期的s0_pc;
在s1周期生效时,uFTB会接收到本周期传来的s1_fire控制使能信号,并根据s1_pc值,在本周期内生成预测结果,在预测结果中产生心的PC值;
由上图可知,BPU Top顶层拿到uFTB产生的下一个PC的值即(即target),然后送到npc_Gen(即新PC生成器)中,用于产生下一个周期的s0_pc.
因此,下一周期,uFTB获取到新的PC值,并开始新PC值预测块–target的产生。

1.3.2 预测结果重定向

在这里插入图片描述

BPU Top将s2的预测结果与上周期S1的预测结果进行比较;若s2与上一周期s1的的预测结果不同,会采信s2的结果,npc_gen将使用s2所提供的target作为新的s0_pc。

Diff 比较器通过获取 s1 周期的预测结果,与 s1 周期的预测结果进行对比产生 diff 信号,指导 npc_Gen 进行下一条 pc 的生成。与此同时,diff信号指示了 s1 阶段的预测结果发生错误,可直接用于 BPU 发往 FTQ 的预测结果中 s2 通道的预测结果重定向通道,指导 FTQ 覆盖之前的预测结果。

Diff信号还会通过 s2_redirect 接口送往每个子预测器,指导子预测器进行状态的更新。除此之外,当 s2 预测结果重定向发生时,说明 s1 通道预测结果已经发生错误,s2 阶段不能继续进行预测,需及时将子预测器流水线控制信号 s2_fire 置为无效,并等待纠正后的预测结果流入。
S3预测结果的重定向和这样类似。

只有当三个阶段的预测信息都错误时,才会产生有外部重定向请求发生,此时 npc_Gen 会接收到来自重定向请求中的 pc 地址。由于当重定向请求发生时,我们认为三阶段均预测错误,因此需要将三个阶段的 fire 信号全部置为无效,然后 npc_Gen 采用重定向请求中需要恢复的 PC,重新开始预测。

1.4 相关使能信号

由上面的diff信号比较等,可以得到以下一些信号:

  • s0_fire, s1_fire, s2_fire, s3_fire 指示每个流水级是否工作
  • s2_redirect, s3_redirect 指示是否有预测结果重定向发生
  • s1_ready, s2_ready, s3_ready 子预测器发给BPU顶层,表示相应流水级是否就绪

以上是BPU Top顶层控制信号及与内子预测器的信号联系;


http://www.ppmy.cn/server/134645.html

相关文章

Django+Vue全栈开发项目入门(一)

Vue项目搭建过程 1、使用脚手架工具搭建项目 2、准备静态资源 3、调整生成项目结构 使用脚手架工具搭建项目 网络请求库axios Axios是一个基于Promise的HTTP库,适用于浏览器和node.js环境,用于发送网络请求。 特点 跨平台性:Axios既可…

简单工厂(Simple Factory)

简单工厂(Simple Factory) 在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。 说明: 简单工厂把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪…

网络爬虫中的几种数据存储方式(中篇)

在上一篇文章中,带大家了解了文本的存储方式和json的存储方式,而这篇文章是要大家掌握其余的数据存储方式。 CSV存储文件存储 CSV,全称为 Comma-Separated Values,中文可以叫作逗号分隔值或字符分隔值,其文件以纯文本…

解决后端给前端的返回数据过大的问题(压缩)

解决后端给前端的返回数据过大的问题(压缩) 问题 后端返回数据过大导致的前端接收数据慢的问题 方案 注解方式压缩后端给前端的返回数据,注解Gzip压缩后端返回数据(前端不用做任何处理) import com.fasterxml.jack…

基于ElementPlus的Form组件封装

前言 我们在项目开发过程中遇到最多就是表单页面的开发,那么使用频率比较高的就是Form组件,无论是vue亦或者是react,我们在项目中使用到UI库都会有Form组件。多数情况下都是用到了Form组件,我们先根据UI库或者其他类似的页面直接…

自动驾驶系列—图像数据在自动驾驶中的关键角色及其实际应用场景探讨

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

微信小程序美团点餐

引言:外卖已经成为了都市人的必备,在无数个来不及(懒得)做饭的时刻拯救孤单寂寞的胃。美团外卖无疑是外卖届的领头羊,它的很多功能与设计都值得我们学习。本文将从五个方面,对美团外卖展开产品分析&#xf…

Spring Boot + Vue项目开发学习笔记2

这个笔记是在看B站视频的时候做的,所以肯定是很多直接把课程的ppt的文字直接写下来了或者把老师口述的内容写下来,目的是为了让自己遗忘某些知识点的时候能直接看笔记,应该不至于构成侵权吧,如有不妥望告知,我会删除并…