diff options
Diffstat (limited to 'nandgame')
| -rw-r--r-- | nandgame/hack_alu.sv | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/nandgame/hack_alu.sv b/nandgame/hack_alu.sv index 8ece81a..267b4a7 100644 --- a/nandgame/hack_alu.sv +++ b/nandgame/hack_alu.sv @@ -2,12 +2,8 @@ `timescale 1us/1us -`include "nandgame_types.v" -`include "arith_unit.sv" -`include "logic_unit.sv" - -`ifndef NANDGAME_ALU -`define NANDGAME_ALU +`ifndef HACK_ALU +`define HACK_ALU // See fig. 2.6 in book module alu #( @@ -41,26 +37,32 @@ module alu #( output logic negate_out ); -logic [(DATA_WIDTH-1):0] int_op_x /* verilator public */; -logic [(DATA_WIDTH-1):0] int_op_y /* verilator public */; +logic [(DATA_WIDTH-1):0] x1, x2, y1, y2, res1, res2 /* verilator public */; // logic [(DATA_WIDTH-1):0] int_result_arith; // logic [(DATA_WIDTH-1):0] int_result_logic; -// assign int_op_x = zx_in ? 0 -// : (sw_in ? Y_in : X_in); -// assign int_op_y = sw_in ? X_in : Y_in; +assign x1 = zx ? 0 : X_in; +assign y1 = zy ? 0 : Y_in; +assign x2 = nx ? -x1 : x1; +assign y2 = ny ? -y1 : y1; +assign res1 = f_arith_nlogic_in ? (x2 + y2) : (x2 & y2); +assign res2 = neg_out ? -res1 : res1; +assign result_out = res2; +assign zero_out = result_out == 0; +assign negate_out = result_out[DATA_WIDTH-1] == 1; +// assign y1 = sw_in ? X_in : Y_in; // arith_unit au ( -// .X_in(int_op_x), -// .Y_in(int_op_y), +// .X_in(x1), +// .Y_in(y1), // .result_out(int_result_arith), // .arith_operation_in(ArithCode'(opcode_in)) // ); // logic_unit lu ( -// .X_in(int_op_x), -// .Y_in(int_op_y), +// .X_in(x1), +// .Y_in(y1), // .result_out(int_result_logic), // .logic_operation_in(LogicCode'(opcode_in)) // ); |
