===== Cvičení 3 ===== ==== 1. ==== module maindec(Opcode, RegWrite, RegDst, ALUSrc, ALUOp, Branch, MemWrite, MemToReg); input [5:0] Opcode; output RegWrite; output RegDst; output ALUSrc; output [1:0] ALUOp; output Branch; output MemWrite; output MemToReg; reg[7:0] out=0; always @(*) case(Opcode) 6'b000000: out= 8'b11010000; 6'b100011: out= 8'b10100001; 6'b101011: out= 8'b00100010; 6'b000100: out= 8'b00001100; 6'b001000: out= 8'b10100000; endcase assign {RegWrite, RegDst, ALUSrc, ALUOp, Branch, MemWrite, MemToReg} = out; endmodule module aludec(ALUOp, Funct, ALUControl); input [1:0] ALUOp; input [5:0] Funct; output reg [2:0] ALUControl; always @(*) case(ALUOp) 2'b00: ALUControl = 3'b010; 2'b01: ALUControl = 3'b110; default: case(Funct) 6'b100000: ALUControl = 3'b010; 6'b100010: ALUControl = 3'b110; 6'b100100: ALUControl = 3'b000; 6'b100101: ALUControl = 3'b001; 6'b101010: ALUControl = 3'b111; endcase endcase endmodule module controlunit(Opcode, Funct, Zero, RegWrite, RegDst, ALUSrc, PCSrc, MemWrite, MemToReg, ALUControl); input [5:0] Opcode; input [5:0] Funct; input Zero; output RegWrite; output RegDst; output ALUSrc; output PCSrc; output MemWrite; output MemToReg; output [2:0] ALUControl; wire [1:0] ALUOp; wire Branch; maindec mdec(Opcode, RegWrite, RegDst, ALUSrc, ALUOp, Branch, MemWrite, MemToReg); aludec adec(ALUOp, Funct, ALUControl); assign PCSrc = Zero & Branch; endmodule ==== 2. ==== addi $s0, $0, 0x0010 lw $s1, 0($s0) //load a lw $s2, 4($s0) //load b lw $s3, 8($s0) //load c slt $t0, $s2, $s1 //if(b ~~DISCUSSION~~