q3kmips/rtl/verilog/qm_decode.v

49 lines
884 B
Verilog

module qm_decode(
/// datapath
// input instruction register
input wire [31:0] di_IR,
// output instruction register
output wire [31:0] do_IR,
// output first operand
output wire [31:0] do_A,
// output second operand
output wire [31:0] do_B,
// output immediate
output wire [31:0] do_Imm,
// control signals
// debug signals
input wire [4:0] dbg_wa,
input wire dbg_we,
input wire [31:0] dbg_wd
);
// internal signals from the IR
wire [4:0] rs;
wire [4:0] rt;
wire [15:0] imm;
assign rs = di_IR[25:21];
assign rt = di_IR[20:16];
assign imm = di_IR[15:0];
qm_regfile regfile(
.ra1(rs),
.ra2(rt),
.rd1(do_A),
.rd2(do_B),
// unused
.wa3(dbg_wa),
.we3(dbg_we),
.wd3(dbg_wd)
);
// sign extend imm
assign do_Imm[31:0] = { {16{imm[15]}}, imm[15:0] };
assign do_IR = di_IR;
endmodule