/// EE 3755 -- Fall 2013 -- Computer Organization // /// /// Approximate state of MIPS functional sim code 15 Nov 2013 at end of class. `define MIPS_PROG "tfirst-live.v" `include "mipsmemmacros.v" module proc(exc,clk); input clk; output exc; // 0x40000000 add $2, $3, $4 reg [7:0] mem ['h400000:'h400200]; parameter O_type_r = 6'h0; parameter F_add = 6'h20; parameter F_sub = 6'h22; parameter O_addi = 6'h8; reg [31:0] pc, npc, ir; initial begin pc = 'h400000; npc = pc + 4; end reg [4:0] rs, rt, rd, sa; reg [5:0] opcode, func; reg [31:0] rs_val, rt_val, result, simmed, uimmed; reg [31:0] gpr [0:31]; reg [7:0] md; always @ ( posedge clk ) begin ir = {mem[pc],mem[pc+1],mem[pc+2],mem[pc+3]}; {opcode,rs,rt,rd,sa,func} = ir; // {opcode,rs,rt,immed} = ir; // {opcode,ii} = ir; // rd = rs + rt; How silly! rs_val = gpr[rs]; rt_val = gpr[rt]; uimmed = { 16'h0, ir[15:0] }; simmed = { ir[15] ? 16'hffff : 16'h0, ir[15:0] }; case ( opcode ) O_type_r: case ( func ) F_add: gpr[rd] = rs_val + rt_val; F_sub: gpr[rd] = rs_val - rt_val; default: $stop; endcase default: $stop; endcase pc = npc; npc = npc + 4; end endmodule `include "mips_fs_tb.v"