diff --git a/Makefile b/Makefile index 9f5676b..31718b4 100644 --- a/Makefile +++ b/Makefile @@ -49,7 +49,7 @@ check_dut: $(MAKE) dut DUTS="$$DUT_NAME"; \ fi; \ else \ - echo "No DUT mapping found for target: $$t, skipping..." >&2; \ + echo "No mapping found for target: $$t in dir_map.f, skipping check" >&2; \ fi; \ done; \ fi @@ -61,7 +61,7 @@ dut: rtl for d in $(PROCESSED_DUTS); do \ dir=$$(awk -F' --> ' -v dut="$$d" '$$1 == dut {print $$2; exit}' dir_map.f); \ if [ -z "$$dir" ]; then \ - echo "No mapping found for '$$d' in dir_map.f, skipping deletion" >&2; \ + echo "No mapping found for DUT: $$d in dir_map.f, skipping deletion" >&2; \ continue; \ fi; \ echo "Cleaning dut/$$dir"; \ diff --git a/dir_map.f b/dir_map.f index 0a99ac0..ad851e2 100644 --- a/dir_map.f +++ b/dir_map.f @@ -6,7 +6,7 @@ frontend_ifu_frontend_trigger --> FrontendTrigger --> ut_frontend/ifu/frontend_t frontend_ifu_pred_checker --> PredChecker --> ut_frontend/ifu/pred_checker frontend_ifu_predecode --> PreDecode --> ut_frontend/ifu/predecode frontend_ifu_rvc_expander --> RVCExpander --> ut_frontend/ifu/rvc_expander -frontend_ifu_top --> NewIFU --> +frontend_ifu_top --> NewIFU --> ut_frontend/ifu/ifu_top frontend_itlb --> TLB --> ut_frontend/itlb/classical_version frontend_itlb --> TLB --> ut_frontend/itlb/toffee_version frontend_tlb_fa --> TLBFA --> ut_frontend/itlb/submodules/TLBFA diff --git a/documents/content/zh-cn/docs/01_verfiy_env.md b/documents/content/zh-cn/docs/01_verfiy_env.md index f817f92..42331a1 100644 --- a/documents/content/zh-cn/docs/01_verfiy_env.md +++ b/documents/content/zh-cn/docs/01_verfiy_env.md @@ -12,7 +12,6 @@ weight: 13 1. Linux操作系统。建议WSL2下安装Ubuntu22.04。 1. Python。建议Python3.11。 1. picker。按照[快速开始](https://open-verify.cc/mlvp/docs/quick-start/installer/)中的提示安装最新版本。 -1. toffee。将在后面自动安装。也可按照[快速开始](https://open-verify.cc/mlvp/docs/mlvp/quick-start/)中的提示手动安装最新版本。 1. lcov。用于后续test阶段报告生成。使用包管理器即可下载:`sudo apt install lcov` **环境配置完成**后,clone仓库: diff --git a/documents/content/zh-cn/docs/98_ut/01_frontend/01_ifu/03_ifu_rvc_exp.md b/documents/content/zh-cn/docs/98_ut/01_frontend/01_ifu/03_ifu_rvc_exp.md index 9aed3a9..0332414 100644 --- a/documents/content/zh-cn/docs/98_ut/01_frontend/01_ifu/03_ifu_rvc_exp.md +++ b/documents/content/zh-cn/docs/98_ut/01_frontend/01_ifu/03_ifu_rvc_exp.md @@ -26,6 +26,13 @@ RVI指令永远判断为合法。 对于RVC指令的判定,详细内容参阅20240411的RISCV手册的26\.8节表格列出的指令条件。 +## 常量说明 + +| 常量名 | 常量值 | 解释 | +| ---- | ---- | ---- | +| XLEN | 64 | 通用寄存器位宽,决定指令扩展时使用rv32还是rv64还是rv128 | +| fLen | 64 | 香山支持d扩展,故为64 | + ## RVCExpander接口说明 ### 输入接口 @@ -292,6 +299,8 @@ addi的格式形如:\| imm\[11\:0\] \| rs1 \| 000 \| rd \| 0010011 \| lui指令的格式形如: \| imm[31:12] \| rd \| 0110111 \| +当立即数为0时,这一字段reserved + 当rd为0时,为hint,也可当作cli进行译码。 当rd为2时,为addi16sp指令: diff --git a/documents/content/zh-cn/docs/98_ut/01_frontend/01_ifu/_index.md b/documents/content/zh-cn/docs/98_ut/01_frontend/01_ifu/_index.md index 4d2416f..fcc8cb8 100644 --- a/documents/content/zh-cn/docs/98_ut/01_frontend/01_ifu/_index.md +++ b/documents/content/zh-cn/docs/98_ut/01_frontend/01_ifu/_index.md @@ -4,7 +4,7 @@ linkTitle: IFU weight: 12 --- -**本文档参考[香山IFU设计文档](https://github.com/OpenXiangShan/XiangShan-Design-Doc/blob/master/docs/frontend/IFU/IFU.md)写成** +**本文档参考[香山IFU设计文档](https://github.com/OpenXiangShan/XiangShan-Design-Doc/blob/master/docs/frontend/IFU/index.md)写成** 本文档撰写的内容截至[c670557] diff --git a/documents/content/zh-cn/docs/98_ut/01_frontend/02_itlb/01_env.md b/documents/content/zh-cn/docs/98_ut/01_frontend/02_itlb/01_env.md index 79ea053..f536661 100644 --- a/documents/content/zh-cn/docs/98_ut/01_frontend/02_itlb/01_env.md +++ b/documents/content/zh-cn/docs/98_ut/01_frontend/02_itlb/01_env.md @@ -4,11 +4,11 @@ linkTitle: 环境配置 weight: 12 --- -## 推荐使用WSL2+Ubuntu22.04+GTKWave +## WSL2+Ubuntu22.04+GTKWave(Windows用户推荐使用) -我们推荐Windows10/11用户通过WSL2进行开发,在此给出通过此方法进行环境配置的教程集锦,仅供参考。如环境安装过程中出现任何问题,欢迎在QQ群(群号:976081653)中提出,我们将尽力帮助解决。此页面将收集大家提出的所有环境配置相关问题并提供解决方案,欢迎随时向我们提问! +我们推荐 Windows10/11 用户通过 WSL2 进行开发,在此给出通过此方法进行环境配置的教程集锦,仅供参考。如环境安装过程中出现任何问题,欢迎在QQ群(群号:976081653)中提出,我们将尽力帮助解决。此页面将收集大家提出的所有环境配置相关问题并提供解决方案,欢迎随时向我们提问! -## 1、在Windows下安装WSL2(Ubuntu22.04) +### 1、在 Windows 下安装 WSL2(Ubuntu22.04) 参考资源: @@ -16,25 +16,83 @@ weight: 12 --- 其它资源:[安装WSL2和Ubuntu22.04版本](https://blog.csdn.net/HHHBan/article/details/126843786) -## 2、打开WSL,换源 +### 2、打开 WSL,换源 推荐使用清华源:[清华大学开源软件镜像站-Ubuntu软件仓库](https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/) -## 3、配置验证环境 +### 3、配置验证环境 -请参照[开放验证平台学习资源-快速开始-搭建验证环境](https://open-verify.cc/mlvp/docs/quick-start/installer/)配置picker环境。 - -## 4、使用 GTKWave - -使用[重庆大学硬件综合设计实验文档-Windows原生GTKWave](https://co.ccslab.cn/tips/win-gtkwave/)给出的方法,可以通过在WSL中输入 `gtkwave.exe wave.fst` 打开在Windows下安装的GTKWave。请注意,gtkwave在使用中需要进入fst文件所在文件夹,否则会出现无法 -initialize的情况。 +请参照[开放验证平台学习资源-快速开始-搭建验证环境](https://open-verify.cc/mlvp/docs/quick-start/installer/)配置环境。 +以下是示例方法: ```bash -cd out -gtkwave.exe {test_name}.fst -cd .. +# 基本工具包 +cd ~ && sudo apt-get update +sudo apt-get install -y build-essential cmake git wget curl lcov autoconf flex bison libgoogle-perftools-dev gcc python3.11 python3.11-dev python3.11-distutils python3-pip python-is-python3 +rm -rf /var/lib/apt/lists/* +sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1 +curl -sS https://bootstrap.pypa.io/get-pip.py | python3.11 +# verilator +git clone https://github.com/verilator/verilator.git +cd verilator +git checkout v4.218 # 4.218为最低需求版本,可自行查看并选择新版本 +autoconf && ./configure && make -j$(nproc) && make install +cd .. && rm -rf verilator +# verible +curl -sS https://github.com/chipsalliance/verible/releases/download/v0.0-3946-g851d3ff4/verible-v0.0-3946-g851d3ff4-linux-static-x86_64.tar.gz -o /tmp/ +tar -zxvf /tmp/verible-v0.0-3946-g851d3ff4-linux-static-x86_64.tar.gz -C /tmp/ +copy /tmp/verible-v0.0-3946-g851d3ff4/bin/verible-* /usr/local/bin/ +sudo chmod +x /usr/local/bin/verible-* +rm /tmp/verible-* +# pcre2 +curl -sS https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.45/pcre2-10.45.tar.gz -o /tmp/ +tar -zxvf /tmp/pcre2-10.45.tar.gz -C /tmp/ +cd /tmp/pcre2-10.45 +./configure --prefix=/usr/local && make -j$(nproc) && make install +rm -rf /tmp/pcre2* && cd ~ +# swig +# 注意不要使用 apt install swig,将会下载不符合最低要求的版本 4.0.2 +curl -sS http://prdownloads.sourceforge.net/swig/swig-4.3.0.tar.gz -o /tmp/ +tar -zxvf /tmp/swig-4.3.0.tar.gz -C /tmp/ +cd /tmp/swig-4.3.0 +./configure --prefix=/usr/local && make -j$(nproc) && make install +rm -rf /tmp/swig* && cd ~ +# 更新本地包 +apt-get update && apt-get -y upgrade +# picker +git clone https://github.com/XS-MLVP/picker.git --depth=1 +cd picker +make init && make && make install +cd .. && rm -rf picker +# UnityChipForXiangShan +git clone https://github.com/XS-MLVP/UnityChipForXiangShan.git +cd UnityChipForXiangShan +pip3 install --no-cache-dir -r requirements.txt ``` -## 5、使用VSCode插件Live Server查看验证报告 +### 4、使用 GTKWave 查看波形文件 + +使用[重庆大学硬件综合设计实验文档-Windows原生GTKWave](https://co.ccslab.cn/tips/win-gtkwave/)给出的方法,可以通过在WSL中输入 `gtkwave.exe wave.fst` 打开在 Windows 下安装的 GTKWave。请注意,gtkwave在使用中需要进入 fst 文件所在文件夹,否则会出现无法 +initialize 的情况。 + +```bash +gtkwave.exe /out/{test_name}.fst +``` + +### 5、使用 VSCode 插件 Live Server 查看验证报告 成功安装插件Live Server后,打开文件列表,定位到 `/out/report/2025*-itlb-doc-*/index.html` 右键并选择 `Open With Live Server`,之后在浏览器中打开提示的端口(默认为`//localhost:5500`)即可。 + +## docker一键部署方案(MAC用户可用) + +我们提供了 MAC 可用的 docker 环境,已在 Docker Hub 发布,名称为 `unitychip-env`。安装 Docker Desktop 后在命令行使用以下命令即可获取并打开开发环境。需下载约 500MB 的镜像,展开后约占用 1GB 空间。 + +```bash +docker search unitychip-env +docker pull dingjunbi/unitychip-env && docker run unitychip-env +cd UnityChipForXiangShan && git pull +``` + +[Docker Hub使用文档](https://docs.docker.com/docker-hub/) + +[Docker:docker 拉取镜像及查看pull下来的image在哪里](https://blog.csdn.net/sj349781478/article/details/105267887/) \ No newline at end of file diff --git a/documents/content/zh-cn/docs/98_ut/01_frontend/02_itlb/_index.md b/documents/content/zh-cn/docs/98_ut/01_frontend/02_itlb/_index.md index bb5a32e..bc38f06 100644 --- a/documents/content/zh-cn/docs/98_ut/01_frontend/02_itlb/_index.md +++ b/documents/content/zh-cn/docs/98_ut/01_frontend/02_itlb/_index.md @@ -58,8 +58,8 @@ TLB 应当正常接收来自 IFU 与 ICache 的取指令请求,查找自身页 | No. | 名称 | 说明 | |--------|-------------------|------------------------| -| 1.1 | 接收来自 IFU 请求(requestor0、1) | ITLB 根据请求查找自身缓存 TLBuffer,返回 hit/miss 结果 | -| 1.2 | 接收来自 ICache 请求(requestor2) | 注意此处为阻塞式访问,每次访问后若 miss 应当 reset 后再次访问 | +| 1.1 | 接收来自 ICache 请求(requestor0、1) | ITLB 根据请求查找自身缓存 TLBuffer,返回 hit/miss 结果 | +| 1.2 | 接收来自 IFU 请求(requestor2) | 注意此处为阻塞式访问,每次访问后若 miss 应当 reset 后再次访问 | | 1.3 | 接收条件判断(requestor0、1) | valid 信号 | | 1.4 | 接受条件判断(requestor2) | valid-ready 信号 | diff --git a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/01_TopIO.md b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/01_TopIO.md index 0f29394..599dd9f 100644 --- a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/01_TopIO.md +++ b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/01_TopIO.md @@ -1,6 +1,6 @@ --- title: FTQ顶层 -linkTitle: FTQ顶层 +linkTitle: 01_FTQ顶层 weight: 12 --- @@ -14,7 +14,7 @@ weight: 12 - **fromBackend:接受后端执行结果和commit信号的接口(CtrlToFtqIO)** - **toBpu:向BPU发送训练信息和重定向信息的接口(FtqToBpuIO)** - **toIfu:向IFU发送取值目标和重定向信息的接口(FtqToIfuIO)** -- toICache:向ICache发送取值目标的接口(FtqToICacheIO) +- toICache:向ICache发送取值目标的接口(FtqToICacheIO) - **toBackend:向后端发送取值目标的接口(FtqToCtrlIO)** - toPrefetch:向Prefetch发送取值目标的接口(FtqToPrefetchIO) - mmio diff --git a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/02_SubQueue.md b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/02_SubQueue.md index bacce10..f54bd41 100644 --- a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/02_SubQueue.md +++ b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/02_SubQueue.md @@ -1,12 +1,12 @@ --- title: FTQ子队列 -linkTitle: FTQ子队列 +linkTitle: 02_FTQ子队列 weight: 12 --- - -# FTQ子队列 ## 文档概述 +***请注意:从本篇开始,就涉及待验证的功能点和测试点了*** + 在之前的介绍中,我们采用FTQ项这个术语描述描述FTQ队列中的每一个元素,实际上,这只是一种便于抽象的说法。 实际上的FTQ队列,是由好多个子队列共同构成的,一些子队列维护一类信息,另一些子队列维护另一类信息,相同ftqIdx索引的子队列信息共同构成一个完整的FTQ项。 @@ -16,9 +16,10 @@ weight: 12 下面来介绍一些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读取 | ## 附录 -***虽然列在附录,但实际上这段内容依然十分重要,请一定要查看。*** +***虽然列在附录,但实际上这段内容依然十分重要,当你需要的时候请一定要查看。*** ### 其余状态子队列 上述存储结构是FTQ中比较核心的存储结构,实际上,还有一些子队列用来存储一些状态信息,也同样都是存储ftqsize个(64)元素。主要有以下: @@ -265,6 +266,8 @@ update_target:记录每个FTQ项的跳转目标,跳转目标有两种,一 写入时机:上一个周期的bpu_in_fire有效的时候,或者说相对于bpu_in_fire有效时延迟一个周期写入。 +newest_entry_ptr,newest_entry_target:这几个内部信号,表明我们当前最新的有效FTQ项。BPU新的写入,重定向等等都会对最新FTQ项进行新的安排,在相应的文档中,对其生成方式做具体的描述。 + cfiIndex_vec:记录每个FTQ项的发生跳转的指令cfi(control flow instruction)指令在其分支预测块中的位置 写入时机:相对于bpu_in_fire有效时延迟一个周期写入。 diff --git a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/03_EnqFromBPU.md b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/03_EnqFromBPU.md index 0bcb53a..2244741 100644 --- a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/03_EnqFromBPU.md +++ b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/03_EnqFromBPU.md @@ -1,11 +1,9 @@ --- title: FTQ接收BPU分支预测结果 -linkTitle: FTQ接收BPU分支预测结果 +linkTitle: 03_FTQ接收BPU分支预测结果 weight: 12 --- -# FTQ接收BPU分支预测结果 - ## 文档概述 BPU会将分支预测结果和meta数据发给FTQ。 @@ -22,7 +20,7 @@ BPU会将分支预测结果和meta数据发给FTQ。 | RAS (Return Address Stack) | 返回地址堆 | | FTQ Entry | FTQ队列中的单个表项 | -## 模块功能说明 。 +## 模块功能说明 ### 1. 新的预测块进队条件 #### **1.1 成功接收数据** diff --git a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/04_ToIFU.md b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/04_ToIFU.md index fb843bb..7228c16 100644 --- a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/04_ToIFU.md +++ b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/04_ToIFU.md @@ -1,12 +1,9 @@ --- title: FTQ向IFU发送取指目标 -linkTitle: FTQ向IFU发送取指目标 +linkTitle: 04_FTQ向IFU发送取指目标 weight: 12 --- - -# FTQ向IFU发送取指目标 - ## 文档概述 IFU需要取FTQ中的项进行取指令操作,同时也会简单地对指令进行解析,并写回错误的指令 FTQ发送给IFU的信号同时也需发送给ICache一份,ICache是指令缓存,帮助快速读取指令。 diff --git a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/05_WbFromIFU.md b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/05_WbFromIFU.md index 1365d41..7f0c403 100644 --- a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/05_WbFromIFU.md +++ b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/05_WbFromIFU.md @@ -1,12 +1,9 @@ --- title: IFU向FTQ写回预译码信息 -linkTitle: IFU向FTQ写回预译码信息 +linkTitle: 05_IFU向FTQ写回预译码信息 weight: 12 --- - -# IFU向FTQ写回预译码信息 - ## 文档概述 IFU获取来自BPU的预测信息之后,会执行预译码,并将FTQ项写回FTQ中去。我们会比对FTQ中原BPU预测项和预译码的结果,判断是否有预测错误 diff --git a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/06_ RedirectFromBackend.md b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/06_ RedirectFromBackend.md index 438a656..80c12f8 100644 --- a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/06_ RedirectFromBackend.md +++ b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/06_ RedirectFromBackend.md @@ -1,11 +1,9 @@ --- title: FTQ接收后端重定向 -linkTitle: FTQ接收后端重定向 +linkTitle: 06_FTQ接收后端重定向 weight: 12 --- -# FTQ接收后端重定向 - ## 文档概述 FTQ重定向信息有两个来源,分别是IFU 和 后端。两者的 重定向接口大致相似,但重定向的过程有一定区别。 diff --git a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/07_RedirectFromIFU.md b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/07_RedirectFromIFU.md index 5cb0645..422a6bf 100644 --- a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/07_RedirectFromIFU.md +++ b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/07_RedirectFromIFU.md @@ -1,12 +1,9 @@ --- title: FTQ接收IFU重定向 -linkTitle: FTQ接收IFU重定向 +linkTitle: 07_FTQ接收IFU重定向 weight: 12 --- - -# FTQ接收IFU重定向 - ## 文档概述 除了后端,IFU也会发送重定向相关消息,和后端不同,IFU的重定向信息来自于预译码写回信息。相同的是,它们都是通过BranchPredictionRedirect的接口传递重定向信息。 ## 术语说明 diff --git a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/08_ToBackend.md b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/08_ToBackend.md index dc753ee..f088e9f 100644 --- a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/08_ToBackend.md +++ b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/08_ToBackend.md @@ -1,12 +1,9 @@ --- title: FTQ向后端发送取指目标 -linkTitle: FTQ向后端发送取指目标 +linkTitle: 08_FTQ向后端发送取指目标 weight: 12 --- - -# FTQ向后端发送取指目标 - ## 文档概述 pc取值目标会发给后端pc mem让他自己进行存储,之后从自己的pc mem取指,此外,最新的FTQ项和对应的跳转目标也会发给后端。 diff --git a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/09_WbFromExu.md b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/09_WbFromExu.md index 276a618..c470475 100644 --- a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/09_WbFromExu.md +++ b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/09_WbFromExu.md @@ -1,11 +1,9 @@ --- title: 执行单元修改FTQ状态队列 -linkTitle: 执行单元修改FTQ状态队列 +linkTitle: 09_执行单元修改FTQ状态队列 weight: 12 --- -# 执行单元修改FTQ状态队列 - ## 文档概述 后端的写回信息,包括重定向信息和更新信息,实际上都是执行之后,由实际执行单元根据结果发回的 ## 术语说明 diff --git a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/10_FlushPtrAndStateQueue.md b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/10_FlushPtrAndStateQueue.md index 99dcc29..643dfc5 100644 --- a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/10_FlushPtrAndStateQueue.md +++ b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/10_FlushPtrAndStateQueue.md @@ -1,12 +1,9 @@ --- title: 冲刷指针和状态队列 -linkTitle: 冲刷指针和状态队列 +linkTitle: 10_冲刷指针和状态队列 weight: 12 --- - -# 冲刷FTQ指针和状态队列 - ## 文档概述 之前讲了,后端和IFU重定向写回会修改一些状态队列。此外,FtqPtr也是一种比较重要的维护信息。由后端或者IFU引起的重定向,需要恢复各种类型用来索引FTQ项的FtqPtr。而当重定向是由后端发起的时候,还要修改提交状态队列,说明指令已经被执行。 ## 术语说明 @@ -70,7 +67,7 @@ rob_commits的valid字段有效,可以根据其中信息对指令进行提交 | fromIfu | 接收IFU重定向 | | icacheFlush | 将flush信号转发到icache | | toIFU | 将后端重定向转发到IFU | -所有顶层信号均在FTQ顶层IO一文中详述。 + ## 测试点总表 | 序号 | 功能名称 | 测试点名称 | 描述 | diff --git a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/11_ToBPU.md b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/11_ToBPU.md index 2cc9afe..ad3f49d 100644 --- a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/11_ToBPU.md +++ b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/11_ToBPU.md @@ -1,12 +1,9 @@ --- title: FTQ向BPU发送更新与重定向信息 -linkTitle: FTQ向BPU发送更新与重定向信息 +linkTitle: 11_FTQ向BPU发送更新与重定向信息 weight: 12 --- - -# FTQ向BPU发送更新与重定向信息 - ## 文档概述 FTQ将已提交指令的更新信息发往BPU进行训练,同时转发重定向信息。 diff --git a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/_index.md b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/_index.md index caa0e46..8bfd251 100644 --- a/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/_index.md +++ b/documents/content/zh-cn/docs/98_ut/01_frontend/03_ftq/_index.md @@ -1,10 +1,10 @@ --- title: FTQ概述 -linkTitle: FTQ概述 +linkTitle: FTQ weight: 12 --- -*下文(包括所有的FTQ文档)中会提到一些关于BPU和IFU的相关知识,详情需要去查看对应的文档: * +下文(包括所有的FTQ文档)中会提到一些关于BPU和IFU的相关知识,详情需要去查看对应的文档: - [BPU文档链接](https://open-verify.cc/xs-bpu/docs/) - [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位翻转。 -这样,我们就可以在一个有限的队列空间内不断更新新的项,以及正确进行比较,判断哪个项在队列中更靠前。 -*在香山的代码中,设计了isAfter和isBefore的函数来比较指针大小,字面上的意思是指针在队列靠后还是在队列靠前的位置,但从取指令块来说* -### 最新项 -有几个内部信号我想在这里提一下,newest_entry_ptr,newest_entry_target这几个内部信号,表明我们当前最新的有效FTQ项。BPU新的写入,重定向等等都会对最新FTQ项进行新的安排,在相应的文档中,对其生成方式做具体的描述。 \ No newline at end of file +这样,我们就可以在一个有限的队列空间内不断更新新的项,以及正确进行比较,判断哪个项在队列中更靠前或者更靠后。 diff --git a/ut_frontend/itlb/classical_version/test_tlb_receive_request.py b/ut_frontend/itlb/classical_version/test_tlb_receive_request.py index bee536b..bff4326 100644 --- a/ut_frontend/itlb/classical_version/test_tlb_receive_request.py +++ b/ut_frontend/itlb/classical_version/test_tlb_receive_request.py @@ -21,12 +21,12 @@ import inspect # request to TLB. TLB is expected to return a miss in the next cycle and initiate # a request to the PTW. At this point, you can simultaneously verify whether the # vpn in the PTW request is correct. -def test_req_from_icache_rand_vaddr_rand_valid_single_port(tlb_fixture): +def test_req_from_ifu_and_icache_rand_vaddr_rand_valid_single_port(tlb_fixture): """ - Compare the PTW request with the reference: - rand vaddr - rand valid - single port 0 / 1 + Func: Compare the PTW request with the reference: + subfunc1: rand vaddr + subfunc2: rand valid + subfunc3: single port 0 / 1 / 2 """ # connect to fixture tlb = tlb_fixture @@ -90,6 +90,7 @@ def test_req_from_icache_rand_vaddr_rand_valid_single_port(tlb_fixture): ###################################################################################### ### CASE EXAMPLE +# Running the following test case will show a pass: def test_req_from_icache_rand_vaddr_rand_valid_muti_port(tlb_fixture): """ Func: compare the PTW request with the reference: