forked from XS-MLVP/UnityChipForXiangShan
Merge branch 'XS-MLVP:main' into main
This commit is contained in:
commit
ec09eb24dc
4
Makefile
4
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"; \
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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仓库:
|
||||
|
|
|
|||
|
|
@ -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指令:
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
||||
|
|
|
|||
|
|
@ -4,11 +4,11 @@ linkTitle: 环境配置
|
|||
weight: 12
|
||||
---
|
||||
|
||||
## 推荐使用WSL2+Ubuntu22.04+GTKWave
|
||||
## WSL2+Ubuntu22.04+GTKWave(Windows用户推荐使用)
|
||||
|
||||
我们推荐Windows10/11用户通过WSL2进行开发,在此给出通过此方法进行环境配置的教程集锦,仅供参考。如环境安装过程中出现任何问题,欢迎在QQ群(群号:<b>976081653</b>)中提出,我们将尽力帮助解决。此页面将收集大家提出的所有环境配置相关问题并提供解决方案,欢迎随时向我们提问!
|
||||
我们推荐 Windows10/11 用户通过 WSL2 进行开发,在此给出通过此方法进行环境配置的教程集锦,仅供参考。如环境安装过程中出现任何问题,欢迎在QQ群(群号:<b>976081653</b>)中提出,我们将尽力帮助解决。此页面将收集大家提出的所有环境配置相关问题并提供解决方案,欢迎随时向我们提问!
|
||||
|
||||
## 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/)
|
||||
|
|
@ -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 信号 |
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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有效时延迟一个周期写入。
|
||||
|
||||
|
|
|
|||
|
|
@ -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 成功接收数据**
|
||||
|
|
|
|||
|
|
@ -1,12 +1,9 @@
|
|||
---
|
||||
title: FTQ向IFU发送取指目标
|
||||
linkTitle: FTQ向IFU发送取指目标
|
||||
linkTitle: 04_FTQ向IFU发送取指目标
|
||||
weight: 12
|
||||
---
|
||||
|
||||
|
||||
# FTQ向IFU发送取指目标
|
||||
|
||||
## 文档概述
|
||||
IFU需要取FTQ中的项进行取指令操作,同时也会简单地对指令进行解析,并写回错误的指令
|
||||
FTQ发送给IFU的信号同时也需发送给ICache一份,ICache是指令缓存,帮助快速读取指令。
|
||||
|
|
|
|||
|
|
@ -1,12 +1,9 @@
|
|||
---
|
||||
title: IFU向FTQ写回预译码信息
|
||||
linkTitle: IFU向FTQ写回预译码信息
|
||||
linkTitle: 05_IFU向FTQ写回预译码信息
|
||||
weight: 12
|
||||
---
|
||||
|
||||
|
||||
# IFU向FTQ写回预译码信息
|
||||
|
||||
## 文档概述
|
||||
|
||||
IFU获取来自BPU的预测信息之后,会执行预译码,并将FTQ项写回FTQ中去。我们会比对FTQ中原BPU预测项和预译码的结果,判断是否有预测错误
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
---
|
||||
title: FTQ接收后端重定向
|
||||
linkTitle: FTQ接收后端重定向
|
||||
linkTitle: 06_FTQ接收后端重定向
|
||||
weight: 12
|
||||
---
|
||||
|
||||
# FTQ接收后端重定向
|
||||
|
||||
## 文档概述
|
||||
|
||||
FTQ重定向信息有两个来源,分别是IFU 和 后端。两者的 重定向接口大致相似,但重定向的过程有一定区别。
|
||||
|
|
|
|||
|
|
@ -1,12 +1,9 @@
|
|||
---
|
||||
title: FTQ接收IFU重定向
|
||||
linkTitle: FTQ接收IFU重定向
|
||||
linkTitle: 07_FTQ接收IFU重定向
|
||||
weight: 12
|
||||
---
|
||||
|
||||
|
||||
# FTQ接收IFU重定向
|
||||
|
||||
## 文档概述
|
||||
除了后端,IFU也会发送重定向相关消息,和后端不同,IFU的重定向信息来自于预译码写回信息。相同的是,它们都是通过BranchPredictionRedirect的接口传递重定向信息。
|
||||
## 术语说明
|
||||
|
|
|
|||
|
|
@ -1,12 +1,9 @@
|
|||
---
|
||||
title: FTQ向后端发送取指目标
|
||||
linkTitle: FTQ向后端发送取指目标
|
||||
linkTitle: 08_FTQ向后端发送取指目标
|
||||
weight: 12
|
||||
---
|
||||
|
||||
|
||||
# FTQ向后端发送取指目标
|
||||
|
||||
## 文档概述
|
||||
|
||||
pc取值目标会发给后端pc mem让他自己进行存储,之后从自己的pc mem取指,此外,最新的FTQ项和对应的跳转目标也会发给后端。
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
---
|
||||
title: 执行单元修改FTQ状态队列
|
||||
linkTitle: 执行单元修改FTQ状态队列
|
||||
linkTitle: 09_执行单元修改FTQ状态队列
|
||||
weight: 12
|
||||
---
|
||||
|
||||
# 执行单元修改FTQ状态队列
|
||||
|
||||
## 文档概述
|
||||
后端的写回信息,包括重定向信息和更新信息,实际上都是执行之后,由实际执行单元根据结果发回的
|
||||
## 术语说明
|
||||
|
|
|
|||
|
|
@ -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一文中详述。
|
||||
|
||||
## 测试点总表
|
||||
|
||||
| 序号 | 功能名称 | 测试点名称 | 描述 |
|
||||
|
|
|
|||
|
|
@ -1,12 +1,9 @@
|
|||
---
|
||||
title: FTQ向BPU发送更新与重定向信息
|
||||
linkTitle: FTQ向BPU发送更新与重定向信息
|
||||
linkTitle: 11_FTQ向BPU发送更新与重定向信息
|
||||
weight: 12
|
||||
---
|
||||
|
||||
|
||||
# FTQ向BPU发送更新与重定向信息
|
||||
|
||||
## 文档概述
|
||||
|
||||
FTQ将已提交指令的更新信息发往BPU进行训练,同时转发重定向信息。
|
||||
|
|
|
|||
|
|
@ -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项进行新的安排,在相应的文档中,对其生成方式做具体的描述。
|
||||
这样,我们就可以在一个有限的队列空间内不断更新新的项,以及正确进行比较,判断哪个项在队列中更靠前或者更靠后。
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Reference in New Issue