CPU 速通系列 4-1:MEM 模块

代码

Path src/cpu/mem.sv

 1`include "defines.svh"
 2
 3module mem (
 4
 5    input logic rst,
 6
 7    //来自执行阶段的信息
 8    input logic [`RegAddrBus] wd_i,
 9    input logic               wreg_i,
10    input logic [    `RegBus] wdata_i,
11    input logic [    `RegBus] hi_i,
12    input logic [    `RegBus] lo_i,
13    input logic               whilo_i,
14
15    //送到回写阶段的信息
16    output logic [`RegAddrBus] wd_o,
17    output logic               wreg_o,
18    output logic [    `RegBus] wdata_o,
19    output logic [    `RegBus] hi_o,
20    output logic [    `RegBus] lo_o,
21    output logic               whilo_o
22
23);
24
25
26    always_comb begin
27        if (rst == `RstEnable) begin
28            wd_o    = `NOPRegAddr;
29            wreg_o  = `WriteDisable;
30            wdata_o = `ZeroWord;
31            hi_o    = `ZeroWord;
32            lo_o    = `ZeroWord;
33            whilo_o = `WriteDisable;
34        end else begin
35            wd_o    = wd_i;
36            wreg_o  = wreg_i;
37            wdata_o = wdata_i;
38            hi_o    = hi_i;
39            lo_o    = lo_i;
40            whilo_o = whilo_i;
41        end  //if
42    end  //always
43
44
45endmodule

解读

实现了一个存储器模块,用于存储和传递数据。

设计意图

简要而言,这个模块的设计意图是在给定的输入条件下,根据时钟信号传递相应的数据。


具体而言,这个模块需要根据输入的信号决定输出的数据,同时在复位信号(rst)为使能状态时,将输出数据设置为默认值。

端口

  • clk:输入时钟信号

  • rst:复位信号

来自执行阶段的信息:

  • wd_i:写寄存器的地址

  • wreg_i:写寄存器使能信号

  • wdata_i:写入的数据

  • hi_i:hi寄存器的数据

  • lo_i:lo寄存器的数据

  • whilo_i:whilo寄存器使能信号

送到回写阶段的信息:

  • wd_o:写寄存器的地址

  • wreg_o:写寄存器使能信号

  • wdata_o:写入的数据

  • hi_o:hi寄存器的数据

  • lo_o:lo寄存器的数据

  • whilo_o:whilo寄存器使能信号

实现思路

always_comb块中,首先判断复位信号(rst)是否使能。如果使能,则将输出信号设置为默认值;否则,将输出信号设置为相应的输入信号值。通过这样的逻辑判断,实现了根据输入条件传递数据的功能。

参考资料

本文与 AI 合作完成。