Files
WMU-ECE-3570-Lab/lab2CA.srcs/sources_1/new/ALU.v
goochey 54cccd419f Lots
Lots
2019-02-16 17:40:18 -05:00

109 lines
2.1 KiB
Verilog

`timescale 1ns / 1ps
module ALU(
input wire [2:0] opcode, // NOT the same as the instruction set opcode
input wire [8:0] operand0,
input wire [8:0] operand1,
output wire [8:0] result
);
// Wires for connecting the modules to the mux
wire [8:0] result_A,result_B,result_C,result_D,result_E,result_F,result_G,result_H;
// A (000) - Add
add_9bit add0(
.A(operand0),
.B(operand1),
.Cin(1'b0),
.Sum(result_A));
// B (001) - Subtract
sub_9bit sub0(
.A(operand0),
.B(operand1),
.C(result_B));
// C (010) - OR
or_9bit or0(
.A(operand0),
.B(operand1),
.C(result_C));
// D (011) - NOR
nor_9bit nor0(
.A(operand0),
.B(operand1),
.C(result_D));
// E (100) - AND
and_9bit and0(
.A(operand0),
.B(operand1),
.C(result_E));
// F (101) - Shift Logical Left
shift_logical_left sll(
.A(operand0),
.B(result_F));
// G (110) - Shift Logical Right
shift_logical_right slr(
.A(operand0),
.B(result_G));
// H (111)
// MUX chooses which result to show based on the ALU's opcode
mux_8_1 mux0(
.switch(opcode),
.A(result_A),
.B(result_B),
.C(result_C),
.D(result_D),
.E(result_E),
.F(result_F),
.G(result_G),
.H(result_H),
.out(result));
endmodule
//testbench
//module alu_tb();
//reg [8:0] a;
//reg [8:0] b;
//reg [2:0] c;
//wire [8:0] d;
//ALU alu0(
//.operand0(a),
//.operand1(b),
//.opcode(c),
//.result(d));
// initial begin
// a = 9'b000000111;
// b = 9'b000111000;
// c = 3'b000;
// #5
// a = 9'b000011000;
// b = 9'b000011000;
// c = 3'b001;
// #5
// a = 9'b101010100;
// b = 9'b010101011;
// c = 3'b010;
// #5
// a = 9'b101010100;
// b = 9'b010101000;
// c = 3'b011;
// #5
// a = 9'b000110000;
// b = 9'b000111000;
// c = 3'b100;
// #5
// a = 9'b01011000;
// c = 3'b101;
// #5
// a = 9'b00001010;
// c = 3'b110;
// #5
// #5 $finish;
// end
//endmodule