FPGA上可以用的开源的32 位 RISC-V ISA CPU 内核verilog代码-FPGA开源项目社区-FPGA CPLD-ChipDebug

FPGA上可以用的开源的32 位 RISC-V ISA CPU 内核verilog代码

biRISC-V – 32 位双发 RI​​SC-V CPU

Github:http: //github.com/ultraembedded/biriscv

biRISC-V

特征

  • 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 条指令)

显示每个周期执行 2 条指令的序列; 双重发行

文档

相似核心

  • 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 上的用户空间(在引导加载程序中模拟原子指令); Linux-引导

前期工作

基于我之前的工作;

入门

克隆

克隆这个项目及其依赖项;

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 最高可缓存内存地址。
请登录后发表评论

    没有回复内容