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