自己参考代码分析
验证I型运算指令
源代码
package alu_defs;
enum logic [3:0] {
ADD = 4'b0001,
SUB = 4'b0010,
AND = 4'b0011,
OR = 4'b0100,
XOR = 4'b0101,
SRA = 4'b0110,
SLL = 4'b0111,
SRL = 4'b1000
} aluop;
endpackage
`default_nettype none
// --------------------------------------------------------------------
// CPU 模块
// --------------------------------------------------------------------
module CPU
#(
parameter DATAWIDTH = 32,
parameter ADDRWIDTH = 32
)
(
input wire iCPU_Reset,
input wire iCPU_Clk,
// 指令存储器接口
output wire [ADDRWIDTH-1:0] oIM_Addr, //指令存储器地址
input wire [DATAWIDTH-1:0] iIM_Data, //指令存储器数据
// 数据存储器接口
input wire [DATAWIDTH-1:0] iReadData, //数据存储器读数据
output wire [DATAWIDTH-1:0] oWriteData, //数据存储器写数据
output wire [ADDRWIDTH-1:0] oAB, //数据存储器地址
output wire oWR, //数据存储器写使能
// 连接调试器的信号
output wire [ADDRWIDTH-1:0] oCurrent_PC,
output wire oFetch,
input wire iScanClk,
input wire iScanIn,
output wire oScanOut,
input wire [1:0] iScanCtrl
);
/** The input port is replaced with an internal signal **/
wire clk = iCPU_Clk;
wire reset = iCPU_Reset;
// Instruction parts
logic [31:0] pc, nextPC;
logic [31:0] instruction; // instruction code
assign ne