cemu
载入中...
搜索中...
未找到
cpu.h 文件参考

中央处理器头文件 更多...

#include "bus.h"

浏览源代码.

struct  CPU_t
 中央处理器结构体 更多...
 

类型定义

typedef struct CPU_t CPU
 中央处理器结构体
 

函数

void cpu_init (CPU *cpu)
 处理器初始化给定的CPU, 将指针指向的CPU中的寄存器全部置 0, 并将程序寄存器pc的值设为内存的起始地址。
 
u32 cpu_fetch (CPU *cpu)
 处理器从内存(DRAM)中读取指令用于执行, 并将其存入指令变量inst中。
 
int cpu_execute (CPU *cpu, u32 inst)
 处理器将从DRAM中取得并存放 在inst变量中的指令解码并执行。本质上是 ALU 和指令译码器的组合。
 
int cpu_step (CPU *cpu, int step)
 处理器步进执行
 
int cpu_loop (CPU *cpu, char *filename)
 处理器循环执行
 
void cpu_dump_regs (CPU *cpu)
 处理器查看寄存器的值
 

详细描述

中央处理器头文件

作者
lancer (lance.nosp@m.rsta.nosp@m.dium@.nosp@m.163..nosp@m.com)
版本
0.1
日期
2024-01-08

CPU 介绍

CPU 取指与执行循环

在这个实现中,我们有 3 级流水线用于执行所有指令,它们是:

  1. 第 1 级流水线(取指):cpu 从 DRAM 的特定地址(存放在程序计数器 pc 中)中取得指令;
  2. 第 2 级流水线(译码):指令被译码为操作码,目标寄存器与源寄存器等;
  3. 第 3 级流水线(执行):此时指令按照译码后的结果在 ALU 中执行。

函数说明

◆ cpu_dump_regs()

void cpu_dump_regs ( CPU * cpu)

处理器查看寄存器的值

参数
cpu中央处理器

◆ cpu_execute()

int cpu_execute ( CPU * cpu,
u32 inst )

处理器将从DRAM中取得并存放 在inst变量中的指令解码并执行。本质上是 ALU 和指令译码器的组合。

参数
cpu中央处理器
inst32-bit 指令数据
返回
int 错误代码
注解
操作码告诉我们要对给定的地址和寄存器进行什么操作。 具体要进行什么操作取决于 3 个值: 操作码 opcode,funct3 和 funct7。 根据指令映射, 我们用以下 cpu_execute 函数对这 3 个部分进行译码。

◆ cpu_fetch()

u32 cpu_fetch ( CPU * cpu)

处理器从内存(DRAM)中读取指令用于执行, 并将其存入指令变量inst中。

参数
cpu中央处理器
返回
u32 32-bit 指令数据

◆ cpu_init()

void cpu_init ( CPU * cpu)

处理器初始化给定的CPU, 将指针指向的CPU中的寄存器全部置 0, 并将程序寄存器pc的值设为内存的起始地址。

参数
cpu中央处理器

◆ cpu_loop()

int cpu_loop ( CPU * cpu,
char * filename )

处理器循环执行

参数
cpu中央处理器
filename文件名
返回
int 错误代码
注解
三级流水线CPU
  • 第 1 级流水线由函数cpu_fetch()处理。
  • 第 2、3 级流水线由定义在cpu.h中的函数cpu_execute()一并处理。
  • 程序计数器pc在每次循环后增加 4 个字节(32 位,因为每个 RISC-V 指令长度都为 32 位), 以获取下一条指令。因此 CPU 执行循环可以被写为下面这样:

◆ cpu_step()

int cpu_step ( CPU * cpu,
int step )

处理器步进执行

参数
cpu中央处理器
step步数
返回
int 错误代码