uriscv – 另一个开源的可在FPGA上运行的小型 RISC-V CPU verilog源码-FPGA开源项目社区-FPGA CPLD-ChipDebug

uriscv – 另一个开源的可在FPGA上运行的小型 RISC-V CPU verilog源码

简单、小型、多周期的 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)

对于我更高性能的流水线内核,请参见此处:

入门

克隆

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

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)。
请登录后发表评论

    没有回复内容