sEMU
载入中...
搜索中...
未找到
DiffTest类 参考

差分测试 (Differential Testing) 引擎 更多...

#include <difftest.hpp>

DiffTest 的协作图:
Collaboration graph

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()

DiffTest::~DiffTest ( )

成员函数说明

◆ check_registers()

bool DiffTest::check_registers ( const CPU_state & dut_state)

运行差分比对:检查当前 DUT 的状态与 REF 的状态是否严格一致

参数
dut_state当前 DUT 执行写回后的暂存机器状态 (由外部传入,保证时序匹配)
返回
如果状态匹配返回 true,如果检测到寄存器/PC 数据不一致则返回 false

◆ init()

bool DiffTest::init ( const std::string & ref_so_file,
int port )

初始化差分测试引擎,尝试加载参考模拟器

参数
ref_so_file参考模拟器的动态链接库路径 (如 .so 文件)
port给参考模拟器预留的端口 (通常用于 gdbserver,默认为 0)
返回
成功加载并找到所有 API 返回 true,否则返回 false

◆ is_active()

bool DiffTest::is_active ( ) const
inline

检查差分测试是否已启用且库已成功加载

返回
active 状态

◆ skip_ref()

void DiffTest::skip_ref ( )

跳过参考模拟器的内部比对环节 适用于一些由于设备 MMIO 等异步行为导致无法产生一致读写结果的特定指令跳过。

◆ step()

void DiffTest::step ( uint64_t n)

推进参考模拟器执行 N 条指令

参数
n需要模拟的指令数量

◆ sync_memory()

void DiffTest::sync_memory ( size_t addr,
void * buf,
size_t n,
bool to_ref )

物理内存状态同步

参数
addr开始同步的绝对物理地址
buf指向实际主机持有数据的源/宿缓冲区
n要同步的字节数
to_ref同步方向。若为 true,则将 buf 数据复制到参考模拟器;若为 false,反之。

◆ sync_registers()

void DiffTest::sync_registers ( const Core * core,
bool to_ref )

通用寄存器状态同步

参数
core指向原生架构 DUT 模型实例
to_ref同步方向。若为 true,则将 DUT 寄存器值复制到参考模拟器。
函数调用图:

类成员变量说明

◆ active

bool DiffTest::active = false
private

◆ handle

void* DiffTest::handle = nullptr
private

◆ ref_difftest_exec

void(* DiffTest::ref_difftest_exec) (uint64_t n) = nullptr
private

◆ ref_difftest_init

void(* DiffTest::ref_difftest_init) (int port) = nullptr
private

◆ ref_difftest_memcpy

void(* DiffTest::ref_difftest_memcpy) (uint32_t addr, void *buf, size_t n, bool direction) = nullptr
private

◆ ref_difftest_raise_intr

void(* DiffTest::ref_difftest_raise_intr) (uint32_t NO) = nullptr
private

◆ ref_difftest_regcpy

void(* DiffTest::ref_difftest_regcpy) (void *dut, bool direction) = nullptr
private

◆ ref_difftest_skip_ref

void(* DiffTest::ref_difftest_skip_ref) () = nullptr
private

该类的文档由以下文件生成: