CA-模块体系

IMEM
模块用于指令存储器的读取,将PC地址传递给存储器,读取当前指令到IRin
。PC
模块用于管理程序计数器,包括在时钟上升沿时选择下一条指令的地址,以及处理复位信号。ADD
模块用于计算下一条指令的地址,将当前PC地址传递给PC
模块。NPC
模块用于存储下一条指令的地址。IR
模块用于指令寄存器的加载,将当前指令传递给IRout
。
ID (Instruction Decode) 模块:
Regfile
模块用于管理寄存器堆的读和写操作,根据指令选择寄存器读取和写入。CU
模块用于控制单元,解析指令并生成相应的控制信号,例如ALU操作码、写寄存器使能等。A
和B
模块用于选择和加载寄存器A和B的数据。Extender
模块用于符号扩展立即数。Imm
模块用于加载立即数。
EX (Execution) 模块:
A_MUX
和B_MUX
模块用于选择ALU的输入数据,可以选择寄存器数据、NPC、基址或立即数。ALU
模块执行ALU操作,并生成结果和零标志。
MEM (Memory) 模块:
ALU_out
模块用于加载ALU的结果。PC_MUX
模块用于选择下一个PC地址,可以选择NPC、ALU结果或分支指令的目标地址。WB_Reg_MUX
模块用于选择写回数据,可以选择ALU结果、内存读取结果或寄存器A的数据。WB_Reg_Addr_MUX
模块用于选择写回寄存器的地址。DMEM
模块用于数据存储器的读写操作。LDM
模块用于加载内存数据。
其他:
debug_wb_pc
、debug_wb_rf_wen
、debug_wb_rf_addr
、debug_wb_rf_wdata
用于调试目的,输出当前执行指令的信息。
这个CPU的基本架构是一个五级流水线,包括IF、ID、EX、MEM和WB(写回)阶段。每个阶段由不同的模块负责执行特定的任务,并在时钟上升沿进行数据传递。各个模块之间通过信号进行通信,根据指令的不同,选择不同的数据路径和操作。
以下是在前面的叙述中添加了原始Verilog代码的版本:
IF (Instruction Fetch) 模块:
IMEM
模块用于指令存储器的读取,将PC地址传递给存储器,读取当前指令到IRin
。
verilog
1 | IMEM U_IMEM ( |
PC
模块用于管理程序计数器,包括在时钟上升沿时选择下一条指令的地址,以及处理复位信号。
verilog
1 | PC U_PC ( |
ADD
模块用于计算下一条指令的地址,将当前PC地址传递给PC
模块。
verilog
1 | ADD U_ADD ( |
NPC
模块用于存储下一条指令的地址。
verilog
1 | NPC U_NPC ( |
IR
模块用于指令寄存器的加载,将当前指令传递给IRout
。
verilog
1 | IR U_IR ( |
ID (Instruction Decode) 模块:
Regfile
模块用于管理寄存器堆的读和写操作,根据指令选择寄存器读取和写入。
verilog
1 | Regfile U_regfile ( |
CU
模块用于控制单元,解析指令并生成相应的控制信号,例如ALU操作码、写寄存器使能等。
verilog
1 | CU U_CU ( |
A
和B
模块用于选择和加载寄存器A和B的数据。
verilog
1 | A U_A ( |
Extender
模块用于符号扩展立即数。
verilog
1 | Extender U_Extender ( |
Imm
模块用于加载立即数。
verilog
1 | Imm U_Imm ( |
这些Verilog模块构成了IF和ID阶段的核心逻辑,负责指令的获取、寄存器堆的读写、控制信号的生成等任务。
EX (Execution) 模块:
A_MUX
和B_MUX
模块用于选择ALU的输入数据,可以选择寄存器数据、NPC、基址或立即数。
verilog
1 | A_MUX A_MUX ( |
这些模块构成了EX阶段的核心逻辑,负责执行ALU操作、选择ALU输入数据等任务。
MEM (Memory) 模块:
ALU_out
模块用于加载ALU的结果。
verilog
1 | ALU_out U_ALU_output ( |
PC_MUX
模块用于选择下一个PC地址,可以选择NPC、ALU结果或分支指令的目标地址。
verilog
1 | PC_MUX PC_MUX ( |
WB_Reg_MUX
模块用于选择写回数据,可以选择ALU结果、内存读取结果或寄存器A的数据。
verilog
1 | WB_DATA_MUX WB_Reg_MUX ( |
WB_Reg_Addr_MUX
模块用于选择写回寄存器的地址。
verilog
1 | WB_ADDR_MUX WB_Reg_Addr_MUX ( |
DMEM
模块用于数据存储器的读写操作。
verilog
1 | DMEM U_DMEM ( |
LDM
模块用于加载内存数据。
verilog
1 | LDM LDM ( |
这些模块构成了MEM阶段的核心逻辑,负责执行内存操作、选择写回数据和地址等任务。
- 标题: CA-模块体系
- 作者: Molaters
- 创建于 : 2023-11-24 11:30:49
- 更新于 : 2023-10-12 17:02:26
- 链接: https://molaters.github.io/2023/11/24/计算机体系结构/CA-模块体系/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。