Update README

This commit is contained in:
Miical 2024-04-24 14:31:08 +08:00
parent 2e8c2c953f
commit 8a79f1de90
3 changed files with 38 additions and 48 deletions

View File

@ -98,14 +98,19 @@ make all TL=python
BPU是CPU中的一个模块单独无法运行为了对BPU中的子模块进行验证本环境提供了其所需的外围环境来驱动BPU中的各个模块。
### Fake-FTQ
### 分支 Trace 工具BRTParser
TBD
BRTParser 使我们专门为 BPU 验证所设计的能够自动抓取、解析程序指令流中的分支信息的工具,它基于香山前端的开发工具 `OracleBP`。 BRTParser 内部集成了 NEMU 模拟器可以直接运行程序并在其中抓取分支信息。BRTParser 会将抓取到的分支信息解析成一种通用的格式,方便后续的验证工作。
### 分支Trace
具体请参见 `utils` 目录下的 `BRTParser`
TBD
### FTQ 运行环境
由于单独的子预测器模块并无法运行真实的程序,更无法验证其在实际程序中的预测准确率与功能正确性。因此,我们提供了一个简易的 FTQ 环境,该环境使用了 BRTParser 生成的分支信息来生成程序指令执行流。FTQ 将会解析预测器的预测结果并与实际的分支信息进行比对从而验证预测器的准确性。另外FTQ 还会向 BPU 发出重定向信息与更新信息,使得预测器可以在 FTQ 的环境中不间断运行。
为了使一个子预测器能够正常工作,我们还模拟了 BPU 顶层模块,为子预测器提供时序控制等功能。对于非 FTB 类型的子预测器,我们还提供了一个简易的 FTB 实现,用于向子预测器结果中添加 FTB 基础预测结果信息。
目前,我们使用 FTQ 环境驱动了 uFTB 子预测器,并编写了时序精确的 uFTB 参考模型。FTQ 环境的具体实现和使用方法都可以在这个测试用例中获取,详见 `test_src/uFTB-with-ftq`
## 验证示例

View File

@ -2,9 +2,9 @@
## 介绍
项目提供了基于真实指令流的香山处理器 uFTB 分支预测器的仿真验证环境,以及时钟精确的 uFTB 参考模型,最终可给出 uFTB 的分支预测准确率。
测试用例提供了基于真实指令流的香山处理器 uFTB 分支预测器的仿真验证环境,以及时钟精确的 uFTB 参考模型,最终可给出 uFTB 的分支预测准确率。
为此,本项目为 uFTB 提供了简易的 BPU Top Wrapper以向 uFTB 提供时序控制和输入输出处理。并向 BPU Top 提供了简易的 FTQ 实现FTQ 中实例化了一个真实的程序仿真器用于生成真实指令流FTQ 会处理 BPU 产生的预测结果,并向 BPU 提供更新请求与重定向请求的执行反馈。大致的结构可参考下图:
为此,我们为 uFTB 提供了简易的 BPU Top Wrapper以向 uFTB 提供时序控制和输入输出处理。并向 BPU Top 提供了简易的 FTQ 实现FTQ 中实例化了一个真实的程序仿真器用于生成真实指令流FTQ 会处理 BPU 产生的预测结果,并向 BPU 提供更新请求与重定向请求的执行反馈。大致的结构可参考下图:
![env](README.assets/env.png)
@ -20,17 +20,23 @@
**2. 生成 BRTParser Trace 工具**
为了生成真实的指令流BRTParser 作为一个自定义的工具已经被放置在了本仓库中,但其中缺少了模拟器仿真程序,需要自行编译生成,具体步骤参见 https://github.com/yaozhicheng/NEMU
为了生成真实的指令流BRTParser 作为一个自定义的工具已经被放置在仓库根目录下的 `utils` 文件夹中,但其中缺少了模拟器仿真程序,需要自行编译生成,具体步骤参见 https://github.com/yaozhicheng/NEMU
生成编译结果 `NemuBR` 后,将其放置在 `BRTParser` 目录下,工具即可正常使用。
生成编译结果 `NemuBR` 后,将其放置在 `utils/BRTParser` 目录下,工具即可正常使用。
**3. 编译 DUT**
参照 https://github.com/XS-MLVP/env-xs-ov-00-bpu 编译 DUT将编译结果`UT_FauFTB`)放置本仓库根目录下。
在本仓库根目录下执行
```shell
make uftb TL=python
```
即可生成 DUT 编译结果,编译结果无需移动,程序会自动检索对应目录。
### 仿真验证
在本仓库根目录下执行
在本测试用例目录下执行
```shell
python uftb-env/tb.py
@ -40,38 +46,23 @@ python uftb-env/tb.py
程序运行结束后,会打印出分支预测的统计信息。
若要更改需要执行的程序,可在 `config.py` 中更改相应变量的值,仿真所需的真实程序已经放置`ready-to-run` 目录下。若要更改仿真所持续的周期数,可在 `config.py` 中更改 `MAX_CYCLE` 的值。
若要更改需要执行的程序,可在 `config.py` 中更改相应变量的值,仿真所需的真实程序已经放置仓库 `utils/ready-to-run` 目录下。若要更改仿真所持续的周期数,可在 `config.py` 中更改 `MAX_CYCLE` 的值。
## 使用说明
### 目录结构
```
uFTB-env/
├── BRTParser # BRTParser 工具,用于生成真实指令流
│   ├── __init__.py
│   ├── NemuBR.txt
│   └── NemuBR # 编译生成的模拟器仿真程序
├── LICENSE
├── README.assets
│   └── env.png
├── README.md
├── ready-to-run # 可供直接运行的真实程序
│   ├── coremark-2-iteration.bin
│   ├── linux-0xa0000.bin
│   ├── linux.bin
│   └── microbench.bin
├── uftb-env # uFTB 环境源码
│   ├── bpu_top.py # BPU Top Wrapper
│   ├── bundle.py # 定义了 DUT 相关接口
│   ├── config.py # 与 uFTB 相关的配置信息
│   ├── executor.py # 对 BRTParser 工具的封装
│   ├── ftb.py # FTB 项相关结构
│   ├── ftq.py # FTQ 实现
│   ├── tb.py # 测试用例
│   ├── uftb_model.py # uFTB 参考模型
│   └── utils.py # 相关工具函数
└── UT_FauFTB # DUT 编译结果
uftb-env/ # uFTB 环境源码
├── bpu_top.py # BPU Top Wrapper
├── bundle.py # 定义了 DUT 相关接口
├── config.py # 与 uFTB 相关的配置信息
├── executor.py # 对 BRTParser 工具的封装
├── ftb.py # FTB 项相关结构
├── ftq.py # FTQ 实现
├── tb.py # 测试用例
├── uftb_model.py # uFTB 参考模型
└── utils.py # 相关工具函数
```
### 指令执行器
@ -98,7 +89,7 @@ FTQ 的工作流程如下:
- 如果预测块指示 FTB 项 hit并且预测结果中的起始 PC 与执行器当前 PC 相同则说明本次预测有效。FTQ 会根据预测结果调用执行器,若执行过程中出现与预测结果不符的情况,则 FTQ 生成重定向请求,以供 BPU 恢复到正确状态。
3. 生成更新和重定向请求。FTQ 会使用新生成或者更新后的 FTB 项生成更新请求如果有预测错误还会生成重定向请求。最终FTQ 会将更新请求和重定向请求传递给 BPU。
在该 FTQ 实现中,仅仅根据 s1 通道的预测结果来更新 FTQ 队列,对于 s2, s3 通道的预测结果没有进行应。因此,若需要验证 s2, s3 通道的预测结果,需要对 FTQ 的该部分进行相应的修改。
在该 FTQ 实现中,仅仅根据 s1 通道的预测结果来更新 FTQ 队列,对于 s2, s3 通道的预测结果没有进行应。因此,若需要验证 s2, s3 通道的预测结果,需要对 FTQ 的该部分进行相应的修改。
### BPU Top Wrapper
@ -115,14 +106,3 @@ FTQ 的工作流程如下:
在本项目中还实现了一个 `FTBProvider` 用于提供基于 FTB 项的基础预测结果,如果需要验证非 FTB 项的预测结果,需要将 `ftb_provider_stage_enable` 中相应阶段开关打开,便可以在相应阶段添加 FTB 的预测结果。

View File

@ -0,0 +1,5 @@
# BRTParser
分支 Trace 工具。
请参照 https://github.com/yaozhicheng/NEMU 编译生成模拟器仿真程序。