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

处理器核心仿真封装类 更多...

#include <core.hpp>

Core 的协作图:
Collaboration graph

Public 成员函数

 Core (guest_mem *mem_instance=nullptr)
 构造函数:初始化核心实例
 ~Core ()
 析构函数:销毁 Verilator 实例以及相关的运行追踪 (Trace)
void step ()
 推进一个完整的硬件时钟周期 (Tick/Step)
void reset (int cycles=1)
 异步触发系统复位信号
bool is_commit_valid () const
 检查当前周期是否有一条指令成功越过了写回 (Write-back) 阶段并真正提交 (Commit)
uint32_t get_commit_pc () const
 获取成功提交指令的 PC (程序计数器) 值
uint32_t get_commit_wdata () const
 获取写入内部 GPR (通用寄存器) 的原始数据
uint8_t get_commit_rd () const
 获取被修改目标架构寄存器的索引映射
bool is_commit_wen () const
 判定寄存器写回逻辑是否有效 (Write Enable)
uint32_t get_commit_inst () const
 获取当前正提交的机器级精确指令码码字 (Instruction Code)
bool is_commit_store () const
 指示提交的指令是否执行了内存存储 (Store) 操作
bool is_commit_halt () const
 指示提交的指令是否触发了核心挂起或陷阱 (如 EBREAK 指令)
uint32_t get_commit_csr_waddr () const
 获取提交阶段所指向的 CSR 寄存器目标地址
uint32_t get_commit_csr_wdata () const
 获取提交阶段写入到对应 CSR 寄存器中的数据
bool is_commit_csr_wen () const
 指示当前提交指令是否发生了一次有效的 CSR 写操作
void print_registers () const
 打印当前 CPU 矩阵各寄存器的文本格式概览,直观呈现核心状态信息
uint32_t get_reg_by_name (const std::string &name) const
 利用字符串字面量键值查找并解析硬件内部的直接变量状态
uint32_t get_reg (int idx) const
 通过底层寄存器索引读取目标寄存器存储的值

Public 属性

CoreState state
 保存仿真器目前的运行状态

Private 成员函数

void eval ()
 处理 DPI 逻辑绑定并应用所有组合逻辑的顺序计算和传播

Private 属性

std::unique_ptr< VerilatedContext > contextp
std::unique_ptr< VCoreTop > top

详细描述

处理器核心仿真封装类

作为 Verilator 编译出的 CPU 模型的高级管理与调度层。 负责与模拟 RISC-V 时钟周期的 Verilog 底层模型交互,处理 DPI-C 回调, 设置引脚信号,同时为调试器提取和抽象寄存器/运行状态的访问接口。

构造及析构函数说明

◆ Core()

Core::Core ( guest_mem * mem_instance = nullptr)

构造函数:初始化核心实例

初始化 Verilator 仿真上下文 (Context) 并与客户机内存在软件层面进行绑定。

参数
mem_instance指向 guest_mem 的指针,用于模拟处理器与外部内存总线的交互
函数调用图:

◆ ~Core()

Core::~Core ( )

析构函数:销毁 Verilator 实例以及相关的运行追踪 (Trace)

成员函数说明

◆ eval()

void Core::eval ( )
private

处理 DPI 逻辑绑定并应用所有组合逻辑的顺序计算和传播

这是这个函数的调用关系图:

◆ get_commit_csr_waddr()

uint32_t Core::get_commit_csr_waddr ( ) const

获取提交阶段所指向的 CSR 寄存器目标地址

◆ get_commit_csr_wdata()

uint32_t Core::get_commit_csr_wdata ( ) const

获取提交阶段写入到对应 CSR 寄存器中的数据

◆ get_commit_inst()

uint32_t Core::get_commit_inst ( ) const

获取当前正提交的机器级精确指令码码字 (Instruction Code)

◆ get_commit_pc()

uint32_t Core::get_commit_pc ( ) const

获取成功提交指令的 PC (程序计数器) 值

返回
提交指令的 PC 地址

◆ get_commit_rd()

uint8_t Core::get_commit_rd ( ) const

获取被修改目标架构寄存器的索引映射

返回
目标寄存器索引 (0 到 31)
这是这个函数的调用关系图:

◆ get_commit_wdata()

uint32_t Core::get_commit_wdata ( ) const

获取写入内部 GPR (通用寄存器) 的原始数据

返回
32位位宽的寄存器写入数据流
这是这个函数的调用关系图:

◆ get_reg()

uint32_t Core::get_reg ( int idx) const

通过底层寄存器索引读取目标寄存器存储的值

参数
idx要检索的寄存器索引 (0 到 31)
返回
该寄存器暂存的 32 位数据
这是这个函数的调用关系图:

◆ get_reg_by_name()

uint32_t Core::get_reg_by_name ( const std::string & name) const

利用字符串字面量键值查找并解析硬件内部的直接变量状态

参数
name要查询的寄存器名格式化字符串 (例如 "a0", "pc")
返回
内部数据对应转换的 32 位值
这是这个函数的调用关系图:

◆ is_commit_csr_wen()

bool Core::is_commit_csr_wen ( ) const

指示当前提交指令是否发生了一次有效的 CSR 写操作

◆ is_commit_halt()

bool Core::is_commit_halt ( ) const

指示提交的指令是否触发了核心挂起或陷阱 (如 EBREAK 指令)

◆ is_commit_store()

bool Core::is_commit_store ( ) const

指示提交的指令是否执行了内存存储 (Store) 操作

◆ is_commit_valid()

bool Core::is_commit_valid ( ) const

检查当前周期是否有一条指令成功越过了写回 (Write-back) 阶段并真正提交 (Commit)

返回
如果指令成功提交返回 true

◆ is_commit_wen()

bool Core::is_commit_wen ( ) const

判定寄存器写回逻辑是否有效 (Write Enable)

返回
若该提交动作会确实修改寄存器则返回 true
这是这个函数的调用关系图:

◆ print_registers()

void Core::print_registers ( ) const

打印当前 CPU 矩阵各寄存器的文本格式概览,直观呈现核心状态信息

这是这个函数的调用关系图:

◆ reset()

void Core::reset ( int cycles = 1)

异步触发系统复位信号

参数
cycles拉高复位引脚并持续的周期数,随后将自动拉低清除复位状态
函数调用图:
这是这个函数的调用关系图:

◆ step()

void Core::step ( )

推进一个完整的硬件时钟周期 (Tick/Step)

函数调用图:
这是这个函数的调用关系图:

类成员变量说明

◆ contextp

std::unique_ptr<VerilatedContext> Core::contextp
private

◆ state

CoreState Core::state

保存仿真器目前的运行状态

◆ top

std::unique_ptr<VCoreTop> Core::top
private

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