`include "wbavr_multiply.v" module wbavr_multiply_tb(); reg [7:0] a; reg a_signed; reg [7:0] b; reg b_signed; reg float; wire [7:0] prod_lo; wire [7:0] prod_hi; wire carry; wire [16:0] result; reg [16:0] expected; 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 (%b%b%b) = %5h (=%5h) fail: %b", $time, a, b, float, b_signed, a_signed, result, expected, fail ); end end endtask initial begin $dumpfile( "wbavr_multiply_tb.vcd" ); $dumpvars( 1 ); failcount = 0; a = 0; a_signed = 0; b = 0; b_signed = 0; float = 0; `include "wbavr_multiply_pattern.v" $display( "wbavr_multiply_tb:" ); if( failcount == 0 ) $display( " PASSED" ); else $display( " FAILED: %d failures", failcount ); #10 $finish; end wbavr_multiply U0( .a_i(a), .a_signed_i(a_signed), .b_i(b), .b_signed_i(b_signed), .float_i(float), .product_lo_o(prod_lo), .product_hi_o(prod_hi), .carry_o(carry) ); assign result = { carry, prod_hi, prod_lo }; assign fail = result != expected; endmodule