forked from XS-MLVP/UnityChipForXiangShan
Compare commits
18 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
011a3985bb | |
|
|
e7a5e95c87 | |
|
|
e86bf6e181 | |
|
|
9bd42b3d2e | |
|
|
ea906beb2a | |
|
|
d61cfb9175 | |
|
|
53d18603d1 | |
|
|
57384969f4 | |
|
|
25821d0a3f | |
|
|
f92ac11eda | |
|
|
cc4b25d02c | |
|
|
bfa1d4e0f1 | |
|
|
b94b405bd3 | |
|
|
1dd04947cf | |
|
|
486864e5a5 | |
|
|
5555469d36 | |
|
|
5f47d09896 | |
|
|
2685270eff |
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: FTQ顶层
|
title: FTQ顶层
|
||||||
linkTitle: FTQ顶层
|
linkTitle: 01_FTQ顶层
|
||||||
weight: 12
|
weight: 12
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -14,7 +14,7 @@ weight: 12
|
||||||
- **fromBackend:接受后端执行结果和commit信号的接口(CtrlToFtqIO)**
|
- **fromBackend:接受后端执行结果和commit信号的接口(CtrlToFtqIO)**
|
||||||
- **toBpu:向BPU发送训练信息和重定向信息的接口(FtqToBpuIO)**
|
- **toBpu:向BPU发送训练信息和重定向信息的接口(FtqToBpuIO)**
|
||||||
- **toIfu:向IFU发送取值目标和重定向信息的接口(FtqToIfuIO)**
|
- **toIfu:向IFU发送取值目标和重定向信息的接口(FtqToIfuIO)**
|
||||||
- toICache:向ICache发送取值目标的接口(FtqToICacheIO)
|
- toICache:向ICache发送取值目标的接口(FtqToICacheIO)
|
||||||
- **toBackend:向后端发送取值目标的接口(FtqToCtrlIO)**
|
- **toBackend:向后端发送取值目标的接口(FtqToCtrlIO)**
|
||||||
- toPrefetch:向Prefetch发送取值目标的接口(FtqToPrefetchIO)
|
- toPrefetch:向Prefetch发送取值目标的接口(FtqToPrefetchIO)
|
||||||
- mmio
|
- mmio
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
---
|
---
|
||||||
title: FTQ子队列
|
title: FTQ子队列
|
||||||
linkTitle: FTQ子队列
|
linkTitle: 02_FTQ子队列
|
||||||
weight: 12
|
weight: 12
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
# FTQ子队列
|
|
||||||
## 文档概述
|
## 文档概述
|
||||||
|
***请注意:从本篇开始,就涉及待验证的功能点和测试点了***
|
||||||
|
|
||||||
在之前的介绍中,我们采用FTQ项这个术语描述描述FTQ队列中的每一个元素,实际上,这只是一种便于抽象的说法。
|
在之前的介绍中,我们采用FTQ项这个术语描述描述FTQ队列中的每一个元素,实际上,这只是一种便于抽象的说法。
|
||||||
|
|
||||||
实际上的FTQ队列,是由好多个子队列共同构成的,一些子队列维护一类信息,另一些子队列维护另一类信息,相同ftqIdx索引的子队列信息共同构成一个完整的FTQ项。
|
实际上的FTQ队列,是由好多个子队列共同构成的,一些子队列维护一类信息,另一些子队列维护另一类信息,相同ftqIdx索引的子队列信息共同构成一个完整的FTQ项。
|
||||||
|
|
@ -16,9 +16,10 @@ weight: 12
|
||||||
下面来介绍一些FTQ的主要子队列,以及它们内部存储的数据结构。此外,FTQ还有一些存储中间状态的更小的队列
|
下面来介绍一些FTQ的主要子队列,以及它们内部存储的数据结构。此外,FTQ还有一些存储中间状态的更小的队列
|
||||||
## 术语说明
|
## 术语说明
|
||||||
|
|
||||||
| 名称 | 定义 |
|
| 名称 | 定义 |
|
||||||
| --- | --- |
|
| -------------------------------------------------------- | ------------------------------------------------------ |
|
||||||
| 暂无 | 暂无 |
|
| [FTB项](https://open-verify.cc/xs-bpu/docs/ports/00_ftb/) | 分支预测结果的基本组成项,包含对预测块中分支指令和跳转指令的预测 |
|
||||||
|
| 取指目标 | 一个预测块内包含的所有指令PC,当然,它不是直接发送所有PC,而是发送部分信号,接收方可由该信号推出所有PC |
|
||||||
|
|
||||||
## 子模块列表
|
## 子模块列表
|
||||||
|
|
||||||
|
|
@ -255,7 +256,7 @@ ftq_redirect_mem存储的表项。继承自SpeculativeInfo,存储RAS预测器
|
||||||
| 5\.2 | FTQ_META_1R_SRAM | READ | 向多端口中输入ren,raddr决定是否读以及读取地址,从rdata读取 |
|
| 5\.2 | FTQ_META_1R_SRAM | READ | 向多端口中输入ren,raddr决定是否读以及读取地址,从rdata读取 |
|
||||||
|
|
||||||
## 附录
|
## 附录
|
||||||
***虽然列在附录,但实际上这段内容依然十分重要,请一定要查看。***
|
***虽然列在附录,但实际上这段内容依然十分重要,当你需要的时候请一定要查看。***
|
||||||
### 其余状态子队列
|
### 其余状态子队列
|
||||||
上述存储结构是FTQ中比较核心的存储结构,实际上,还有一些子队列用来存储一些状态信息,也同样都是存储ftqsize个(64)元素。主要有以下:
|
上述存储结构是FTQ中比较核心的存储结构,实际上,还有一些子队列用来存储一些状态信息,也同样都是存储ftqsize个(64)元素。主要有以下:
|
||||||
|
|
||||||
|
|
@ -265,6 +266,8 @@ update_target:记录每个FTQ项的跳转目标,跳转目标有两种,一
|
||||||
|
|
||||||
写入时机:上一个周期的bpu_in_fire有效的时候,或者说相对于bpu_in_fire有效时延迟一个周期写入。
|
写入时机:上一个周期的bpu_in_fire有效的时候,或者说相对于bpu_in_fire有效时延迟一个周期写入。
|
||||||
|
|
||||||
|
newest_entry_ptr,newest_entry_target:这几个内部信号,表明我们当前最新的有效FTQ项。BPU新的写入,重定向等等都会对最新FTQ项进行新的安排,在相应的文档中,对其生成方式做具体的描述。
|
||||||
|
|
||||||
cfiIndex_vec:记录每个FTQ项的发生跳转的指令cfi(control flow instruction)指令在其分支预测块中的位置
|
cfiIndex_vec:记录每个FTQ项的发生跳转的指令cfi(control flow instruction)指令在其分支预测块中的位置
|
||||||
写入时机:相对于bpu_in_fire有效时延迟一个周期写入。
|
写入时机:相对于bpu_in_fire有效时延迟一个周期写入。
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,9 @@
|
||||||
---
|
---
|
||||||
title: FTQ接收BPU分支预测结果
|
title: FTQ接收BPU分支预测结果
|
||||||
linkTitle: FTQ接收BPU分支预测结果
|
linkTitle: 03_FTQ接收BPU分支预测结果
|
||||||
weight: 12
|
weight: 12
|
||||||
---
|
---
|
||||||
|
|
||||||
# FTQ接收BPU分支预测结果
|
|
||||||
|
|
||||||
## 文档概述
|
## 文档概述
|
||||||
|
|
||||||
BPU会将分支预测结果和meta数据发给FTQ。
|
BPU会将分支预测结果和meta数据发给FTQ。
|
||||||
|
|
@ -22,7 +20,7 @@ BPU会将分支预测结果和meta数据发给FTQ。
|
||||||
| RAS (Return Address Stack) | 返回地址堆 |
|
| RAS (Return Address Stack) | 返回地址堆 |
|
||||||
| FTQ Entry | FTQ队列中的单个表项 |
|
| FTQ Entry | FTQ队列中的单个表项 |
|
||||||
|
|
||||||
## 模块功能说明 。
|
## 模块功能说明
|
||||||
|
|
||||||
### 1. 新的预测块进队条件
|
### 1. 新的预测块进队条件
|
||||||
#### **1.1 成功接收数据**
|
#### **1.1 成功接收数据**
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,9 @@
|
||||||
---
|
---
|
||||||
title: FTQ向IFU发送取指目标
|
title: FTQ向IFU发送取指目标
|
||||||
linkTitle: FTQ向IFU发送取指目标
|
linkTitle: 04_FTQ向IFU发送取指目标
|
||||||
weight: 12
|
weight: 12
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
# FTQ向IFU发送取指目标
|
|
||||||
|
|
||||||
## 文档概述
|
## 文档概述
|
||||||
IFU需要取FTQ中的项进行取指令操作,同时也会简单地对指令进行解析,并写回错误的指令
|
IFU需要取FTQ中的项进行取指令操作,同时也会简单地对指令进行解析,并写回错误的指令
|
||||||
FTQ发送给IFU的信号同时也需发送给ICache一份,ICache是指令缓存,帮助快速读取指令。
|
FTQ发送给IFU的信号同时也需发送给ICache一份,ICache是指令缓存,帮助快速读取指令。
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,9 @@
|
||||||
---
|
---
|
||||||
title: IFU向FTQ写回预译码信息
|
title: IFU向FTQ写回预译码信息
|
||||||
linkTitle: IFU向FTQ写回预译码信息
|
linkTitle: 05_IFU向FTQ写回预译码信息
|
||||||
weight: 12
|
weight: 12
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
# IFU向FTQ写回预译码信息
|
|
||||||
|
|
||||||
## 文档概述
|
## 文档概述
|
||||||
|
|
||||||
IFU获取来自BPU的预测信息之后,会执行预译码,并将FTQ项写回FTQ中去。我们会比对FTQ中原BPU预测项和预译码的结果,判断是否有预测错误
|
IFU获取来自BPU的预测信息之后,会执行预译码,并将FTQ项写回FTQ中去。我们会比对FTQ中原BPU预测项和预译码的结果,判断是否有预测错误
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,9 @@
|
||||||
---
|
---
|
||||||
title: FTQ接收后端重定向
|
title: FTQ接收后端重定向
|
||||||
linkTitle: FTQ接收后端重定向
|
linkTitle: 06_FTQ接收后端重定向
|
||||||
weight: 12
|
weight: 12
|
||||||
---
|
---
|
||||||
|
|
||||||
# FTQ接收后端重定向
|
|
||||||
|
|
||||||
## 文档概述
|
## 文档概述
|
||||||
|
|
||||||
FTQ重定向信息有两个来源,分别是IFU 和 后端。两者的 重定向接口大致相似,但重定向的过程有一定区别。
|
FTQ重定向信息有两个来源,分别是IFU 和 后端。两者的 重定向接口大致相似,但重定向的过程有一定区别。
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,9 @@
|
||||||
---
|
---
|
||||||
title: FTQ接收IFU重定向
|
title: FTQ接收IFU重定向
|
||||||
linkTitle: FTQ接收IFU重定向
|
linkTitle: 07_FTQ接收IFU重定向
|
||||||
weight: 12
|
weight: 12
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
# FTQ接收IFU重定向
|
|
||||||
|
|
||||||
## 文档概述
|
## 文档概述
|
||||||
除了后端,IFU也会发送重定向相关消息,和后端不同,IFU的重定向信息来自于预译码写回信息。相同的是,它们都是通过BranchPredictionRedirect的接口传递重定向信息。
|
除了后端,IFU也会发送重定向相关消息,和后端不同,IFU的重定向信息来自于预译码写回信息。相同的是,它们都是通过BranchPredictionRedirect的接口传递重定向信息。
|
||||||
## 术语说明
|
## 术语说明
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,9 @@
|
||||||
---
|
---
|
||||||
title: FTQ向后端发送取指目标
|
title: FTQ向后端发送取指目标
|
||||||
linkTitle: FTQ向后端发送取指目标
|
linkTitle: 08_FTQ向后端发送取指目标
|
||||||
weight: 12
|
weight: 12
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
# FTQ向后端发送取指目标
|
|
||||||
|
|
||||||
## 文档概述
|
## 文档概述
|
||||||
|
|
||||||
pc取值目标会发给后端pc mem让他自己进行存储,之后从自己的pc mem取指,此外,最新的FTQ项和对应的跳转目标也会发给后端。
|
pc取值目标会发给后端pc mem让他自己进行存储,之后从自己的pc mem取指,此外,最新的FTQ项和对应的跳转目标也会发给后端。
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,9 @@
|
||||||
---
|
---
|
||||||
title: 执行单元修改FTQ状态队列
|
title: 执行单元修改FTQ状态队列
|
||||||
linkTitle: 执行单元修改FTQ状态队列
|
linkTitle: 09_执行单元修改FTQ状态队列
|
||||||
weight: 12
|
weight: 12
|
||||||
---
|
---
|
||||||
|
|
||||||
# 执行单元修改FTQ状态队列
|
|
||||||
|
|
||||||
## 文档概述
|
## 文档概述
|
||||||
后端的写回信息,包括重定向信息和更新信息,实际上都是执行之后,由实际执行单元根据结果发回的
|
后端的写回信息,包括重定向信息和更新信息,实际上都是执行之后,由实际执行单元根据结果发回的
|
||||||
## 术语说明
|
## 术语说明
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,9 @@
|
||||||
---
|
---
|
||||||
title: 冲刷指针和状态队列
|
title: 冲刷指针和状态队列
|
||||||
linkTitle: 冲刷指针和状态队列
|
linkTitle: 10_冲刷指针和状态队列
|
||||||
weight: 12
|
weight: 12
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
# 冲刷FTQ指针和状态队列
|
|
||||||
|
|
||||||
## 文档概述
|
## 文档概述
|
||||||
之前讲了,后端和IFU重定向写回会修改一些状态队列。此外,FtqPtr也是一种比较重要的维护信息。由后端或者IFU引起的重定向,需要恢复各种类型用来索引FTQ项的FtqPtr。而当重定向是由后端发起的时候,还要修改提交状态队列,说明指令已经被执行。
|
之前讲了,后端和IFU重定向写回会修改一些状态队列。此外,FtqPtr也是一种比较重要的维护信息。由后端或者IFU引起的重定向,需要恢复各种类型用来索引FTQ项的FtqPtr。而当重定向是由后端发起的时候,还要修改提交状态队列,说明指令已经被执行。
|
||||||
## 术语说明
|
## 术语说明
|
||||||
|
|
@ -70,7 +67,7 @@ rob_commits的valid字段有效,可以根据其中信息对指令进行提交
|
||||||
| fromIfu | 接收IFU重定向 |
|
| fromIfu | 接收IFU重定向 |
|
||||||
| icacheFlush | 将flush信号转发到icache |
|
| icacheFlush | 将flush信号转发到icache |
|
||||||
| toIFU | 将后端重定向转发到IFU |
|
| toIFU | 将后端重定向转发到IFU |
|
||||||
所有顶层信号均在FTQ顶层IO一文中详述。
|
|
||||||
## 测试点总表
|
## 测试点总表
|
||||||
|
|
||||||
| 序号 | 功能名称 | 测试点名称 | 描述 |
|
| 序号 | 功能名称 | 测试点名称 | 描述 |
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,9 @@
|
||||||
---
|
---
|
||||||
title: FTQ向BPU发送更新与重定向信息
|
title: FTQ向BPU发送更新与重定向信息
|
||||||
linkTitle: FTQ向BPU发送更新与重定向信息
|
linkTitle: 11_FTQ向BPU发送更新与重定向信息
|
||||||
weight: 12
|
weight: 12
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
# FTQ向BPU发送更新与重定向信息
|
|
||||||
|
|
||||||
## 文档概述
|
## 文档概述
|
||||||
|
|
||||||
FTQ将已提交指令的更新信息发往BPU进行训练,同时转发重定向信息。
|
FTQ将已提交指令的更新信息发往BPU进行训练,同时转发重定向信息。
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
---
|
---
|
||||||
title: FTQ概述
|
title: FTQ概述
|
||||||
linkTitle: FTQ概述
|
linkTitle: FTQ
|
||||||
weight: 12
|
weight: 12
|
||||||
---
|
---
|
||||||
|
|
||||||
*下文(包括所有的FTQ文档)中会提到一些关于BPU和IFU的相关知识,详情需要去查看对应的文档: *
|
下文(包括所有的FTQ文档)中会提到一些关于BPU和IFU的相关知识,详情需要去查看对应的文档:
|
||||||
- [BPU文档链接](https://open-verify.cc/xs-bpu/docs/)
|
- [BPU文档链接](https://open-verify.cc/xs-bpu/docs/)
|
||||||
- [IFU文档链接](https://open-verify.cc/UnityChipForXiangShan/docs/98_ut/01_frontend/01_ifu/)
|
- [IFU文档链接](https://open-verify.cc/UnityChipForXiangShan/docs/98_ut/01_frontend/01_ifu/)
|
||||||
|
|
||||||
|
|
@ -67,7 +67,4 @@ FTQ的全名叫取值目标队列,队列中的一个项叫做FTQ项,BPU写
|
||||||
|
|
||||||
## 循环队列
|
## 循环队列
|
||||||
FTQ队列实际上是一个循环队列,所有类型的FTQ指针都是同一类型,ftqPtr的value字段用来表示索引,flag字段则用来表示循环轮数,flag只有一位,进入新的循环时flag位翻转。
|
FTQ队列实际上是一个循环队列,所有类型的FTQ指针都是同一类型,ftqPtr的value字段用来表示索引,flag字段则用来表示循环轮数,flag只有一位,进入新的循环时flag位翻转。
|
||||||
这样,我们就可以在一个有限的队列空间内不断更新新的项,以及正确进行比较,判断哪个项在队列中更靠前。
|
这样,我们就可以在一个有限的队列空间内不断更新新的项,以及正确进行比较,判断哪个项在队列中更靠前或者更靠后。
|
||||||
*在香山的代码中,设计了isAfter和isBefore的函数来比较指针大小,字面上的意思是指针在队列靠后还是在队列靠前的位置,但从取指令块来说*
|
|
||||||
### 最新项
|
|
||||||
有几个内部信号我想在这里提一下,newest_entry_ptr,newest_entry_target这几个内部信号,表明我们当前最新的有效FTQ项。BPU新的写入,重定向等等都会对最新FTQ项进行新的安排,在相应的文档中,对其生成方式做具体的描述。
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue