forked from OSchip/UnityChipVerification
Update README
This commit is contained in:
parent
2e8c2c953f
commit
8a79f1de90
|
|
@ -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`。
|
||||
|
||||
## 验证示例
|
||||
|
||||
|
|
|
|||
|
|
@ -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 提供更新请求与重定向请求的执行反馈。大致的结构可参考下图:
|
||||
|
||||

|
||||
|
||||
|
|
@ -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 的预测结果。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
# BRTParser
|
||||
|
||||
分支 Trace 工具。
|
||||
|
||||
请参照 https://github.com/yaozhicheng/NEMU 编译生成模拟器仿真程序。
|
||||
Loading…
Reference in New Issue