// DESCRIPTION: Verilator: Verilog Test module // // This program is free software; you can redistribute it and/or modify it // under the terms of either the GNU Lesser General Public License Version 3 // or the Perl Artistic License Version 2.0. // SPDX-FileCopyrightText: 2009 Wilson Snyder // SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 // verilog_format: off `ifdef VCS `define NO_SHORTREAL `endif `ifdef NC `define NO_SHORTREAL `endif `ifdef VERILATOR // Unsupported `define NO_SHORTREAL `endif // verilog_format: on module t; // Note these are NOT pure. import "DPI-C" function void dpii_clear(); import "DPI-C" function int dpii_count(input int ctr); import "DPI-C" function bit dpii_inc0(input int ctr); import "DPI-C" function bit dpii_inc1(input int ctr); import "DPI-C" function bit dpii_incx( input int ctr, input bit value ); integer i; integer j; integer k; bit b; int errors; task check1(integer line, bit got, bit ex); if (got != ex) begin $display("%%Error: Line %0d: Bad result, got=%0d expect=%0d", line, got, ex); errors++; end endtask task check(integer line, int got, int ex); if (got != ex) begin $display("%%Error: Line %0d: Bad result, got=%0d expect=%0d", line, got, ex); errors++; end endtask // Test loop initial begin dpii_clear(); j = 0; for (i = 0; i < 64; i++) begin if (i[0]) j = 0; else j = {31'b0, dpii_inc1(0)}; k = k + j; end $write("%x\n", k); check(`__LINE__, dpii_count(0), 32); if (|errors) $stop; $write("*-* All Finished *-*\n"); $finish; end endmodule