|
sEMU
|
差分测试 (Differential Testing) 引擎 更多...
#include <difftest.hpp>

Public 成员函数 | |
| DiffTest () | |
| ~DiffTest () | |
| bool | init (const std::string &ref_so_file, int port) |
| 初始化差分测试引擎,尝试加载参考模拟器 | |
| void | sync_memory (size_t addr, void *buf, size_t n, bool to_ref) |
| 物理内存状态同步 | |
| void | sync_registers (const Core *core, bool to_ref) |
| 通用寄存器状态同步 | |
| void | step (uint64_t n) |
| 推进参考模拟器执行 N 条指令 | |
| bool | check_registers (const CPU_state &dut_state) |
| 运行差分比对:检查当前 DUT 的状态与 REF 的状态是否严格一致 | |
| void | skip_ref () |
| 跳过参考模拟器的内部比对环节 适用于一些由于设备 MMIO 等异步行为导致无法产生一致读写结果的特定指令跳过。 | |
| bool | is_active () const |
| 检查差分测试是否已启用且库已成功加载 | |
Private 属性 | |
| void * | handle = nullptr |
| bool | active = false |
| void(* | ref_difftest_memcpy )(uint32_t addr, void *buf, size_t n, bool direction) = nullptr |
| void(* | ref_difftest_regcpy )(void *dut, bool direction) = nullptr |
| void(* | ref_difftest_exec )(uint64_t n) = nullptr |
| void(* | ref_difftest_raise_intr )(uint32_t NO) = nullptr |
| void(* | ref_difftest_init )(int port) = nullptr |
| void(* | ref_difftest_skip_ref )() = nullptr |
差分测试 (Differential Testing) 引擎
负责通过 dlopen 动态加载 NEMU(或其他参考模拟器)的动态链接库 (Shared Object), 并使用 API 函数与其进行状态同步(包含内存与寄存器)。在单步调试时,该类将控制参考 模拟器一同步进,检查 DUT (待测设计,即 sEMU) 与参考模拟器的状态是否一致,从而找出硬件 Bug。
| DiffTest::DiffTest | ( | ) |
| DiffTest::~DiffTest | ( | ) |
| bool DiffTest::check_registers | ( | const CPU_state & | dut_state | ) |
运行差分比对:检查当前 DUT 的状态与 REF 的状态是否严格一致
| dut_state | 当前 DUT 执行写回后的暂存机器状态 (由外部传入,保证时序匹配) |
| bool DiffTest::init | ( | const std::string & | ref_so_file, |
| int | port ) |
初始化差分测试引擎,尝试加载参考模拟器
| ref_so_file | 参考模拟器的动态链接库路径 (如 .so 文件) |
| port | 给参考模拟器预留的端口 (通常用于 gdbserver,默认为 0) |
|
inline |
检查差分测试是否已启用且库已成功加载
| void DiffTest::skip_ref | ( | ) |
跳过参考模拟器的内部比对环节 适用于一些由于设备 MMIO 等异步行为导致无法产生一致读写结果的特定指令跳过。
| void DiffTest::step | ( | uint64_t | n | ) |
推进参考模拟器执行 N 条指令
| n | 需要模拟的指令数量 |
| void DiffTest::sync_memory | ( | size_t | addr, |
| void * | buf, | ||
| size_t | n, | ||
| bool | to_ref ) |
物理内存状态同步
| addr | 开始同步的绝对物理地址 |
| buf | 指向实际主机持有数据的源/宿缓冲区 |
| n | 要同步的字节数 |
| to_ref | 同步方向。若为 true,则将 buf 数据复制到参考模拟器;若为 false,反之。 |
| void DiffTest::sync_registers | ( | const Core * | core, |
| bool | to_ref ) |
通用寄存器状态同步
| core | 指向原生架构 DUT 模型实例 |
| to_ref | 同步方向。若为 true,则将 DUT 寄存器值复制到参考模拟器。 |

|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |