`include "defines.vh"
module signal_generation_unit (
input wire [`STAGE_COUNT-1:0] pipeline_stage,
input wire [`OPCODE_COUNT-1:0] opcode_type,
input wire [`GROUP_COUNT-1:0] opcode_group,
output wire [`SIGNAL_COUNT-1:0] signals
);
/* Control signals */
/* Register interface logic */
/* TODO 4: STS */
/* TODO 7: register reads */
assign signals
[`CONTROL_REG_RR_READ] =
(pipeline_stage == `STAGE_ID) &&
(opcode_group[`GROUP_ALU_TWO_OP] || opcode_group[`GROUP_REGISTER] || opcode_group[`GROUP_STORE]
|| opcode_group[`GROUP_LOAD_INDIRECT]);
assign signals[`CONTROL_REG_RR_WRITE] = 0;
assign signals[`CONTROL_REG_RD_READ] =
(pipeline_stage == `STAGE_ID) &&
(opcode_group[`GROUP_ALU] || opcode_group[`GROUP_STORE_INDIRECT]
||opcode_group[`GROUP_LOAD_INDIRECT]);
assign signals[`CONTROL_REG_RD_WRITE] =
/* TODO 3: LDI */
/* TODO 5,6,7: register writes */
(pipeline_stage == `STAGE_WB) &&
(opcode_group[`GROUP_ALU] || opcode_group[`GROUP_LOAD]
|| opcode_group[`GROUP_REGISTER] || opcode_group[`GROUP_STORE_DIRECT]);
/* Memory interface logic */
/* TODO 5,6: LOADs */
assign signals[`CONTROL_MEM_READ] =
(pipeline_stage == `STAGE_MEM) &&
(opcode_group[`GROUP_LOAD]);
/* TODO 4: STS
inspectati bus_interface_unit.v */
assign signals[`CONTROL_MEM_WRITE] =
(pipeline_stage == `STAGE_MEM) &&
opcode_group[`GROUP_STORE];
endmodule
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}