BLOG

Record, summarize, and improve.

spike

Image in a image block

VCS (EDA软件)

Image in a image block

†需要 m5threads,目前还不支持 RISC-V
‡仅在设计和/或软件支持的情况下
§通过 RISC-V proxy kernel 支持系统调用仿真

Image in a image block

gem5与spike类似

Image in a image block

模拟CPU

取址:从PC处加载指令

译码:根据指令码得到对应的function

执行:执行操作各种设备(内存、寄存器等)的方法,指令行为定义在riscv/insns目录下,指令编码定义在risc/encoding.h中

定义指令

opcode:MATCH_insname

mask:MASK_insname

DECLARE:关联指令和指令掩码

riscv-opcodes工具可以自动生成encoding.h

单核执行指令数INTERLEAVE

spike优化

Duff device模拟icache

  • 提升分支预测准确度
  • 通过break减少跳转,提升顺序执行速度

MMU不负责虚拟地址到物理地址的翻译

L1 cache共享

cache中存储的是地址的索引,实际读写仍是到物理内存

预留custom指令

spike代码结构

fesvr:提供target与主机host交互的接口(借助proxy kernel实现)

riscv:riscv机器码的翻译和执行

spike 模拟器是一种 Trace-driven 模拟器。只考虑指令集的实现,而不考虑指令的执行时间。spike,通过模拟实际代码执行过程中的软硬件行为来实现指令级别的仿真,

1. Functional 模拟器,即进行功能仿真,将仿真器中运行的代码转换为主机上的二进制代码运行。如 qemu 就是这样的模拟器
2. Trace-driven 模拟器,通过记录代码执行过程中软硬件发生的变化进行仿真,可以提供指令级别的仿真。如本文介绍的 spike
3. Cycle-accurate 模拟器会提供硬件级别的仿真,即这类模拟器会实现较真实的电路连接,进行周期级别的模拟。如 Rocket-chip

Image in a image block