VCS (EDA软件)
†需要 m5threads,目前还不支持 RISC-V
‡仅在设计和/或软件支持的情况下
§通过 RISC-V proxy kernel 支持系统调用仿真
gem5与spike类似
模拟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