`include "wbavr_alu.v" `include "wbavr_consts.v" module wbavr_alu_tb(); reg [4:0] alu_cmd_i; reg [7:0] data_0_i; reg [7:0] data_1_i; reg [7:0] data_2_i; reg [7:0] flags_i; reg [7:0] data_0_o_exp; reg [7:0] data_1_o_exp; reg [7:0] flags_o_exp; wire [7:0] data_0_o; wire [7:0] data_1_o; wire [7:0] flags_o; wire fail; integer failcount; `define CHECK check( fail, failcount ); task check; input fail; inout failcount; integer failcount; begin if( fail ) begin failcount = failcount + 1; $display( "%6g %2h: %2h %2h %2h %2h -> %2h (%2h) %2h (%2h) %2h (%2h) %b", $time, alu_cmd_i, data_0_i, data_1_i, data_2_i, flags_i, data_0_o, data_0_o_exp, data_1_o, data_1_o_exp, flags_o, flags_o_exp, fail ); end end endtask initial begin $dumpfile( "wbavr_alu_tb.vcd" ); $dumpvars( 1 ); failcount = 0; alu_cmd_i = 0; data_0_i = 0; data_1_i = 0; data_2_i = 0; flags_i = 0; data_0_o_exp = 0; data_1_o_exp = 0; flags_o_exp = 0; #10 `CHECK #10 data_0_o_exp = 1; #10 `CHECK // ++++++ add tests... $display( "wbavr_alu_tb:" ); if( failcount == 0 ) $display( " PASSED" ); else $display( " FAILED: %d failures", failcount ); #10 $finish; end wbavr_alu U0( .alu_cmd_i(alu_cmd_i), .data_0_i(data_0_i), .data_1_i(data_1_i), .data_2_i(data_2_i), .flags_i(flags_i), .data_0_o(data_0_o), .data_1_o(data_1_o), .flags_o(flags_o) ); assign fail = |{ data_0_o != data_0_o_exp, data_1_o != data_1_o_exp, flags_o != flags_o_exp }; endmodule