Question: ` include prj _ definition.v module CONTROL _ UNIT ( MEM _ DATA, RF _ DATA _ W , RF _ ADDR _

`include "prj_definition.v"
module CONTROL_UNIT(MEM_DATA, RF_DATA_W, RF_ADDR_W, RF_ADDR_R1, RF_ADDR_R2, RF_READ, RF_WRITE,
ALU_OP1, ALU_OP2, ALU_OPRN, MEM_ADDR, MEM_READ, MEM_WRITE,
RF_DATA_R1, RF_DATA_R2, ALU_RESULT, ZERO, CLK, RST);
// Output signals
// Outputs for register file
output [`DATA_INDEX_LIMIT:0] RF_DATA_W;
output [`ADDRESS_INDEX_LIMIT:0] RF_ADDR_W, RF_ADDR_R1, RF_ADDR_R2;
output RF_READ, RF_WRITE;
// Outputs for ALU
output [`DATA_INDEX_LIMIT:0] ALU_OP1, ALU_OP2;
output [`ALU_OPRN_INDEX_LIMIT:0] ALU_OPRN;
// Outputs for memory
output [`ADDRESS_INDEX_LIMIT:0] MEM_ADDR;
output MEM_READ, MEM_WRITE;
// Input signals
input [`DATA_INDEX_LIMIT:0] RF_DATA_R1, RF_DATA_R2, ALU_RESULT;
input ZERO, CLK, RST;
// Inout signal
inout [`DATA_INDEX_LIMIT:0] MEM_DATA;
// State nets
wire [2:0] proc_state;
PROC_SM state_machine(.STATE(proc_state),.CLK(CLK),.RST(RST));
always @ (proc_state)
begin
// TBD: Code for the control unit model
end
task print_instruction;
input [`DATA_INDEX_LIMIT:0] inst;
reg [5:0] opcode;
reg [4:0] rs;
reg [4:0] rt;
reg [4:0] rd;
reg [4:0] shamt;
reg [5:0] funct;
reg [15:0] immediate;
reg [25:0] address;
begin
// parse the instruction
// R-type
{opcode, rs, rt, rd, shamt, funct}= inst;
// I-type
{opcode, rs, rt, immediate }= inst;
// J-type
{opcode, address}= inst;
$write("@ %6dns ->[0X%08h]", $time, inst);
case(opcode)
// R-Type
6'h00 : begin
case(funct)
6'h20: $write("add r%02d, r%02d, r%02d;", rd, rs, rt);
6'h22: $write("sub r%02d, r%02d, r%02d;", rd, rs, rt);
6'h2c: $write("mul r%02d, r%02d, r%02d;", rd, rs, rt);
6'h24: $write("and r%02d, r%02d, r%02d;", rd, rs, rt);
6'h25: $write("or r%02d, r%02d, r%02d;", rd, rs, rt);
6'h27: $write("nor r%02d, r%02d, r%02d;", rd, rs, rt);
6'h2a: $write("slt r%02d, r%02d, r%02d;", rd, rs, rt);
6'h01: $write("sll r%02d, r%02d,0X%02h;", rd, rs, shamt);
6'h02: $write("srl r%02d, r%02d,0X%02h;", rd, rs, shamt);
6'h08: $write("jr r%02d;", rs);
default: $write("");
endcase
end
// I-type
6'h08 : $write("addi r%02d, r%02d,0X%04h;", rt, rs, immediate);
6'h1d : $write("muli r%02d, r%02d,0X%04h;", rt, rs, immediate);
6'h0c : $write("andi r%02d, r%02d,0X%04h;", rt, rs, immediate);
6'h0d : $write("ori r%02d, r%02d,0X%04h;", rt, rs, immediate);
6'h0f : $write("lui r%02d,0X%04h;", rt, immediate);
6'h0a : $write("slti r%02d, r%02d,0X%04h;", rt, rs, immediate);
6'h04 : $write("beq r%02d, r%02d,0X%04h;", rt, rs, immediate);
6'h05 : $write("bne r%02d, r%02d,0X%04h;", rt, rs, immediate);
6'h23 : $write("lw r%02d, r%02d,0X%04h;", rt, rs, immediate);
6'h2b : $write("sw r%02d, r%02d,0X%04h;", rt, rs, immediate);
// J-Type
6'h02 : $write("jmp 0X%07h;", address);
6'h03 : $write("jal 0X%07h;", address);
6'h1b : $write("push;");
6'h1c : $write("pop;");
default: $write("");
endcase
$write("
");
end
endtask
endmodule;
module PROC_SM(STATE,CLK,RST);
// list of inputs
input CLK, RST;
// list of outputs
output [2:0] STATE;
// TBD - implement the state machine here
endmodule;

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!