CPU 速通系列 4-2:MEM-WB 模块
代码
Path src/cpu/mem_wb.sv
1`include "defines.svh"
2
3module mem_wb (
4
5 input logic clk,
6 input logic rst,
7
8 //来自控制模块的信息
9 input logic [5:0] stall,
10
11 //来自访存阶段的信息
12 input logic [`RegAddrBus] mem_wd,
13 input logic mem_wreg,
14 input logic [ `RegBus] mem_wdata,
15 input logic [ `RegBus] mem_hi,
16 input logic [ `RegBus] mem_lo,
17 input logic mem_whilo,
18
19 //送到回写阶段的信息
20 output logic [`RegAddrBus] wb_wd,
21 output logic wb_wreg,
22 output logic [ `RegBus] wb_wdata,
23 output logic [ `RegBus] wb_hi,
24 output logic [ `RegBus] wb_lo,
25 output logic wb_whilo
26
27);
28
29
30 always_ff @(posedge clk) begin
31 if (rst == `RstEnable) begin
32 wb_wd <= `NOPRegAddr;
33 wb_wreg <= `WriteDisable;
34 wb_wdata <= `ZeroWord;
35 wb_hi <= `ZeroWord;
36 wb_lo <= `ZeroWord;
37 wb_whilo <= `WriteDisable;
38 end else if (stall[4] == `Stop && stall[5] == `NoStop) begin
39 wb_wd <= `NOPRegAddr;
40 wb_wreg <= `WriteDisable;
41 wb_wdata <= `ZeroWord;
42 wb_hi <= `ZeroWord;
43 wb_lo <= `ZeroWord;
44 wb_whilo <= `WriteDisable;
45 end else if (stall[4] == `NoStop) begin
46 wb_wd <= mem_wd;
47 wb_wreg <= mem_wreg;
48 wb_wdata <= mem_wdata;
49 wb_hi <= mem_hi;
50 wb_lo <= mem_lo;
51 wb_whilo <= mem_whilo;
52 end //if
53 end //always
54
55
56endmodule
解读
实现了内存回写(Memory Write Back)模块。
设计意图
简要而言,该模块旨在根据来自控制模块和访存阶段的信息,将需要回写到寄存器的数据和控制信号传递给回写阶段。
具体而言,根据控制模块的stall
信号,如果stall[4]
为Stop
且stall[5]
为NoStop
,则表示需要停止回写,将回写相关的信号置为默认值。否则,将来自访存阶段的信息传递到回写阶段。
端口
-
clk
:输入时钟信号 -
rst
:复位信号 -
stall
:来自控制模块的信息,用于控制回写是否停止 -
mem_wd
:来自访存阶段的目标寄存器地址 -
mem_wreg
:来自访存阶段的写使能信号 -
mem_wdata
:来自访存阶段的写数据 -
mem_hi
:来自访存阶段的高位数据 -
mem_lo
:来自访存阶段的低位数据 -
mem_whilo
:来自访存阶段的写使能信号 -
wb_wd
:送到回写阶段的目标寄存器地址 -
wb_wreg
:送到回写阶段的写使能信号 -
wb_wdata
:送到回写阶段的写数据 -
wb_hi
:送到回写阶段的高位数据 -
wb_lo
:送到回写阶段的低位数据 -
wb_whilo
:送到回写阶段的写使能信号
伪代码
如果复位信号被使能:
将回写相关信号置为默认值
否则如果stall[4]为Stop且stall[5]为NoStop:
将回写相关信号置为默认值
否则如果stall[4]为NoStop:
将来自访存阶段的信息传递到回写阶段
实现思路
在时钟上升沿触发的always_ff
块中,根据不同的情况对回写相关信号进行赋值。
-
如果复位信号被使能,将回写相关信号置为默认值。
-
如果
stall[4]
为Stop
且stall[5]
为NoStop
,表示需要停止回写,将回写相关的信号置为默认值。 -
如果
stall[4]
为NoStop
,将来自访存阶段的信息传递到回写阶段,即将相应的输入信号赋值给输出信号。
参考资料
本文与 AI 合作完成。