diff --git a/doc/env_cn.md b/doc/env_cn.md index 7ea9279..c0d366c 100644 --- a/doc/env_cn.md +++ b/doc/env_cn.md @@ -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`。 ## 验证示例 diff --git a/test_src/uFTB-with-ftq/README.md b/test_src/uFTB-with-ftq/README.md index 18ceeb1..a0b327f 100644 --- a/test_src/uFTB-with-ftq/README.md +++ b/test_src/uFTB-with-ftq/README.md @@ -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 的预测结果。 - - - - - - - - - - - diff --git a/utils/BRTParser/README.md b/utils/BRTParser/README.md new file mode 100644 index 0000000..516ecda --- /dev/null +++ b/utils/BRTParser/README.md @@ -0,0 +1,5 @@ +# BRTParser + +分支 Trace 工具。 + +请参照 https://github.com/yaozhicheng/NEMU 编译生成模拟器仿真程序。