alu.sv 709 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package alu_pkg;
  2. typedef enum logic [2:0] {
  3. ALU_ADD=3'b000,
  4. ALU_SUB=3'b001,
  5. ALU_AND=3'b010,
  6. ALU_OR =3'b011,
  7. ALU_SLT=3'b100,
  8. ALU_NOT=3'b101,
  9. ALU___0=3'b110,
  10. ALU_NOP=3'b111
  11. } e_alu_op;
  12. endpackage
  13. module alu(op, srcA, srcB, result, zero);
  14. input e_alu_op op;
  15. input word srcA;
  16. input word srcB;
  17. output word result;
  18. output logic zero;
  19. always_comb begin
  20. case(op)
  21. ALU_ADD: result = srcA + srcB;
  22. ALU_SUB: result = srcA - srcB;
  23. ALU_AND: result = srcA & srcB;
  24. ALU_OR : result = srcA | srcB;
  25. // ALU_SLT: result = srcA < srcB; // Not in use
  26. ALU_NOT: result = ~srcB;
  27. ALU_NOP: result = srcA;
  28. default: result = '0;
  29. endcase
  30. zero = result == '0;
  31. end
  32. endmodule