summaryrefslogtreecommitdiff
path: root/nandgame/alu.sv
blob: 1048f378e2a092c8c5de0659d2a80079f15ae4fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// nandgame ALU

`timescale 1us/1us

`include "nandgame_types.v"
`include "arith_unit.sv"
`include "logic_unit.sv"

module  alu #(
  parameter DATA_WIDTH = 16
) (
  input [(DATA_WIDTH-1):0] X,
  input [(DATA_WIDTH-1):0] Y,
  input logic u,
  input logic [1:0] opcode,
  input logic zx,
  input logic sw,

  output logic [(DATA_WIDTH-1):0] RES
);

logic [(DATA_WIDTH-1):0] MyX = zx ? 0 : sw ? Y : X;
logic [(DATA_WIDTH-1):0] MyY = sw ? X : Y;
logic [(DATA_WIDTH-1):0] MyResA;
logic [(DATA_WIDTH-1):0] MyResL;

arith_unit au (
  .X(MyX),
  .Y(MyY),
  .RES(MyResA),
  .operation(opcode)
);

logic_unit lu (
  .X(MyX),
  .Y(MyY),
  .RES(MyResL),
  .operation(opcode)
);

assign RES = u ? MyResA : MyResL;


endmodule