// alu4_grader_tb.v // ALU testbench // ------------------------------------------------------------------ // Copyright (c) 2007 Susan Lysecky, University of Arizona // Permission to copy is granted provided that this header remains // intact. This software is provided with no warranties. // ------------------------------------------------------------------ `timescale 1ns / 1ps module Testbench; // --------------------------------------------------------------------------- // ALU test module // --------------------------------------------------------------------------- reg [3:0] A_t, B_t; reg x_t, y_t, z_t; reg Cin_t; wire [3:0] Result_t; wire Cout_t, Overflow_t; ALU_beh ALU_beh_1 (A_t, B_t, x_t, y_t, z_t, Overflow_t, Result_t, Cin_t, Cout_t); //ALU_struct ALU_struct_1(A_t, B_t, x_t, y_t, z_t, Overflow_t, Result_t, Cin_t, Cout_t); initial begin Cin_t <= 0; // ---------------------------------------------- //case xyz = 000, Result = A // ---------------------------------------------- x_t <= 0; y_t <= 0; z_t <= 0; A_t <= 4'b0000; B_t <= 4'b0000; #1 if (Result_t != 4'b0000) $display("Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); A_t <= 4'b0010; B_t <= 4'b1111; #1 if (Result_t != 4'b0010) $display("Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); A_t <= 4'b0111; B_t <= 4'b0110; #1 if (Result_t != 4'b0111) $display("Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); A_t <= 4'b1111; B_t <= 4'b1111; #1 if (Result_t != 4'b1111) $display("Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); // ---------------------------------------------- //case xyz = 001, Result = B // ---------------------------------------------- x_t <= 0; y_t <= 0; z_t <= 1; A_t <= 4'b0011; B_t <= 4'b1100; #1 if (Result_t != 4'b1100) $display("Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); A_t <= 4'b0110; B_t <= 4'b0000; #1 if (Result_t != 4'b0000) $display("Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); A_t <= 4'b0111; B_t <= 4'b0110; #1 if (Result_t != 4'b0110) $display("Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); A_t <= 4'b1111; B_t <= 4'b1111; #1 if (Result_t != 4'b1111) $display("Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); // ---------------------------------------------- //case xyz = 010, Result = A + B // ---------------------------------------------- x_t <= 0; y_t <= 1; z_t <= 0; A_t <= 4'b0000; B_t <= 4'b0000; #1 if (Result_t != 4'b0000) $display("Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); A_t <= 4'b1111; B_t <= 4'b1111; #1 if (Result_t != 4'b1110) $display("Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); if (Cout_t != 1) $display("Cout Error: Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); A_t <= 4'b0001; B_t <= 4'b0011; #1 if (Result_t != 4'b0100) $display("Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); A_t <= 4'b0110; B_t <= 4'b0100; #1 if (Result_t != 4'b1010) $display("Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); if (Overflow_t != 1) $display("Overflow Error: Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); A_t <= 4'b1110; B_t <= 4'b1101; #1 if (Result_t != 4'b1011) $display("Case xyz = %b%b%b, Case 5", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 5", x_t, y_t, z_t); if (Cout_t != 1) $display("Cout Error: Case xyz = %b%b%b, Case 5", x_t, y_t, z_t); A_t <= 4'b1001; B_t <= 4'b1101; #1 if (Result_t != 4'b0110) $display("Case xyz = %b%b%b, Case 6", x_t, y_t, z_t); if (Overflow_t != 1) $display("Overflow Error: Case xyz = %b%b%b, Case 6", x_t, y_t, z_t); if (Cout_t != 1) $display("Cout Error: Case xyz = %b%b%b, Case 6", x_t, y_t, z_t); A_t <= 4'b1001; B_t <= 4'b0011; #1 if (Result_t != 4'b1100) $display("Case xyz = %b%b%b, Case 7", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 7", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 7", x_t, y_t, z_t); A_t <= 4'b0001; B_t <= 4'b1111; #1 if (Result_t != 4'b0000) $display("Case xyz = %b%b%b, Case 8", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 8", x_t, y_t, z_t); if (Cout_t != 1) $display("Cout Error: Case xyz = %b%b%b, Case 8", x_t, y_t, z_t); // ---------------------------------------------- //case xyz = 011, Result = A - B // ---------------------------------------------- x_t <= 0; y_t <= 1; z_t <= 1; A_t <= 4'b0000; B_t <= 4'b0000; #1 if (Result_t != 4'b0000) $display("Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); if (Cout_t != 1) $display("Cout Error: Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); A_t <= 4'b1111; B_t <= 4'b1111; #1 if (Result_t != 4'b0000) $display("Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); if (Cout_t != 1) $display("Cout Error: Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); A_t <= 4'b0111; B_t <= 4'b0100; #1 if (Result_t != 4'b0011) $display("Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); if (Cout_t != 1) $display("Cout Error: Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); A_t <= 4'b0010; B_t <= 4'b0111; #1 if (Result_t != 4'b1011) $display("Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); A_t <= 4'b1000; B_t <= 4'b1100; #1 if (Result_t != 4'b1100) $display("Case xyz = %b%b%b, Case 5", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 5", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 5", x_t, y_t, z_t); A_t <= 4'b1110; B_t <= 4'b1100; #1 if (Result_t != 4'b0010) $display("Case xyz = %b%b%b, Case 6", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 6", x_t, y_t, z_t); if (Cout_t != 1) $display("Cout Error: Case xyz = %b%b%b, Case 6", x_t, y_t, z_t); A_t <= 4'b1100; B_t <= 4'b0011; #1 if (Result_t != 4'b1001) $display("Case xyz = %b%b%b, Case 7", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 7", x_t, y_t, z_t); if (Cout_t != 1) $display("Cout Error: Case xyz = %b%b%b, Case 7", x_t, y_t, z_t); A_t <= 4'b0001; B_t <= 4'b1011; #1 if (Result_t != 4'b0110) $display("Case xyz = %b%b%b, Case 8", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 8", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 8", x_t, y_t, z_t); A_t <= 4'b1011; B_t <= 4'b0101; #1 if (Result_t != 4'b0110) $display("Case xyz = %b%b%b, Case 9", x_t, y_t, z_t); if (Overflow_t != 1) $display("Overflow Error: Case xyz = %b%b%b, Case 9", x_t, y_t, z_t); if (Cout_t != 1) $display("Cout Error: Case xyz = %b%b%b, Case 9", x_t, y_t, z_t); // ---------------------------------------------- //case xyz = 100, Result = A + 1 // ---------------------------------------------- x_t <= 1; y_t <= 0; z_t <= 0; A_t <= 4'b0000; B_t <= 4'b0000; #1 if (Result_t != 4'b0001) $display("xyz = %b%b%b, Case 1", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); A_t <= 4'b1111; B_t <= 4'b1111; #1 if (Result_t != 4'b0000) $display("xyz = %b%b%b, Case 2", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); if (Cout_t != 1) $display("Cout Error: Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); A_t <= 4'b0110; B_t <= 4'b0000; #1 if (Result_t != 4'b0111) $display("xyz = %b%b%b, Case 3", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); A_t <= 4'b0111; B_t <= 4'b0000; #1 if (Result_t != 4'b1000) $display("xyz = %b%b%b, Case 4", x_t, y_t, z_t); if (Overflow_t != 1) $display("Overflow Error: Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); A_t <= 4'b1010; B_t <= 4'b1111; #1 if (Result_t != 4'b1011) $display("xyz = %b%b%b, Case 5", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 5", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 5", x_t, y_t, z_t); // ---------------------------------------------- //case xyz = 101, Result = A' // ---------------------------------------------- x_t <= 1; y_t <= 0; z_t <= 1; A_t <= 4'b0000; B_t <= 4'b0000; #1 if (Result_t != 4'b1111) $display("xyz = %b%b%b, Case 1", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); A_t <= 4'b1111; B_t <= 4'b1111; #1 if (Result_t != 4'b0000) $display("xyz = %b%b%b, Case 2", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); A_t <= 4'b0110; B_t <= 4'b0000; #1 if (Result_t != 4'b1001) $display("xyz = %b%b%b, Case 3", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); A_t <= 4'b1100; B_t <= 4'b0000; #1 if (Result_t != 4'b0011) $display("xyz = %b%b%b, Case 4", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); // ---------------------------------------------- //case xyz = 110, Result = A AND B // ---------------------------------------------- x_t <= 1; y_t <= 1; z_t <= 0; A_t <= 4'b0000; B_t <= 4'b0000; #1 if (Result_t != 4'b0000) $display("Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); A_t <= 4'b0000; B_t <= 4'b1111; #1 if (Result_t != 4'b0000) $display("Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); A_t <= 4'b0110; B_t <= 4'b0010; #1 if (Result_t != 4'b0010) $display("Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); A_t <= 4'b1010; B_t <= 4'b1111; #1 if (Result_t != 4'b1010) $display("Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); A_t <= 4'b1111; B_t <= 4'b1111; #1 if (Result_t != 4'b1111) $display("Case xyz = %b%b%b, Case 5", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 5", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 5", x_t, y_t, z_t); // ---------------------------------------------- //case xyz = 111, Result = A OR B // ---------------------------------------------- x_t <= 1; y_t <= 1; z_t <= 1; A_t <= 4'b0000; B_t <= 4'b0000; #1 if (Result_t != 4'b0000) $display("Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 1", x_t, y_t, z_t); A_t <= 4'b0000; B_t <= 4'b1111; #1 if (Result_t != 4'b1111) $display("Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 2", x_t, y_t, z_t); A_t <= 4'b0110; B_t <= 4'b0010; #1 if (Result_t != 4'b0110) $display("Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 3", x_t, y_t, z_t); A_t <= 4'b1010; B_t <= 4'b1111; #1 if (Result_t != 4'b1111) $display("Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 4", x_t, y_t, z_t); A_t <= 4'b1111; B_t <= 4'b1111; #1 if (Result_t != 4'b1111) $display("Case xyz = %b%b%b, Case 5", x_t, y_t, z_t); if (Overflow_t != 0) $display("Overflow Error: Case xyz = %b%b%b, Case 5", x_t, y_t, z_t); if (Cout_t != 0) $display("Cout Error: Case xyz = %b%b%b, Case 5", x_t, y_t, z_t); end endmodule