biRISC-V – 32 位双发 RISC-V CPU
Github:http: //github.com/ultraembedded/biriscv
特征
- 32 位 RISC-V ISA CPU 内核。
- 超标量(双问题)有序 6 或 7 级流水线。
- 支持 RISC-V 的整数 (I)、乘除法 (M) 和 CSR 指令 (Z) 扩展 (RV32IMZicsr)。
- 具有可配置深度分支目标缓冲区 (BTB) 和返回地址堆栈 (RAS) 的分支预测 (bimodel/gshare)。
- 64 位指令取指,32 位数据访问。
- 2 x 整数 ALU(算术、移位器和分支单元)。
- 1 个负载存储单元,1 个流水线外分配器。
- 每个周期发出并完成最多 2 条独立指令。
- 支持用户、主管和机器模式权限级别。
- 基本 MMU 支持 – 能够使用原子 (RV-A) 软件仿真启动 Linux。
- 实现基本 ISA 规范v2.1和特权 ISA 规范v1.11。
- 使用Google 的 RISCV-DV随机指令序列对C++ ISA 模型进行联合仿真验证。
- 支持指令/数据缓存、AXI 总线接口或紧密耦合的存储器。
- 可配置数量的流水线阶段、结果转发选项和分支预测资源。
- 可合成的 Verilog 2001,Verilator 和 FPGA 友好。
- 核心标记: 4.1 CoreMark/MHz
- Dhrystone:1.9 DMIPS/MHz(“合法编译选项”/每次迭代 337 条指令)
文档
相似核心
- SiFive E76
- RV32IMAFC
- 双问题有序 8 级流水线
- 4 个 ALU 单元(2 个早期,2 个晚期)
- ✖️ 商业闭源核心/$$
- WD SweRV RISC-V Core EH1
- RV32IMC
- 双问题有序 9 级流水线
- 4 个 ALU 单元(2 个早期,2 个晚期)
- ✖️ 系统 Verilog + 自动信号连接
- ✖️ 没有数据缓存选项
- ✖️ 无法启动 Linux
项目目标
- 将 Linux 一直引导到功能正常的用户空间环境。✔️
- 为此类有序机器实现具有竞争力的性能(即目标是 WD SweRV CoreMark 分数的 80%)。✔️
- 合理的 PPA / FPGA 资源友好。✔️
- 无需使用所有 LUT 资源并合成 > 50MHz 即可轻松安装到廉价的业余爱好者 FPGA(例如 Xilinx Artix 7)上。✔️
- 支持各种缓存和 TCM 选项。✔️
- 使用可读、可维护和记录的 IEEE 1364-2001 Verilog 构建。✔️
- 在 Verilator 和 Icarus Verilog 等开源工具中进行仿真。✔️
- 在以后的版本中,添加对原子扩展的支持。
将为 RV32IMA 构建的 Linux 5.0.0-rc8 内核启动到具有 biRISC-V 的 Digilent Arty Artix 7 上的用户空间(在引导加载程序中模拟原子指令);
前期工作
基于我之前的工作;
- Github:http: //github.com/ultraembedded/riscv
入门
克隆
克隆这个项目及其依赖项;
git clone --recursive https://github.com/ultraembedded/biriscv.git
运行 Helloworld
使用 Icarus Verilog 在核心 RTL 上运行简单的测试映像;
# Install Icarus Verilog (Debian / Ubuntu / Linux Mint)
sudo apt-get install iverilog
# [or] Install Icarus Verilog (Redhat / Centos)
#sudo yum install iverilog
# Run a simple test image (test.elf)
cd tb/tb_core_icarus
make
预期输出是;
Starting bench
VCD info: dumpfile waveform.vcd opened for output.
Test:
1. Initialised data
2. Multiply
3. Divide
4. Shift left
5. Shift right
6. Shift right arithmetic
7. Signed comparision
8. Word access
9. Byte access
10. Comparision
配置
参数名称 | 有效范围 | 描述 |
---|---|---|
支持_超级 | 1/0 | 启用主管/用户权限级别。 |
支持_MMU | 1/0 | 启用基本内存管理单元。 |
SUPPORT_MULDIV | 1/0 | 启用硬件乘法/除法 (RV-M)。 |
SUPPORT_DUAL_ISSUE | 1/0 | 支持超标量运算。 |
SUPPORT_LOAD_BYPASS | 1/0 | 支持加载结果旁路路径。 |
SUPPORT_MUL_BYPASS | 1/0 | 支持乘法结果旁路路径。 |
SUPPORT_REGFILE_XILINX | 1/0 | 支持 Xilinx 优化的寄存器文件。 |
SUPPORT_BRANCH_PREDICTION | 1/0 | 启用分支预测结构。 |
NUM_BTB_ENTRIES | 2 – | 分支目标缓冲区条目数。 |
NUM_BTB_ENTRIES_W | 1 – | 设置为 log2(NUM_BTB_ENTRIES)。 |
NUM_BHT_ENTRIES | 2 – | 分支历史表条目数。 |
NUM_BHT_ENTRIES_W | 1 – | 设置为 log2(NUM_BHT_ENTRIES_W)。 |
BHT_ENABLE | 1/0 | 启用基于分支历史表的预测。 |
GSHARE_ENABLE | 1/0 | 启用 GSHARE 分支预测算法。 |
RAS_ENABLE | 1/0 | 启用返回地址堆栈预测。 |
NUM_RAS_ENTRIES | 2 – | 支持的返回堆栈地址数。 |
NUM_RAS_ENTRIES_W | 1 – | 设置为 log2(NUM_RAS_ENTRIES_W)。 |
EXTRA_DECODE_STAGE | 1/0 | 用于改进时序的额外解码管道阶段。 |
MEM_CACHE_ADDR_MIN | 32’h0 – 32’hffffffff | 最低可缓存内存地址。 |
MEM_CACHE_ADDR_MAX | 32’h0 – 32’hffffffff | 最高可缓存内存地址。 |
没有回复内容