module SimpleGPU (
input [5:0] opcode, // 操作碼
input [31:0] A, B, // 輸入數據
output [31:0] Result, // 計算結果
output [31:0] MemDataOut // 記憶體讀取數據
);
wire ALUOp, MemRead, MemWrite, MemToReg;
wire [31:0] ALUResult, MemoryData;
// 實例化控制單元
ControlUnit CU (
.opcode(opcode),
.ALUOp(ALUOp),
.MemRead(MemRead),
.MemWrite(MemWrite),
.MemToReg(MemToReg)
);
// 實例化ALU
ALU alu (
.A(A),
.B(B),
.ALUOp(ALUOp),
.Result(ALUResult)
);
// 實例化記憶體
Memory mem (
.address(ALUResult), // 使用ALU結果作為記憶體地址
.write_data(B), // 從B寄存器寫入數據
.MemRead(MemRead),
.MemWrite(MemWrite),
.read_data(MemoryData)
);
// 根據MemToReg控制信號決定將哪個數據寫回寄存器
assign Result = (MemToReg) ? MemoryData : ALUResult;
assign MemDataOut = MemoryData;
endmodule