module mccpu( clk, rst, instr, readdata, PC, MemWrite, adr, writedata, reg_sel, reg_data);
assign Op = instr[31:26];
assign Funct = instr[5:0];
assign rs = instr[25:21];
assign rt = instr[20:16];
assign rd = instr[15:11];
assign shamt = {27'b0, instr[10:6]}; // shamt
assign Imm16 = instr[15:0];
assign IMM = instr[25:0];
.clk(clk), .rst(rst), .Zero(Zero), .Op(Op), .Funct(Funct),
.RegWrite(RegWrite), .MemWrite(MemWrite),
.PCWrite(PCWrite), .IRWrite(IRWrite),
.EXTOp(EXTOp), .ALUOp(ALUOp), .PCSource(PCSource),
.ALUSrcA(ALUSrcA), .ALUSrcB(ALUSrcB),
.GPRSel(GPRSel), .WDSel(WDSel), .IorD(IorD)
.clk(clk), .rst(rst), .en(PCWrite), .d(NPC), .q(PC)
.d0(aluresult), .d1(aluout), .d2({PC[31:28], IMM, 2'b00}), .d3(RD1),
.d0(PC), .d1(aluout), .s(IorD), .y(adr)
.clk(clk), .rst(rst), .en(IRWrite), .d(readdata), .q(instr)
.clk(clk), .rst(rst), .d(readdata), .q(data)
.clk(clk), .rst(rst), .RFWr(RegWrite),
.A1(rs), .A2(rt), .A3(A3),
.WD(WD), .RD1(RD1), .RD2(RD2),
.reg_sel(reg_sel), .reg_data(reg_data)
flopr #(32) U_AR(clk, rst, RD1, A);
flopr #(32) U_BR(clk, rst, RD2, B);
.d0(PC), .d1(A), .d2(shamt), .d3(0), .s(ALUSrcA), .y(ALUA)
.Imm16(Imm16), .EXTOp(EXTOp), .Imm32(Imm32)
.d0(B), .d1(4), .d2(Imm32), .d3({{14{Imm16[15]}}, Imm16, 2'b00}),
.A(ALUA), .B(ALUB), .ALUOp(ALUOp), .C(aluresult), .Zero(Zero)
.clk(clk), .rst(rst), .d(aluresult), .q(aluout)
mux4 #(5) U_MUX4_GPR_A3 (
.d0(rd), .d1(rt), .d2(5'b11111), .d3(5'b0), .s(GPRSel), .y(A3)
mux4 #(32) U_MUX4_GPR_WD (
.d0(aluout), .d1(data), .d2(PC), .d3(32'b0), .s(WDSel), .y(WD)