module alu_4b_tb (); reg[1:0] dS; reg[3:0] dP,dQ; wire[3:0] mY; integer loop1,loop2,ecnt; initial begin ecnt=0; $display("-- Testing add"); dS = 2'b00; // select add for (loop1=0;loop1<16;loop1=loop1+1) begin dP = loop1; for (loop2=0;loop2<16;loop2=loop2+1) begin dQ = loop2; #5; if (mY!==(dP+dQ)) begin ecnt = ecnt + 1; end #5; end end $display("-- Testing sub"); dS = 2'b01; // select sub for (loop1=0;loop1<16;loop1=loop1+1) begin dP = loop1; for (loop2=0;loop2<16;loop2=loop2+1) begin dQ = loop2; #5; if (mY!==(dP-dQ)) begin ecnt = ecnt + 1; end #5; end end $display("-- Testing and"); dS = 2'b10; // select and for (loop1=0;loop1<16;loop1=loop1+1) begin dP = loop1; for (loop2=0;loop2<16;loop2=loop2+1) begin dQ = loop2; #5; if (mY!==(dP&dQ)) begin ecnt = ecnt + 1; end #5; end end $display("-- Testing or"); dS = 2'b11; // select or for (loop1=0;loop1<16;loop1=loop1+1) begin dP = loop1; for (loop2=0;loop2<16;loop2=loop2+1) begin dQ = loop2; #5; if (mY!==(dP|dQ)) begin ecnt = ecnt + 1; end #5; end end if (ecnt==0) begin $display("-- Module alu_4b verified!"); end else begin $display("** Module alu_4b with error(s)! (%d)",ecnt); end $stop; end alu_4b dut (dS,dP,dQ,mY); endmodule