中央处理器头文件
更多...
浏览源代码.
|
|
typedef struct CPU_t | CPU |
| | 中央处理器结构体
|
| |
中央处理器头文件
- 作者
- lancer (lance.nosp@m.rsta.nosp@m.dium@.nosp@m.163..nosp@m.com)
- 版本
- 0.1
- 日期
- 2024-01-08
- 版权所有
- Copyright (c) 2024
CPU 介绍
CPU 取指与执行循环
在这个实现中,我们有 3 级流水线用于执行所有指令,它们是:
- 第 1 级流水线(取指):cpu 从 DRAM 的特定地址(存放在程序计数器 pc 中)中取得指令;
- 第 2 级流水线(译码):指令被译码为操作码,目标寄存器与源寄存器等;
- 第 3 级流水线(执行):此时指令按照译码后的结果在 ALU 中执行。
◆ cpu_dump_regs()
| void cpu_dump_regs |
( |
CPU * | cpu | ) |
|
◆ cpu_execute()
| int cpu_execute |
( |
CPU * | cpu, |
|
|
u32 | inst ) |
处理器将从DRAM中取得并存放 在inst变量中的指令解码并执行。本质上是 ALU 和指令译码器的组合。
- 参数
-
- 返回
- int 错误代码
- 注解
- 操作码告诉我们要对给定的地址和寄存器进行什么操作。 具体要进行什么操作取决于 3 个值: 操作码 opcode,funct3 和 funct7。 根据指令映射, 我们用以下 cpu_execute 函数对这 3 个部分进行译码。
◆ cpu_fetch()
| u32 cpu_fetch |
( |
CPU * | cpu | ) |
|
处理器从内存(DRAM)中读取指令用于执行, 并将其存入指令变量inst中。
- 参数
-
- 返回
- u32 32-bit 指令数据
◆ cpu_init()
| void cpu_init |
( |
CPU * | cpu | ) |
|
处理器初始化给定的CPU, 将指针指向的CPU中的寄存器全部置 0, 并将程序寄存器pc的值设为内存的起始地址。
- 参数
-
◆ cpu_loop()
| int cpu_loop |
( |
CPU * | cpu, |
|
|
char * | 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 ) |