ECE171 project (computer science)

ahmedalmahmoud
TestAdderSubtractor1.v

module GoldenAdderSubtractor (S, A, B, CI, CO, F); input [7:0] A, B; input S; input CI; output reg CO; output reg [7:0] F; always@(S, A, B, CI) begin case ({S}) 1'b0: begin {CO, F}=A+B+CI; end 1'b1: begin CO=1'bz; F=A-B; end endcase end endmodule module testAdderSubtractor8bit(); reg [7:0] A, B; reg S; reg CI; wire CO, GCO; wire [7:0] F, GF; integer stimulus; reg error; parameter stimulusmax = 262144; //2^18 task ReportError; begin $display("\n***Error. S=%b A=%b B=%b CarryIn=%b | Expected F=%b CarryOut=%b | Returned F=%b Carryout=%b", S, A, B, CI, GF, GCO, F, CO); end endtask initial begin error = 0; $display ("\n ALU8Bit Test\n"); //00 A+B {S} = 1'b0; for (stimulus=0; stimulus < stimulusmax; stimulus = stimulus +1) begin {A, B, CI} = stimulus[16:0]; #100 if(F !== GF) begin ReportError; error=1; end end //01 A-B {S} = 1'b1; for (stimulus=0; stimulus < stimulusmax; stimulus = stimulus +1) begin {A, B, CI} = stimulus[16:0]; #100 if(F !== GF) begin ReportError; error=1; end end if (!error) $display("*** Congratulations! No errors detected\n"); else $display("*** Sorry. Try again.\n"); $finish(); end //Device under Test AdderSubtractor A1 (S, A, B, CI, CO, F); GoldenAdderSubtractor G1 (S, A, B, CI, GCO, GF); endmodule