简单、小型、多周期的 32 位 RISC-V CPU 实现。
大多数指令需要 2 个周期,除了需要 4 个以上周期的加载/存储(取决于内存延迟)和最多可能需要 34 个周期的除法。
特征
- 32 位 RISC-V ISA CPU 内核。
- 支持 RISC-V 的整数 (I)、乘除法 (M) 和 CSR 指令 (Z) 扩展 (RV32IMZicsr)。
- 实现基本 ISA 规范 v2.1 和部分特权 ISA 规范 v1.11。
- 仅支持机器模式特权级别。
- 对异常、中断、定时器、乘法、除法和错误陷阱的可配置支持。
- 使用针对C++ ISA 模型的联合仿真使用随机指令序列进行验证。
- 可合成的 Verilog 2001,Verilator 和 FPGA 友好。
- Coremark: 1.48 CoreMark/MHz(使用硬件 mul/div)
- Dhrystone:0.58 DMIPS/MHz(“合法编译选项”/每次迭代 337 条指令/使用硬件 mul/div)
对于我更高性能的流水线内核,请参见此处:
- 核心标记: 2.94CM/MHZ – http://github.com/ultraembedded/riscv
- 核心标记: 4.1CM/MHz – http://github.com/ultraembedded/biriscv
入门
克隆
克隆这个项目及其依赖项;
git clone https://github.com/ultraembedded/core_uriscv.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
配置
参数名称 | 有效范围 | 描述 |
---|---|---|
支持_MUL | 1/0 | 启用乘法指令。 |
支持_DIV | 1/0 | 启用除法指令。 |
支持_企业社会责任 | 1/0 | 全局启用 CSR/陷阱/中断处理。 |
SUPPORT_TRAP_LSU_ALIGN | 1/0 | 启用未对齐的内存加载/存储异常。 |
支持_MTVEC | 1/0 | 可配置的异常入口地址。 |
支持_MTVAL | 1/0 | 支持 MTVAL CSR(持有错误的地址/操作码)。 |
支持_MIP_MIE | 1/0 | 支持 MIE 和 MIP CSR 寄存器。 |
支持_MSCRATCH | 1/0 | 支持 MSCRATCH CSR 寄存器(SW 读/写)。 |
支持_MCYCLE | 1/0 | 支持循环计数器/rdtime。 |
SUPPORT_MTIMECMP | 1/0 | Non-std – 支持定时器比较中断。 |
SUPPORT_TRAP_INVALID_OPC | 1/0 | 无效操作码故障(启用软件仿真)。 |
SUPPORT_BRAM_REGFILE | 1/0 | FPGA BlockRAM 友好的 reg 文件(需要多 1 个周期)。 |
ISR_VECTOR | ‘h0-FFFFFFFF | ISR 地址 = reset_vector + ISR_VECTOR (SUPPORT_MTVEC = 0)。 |
没有回复内容