// DESCRIPTION: Verilator: Verilog Test module // // A class type parameter whose default reads $bits of a sibling type // parameter must not freeze that sibling at its default width when other // parameters of the interface are overridden (#7711). // // This file ONLY is placed under the Creative Commons Public Domain. // SPDX-FileCopyrightText: 2026 Wilson Snyder // SPDX-License-Identifier: CC0-1.0 class cls #( int width ); endclass interface ifc #( parameter int width = 8, parameter type dtype = logic [width-1:0], parameter type cparam = cls#($bits(dtype)) ); dtype data; endinterface module t; // width is overridden, dtype keeps its default logic[width-1:0], and the // class type parameter is overridden. dtype must follow width (1 bit). ifc #( .width(1), .cparam(cls #(1)) ) inst1 (); // Same interface left at its default width (8 bits) must still work. ifc inst8 (); always_comb inst1.data = 1'b0; initial begin if ($bits(inst1.data) != 1) begin $write("%%Error: $bits(inst1.data)=%0d exp=1\n", $bits(inst1.data)); $stop; end if ($bits(inst8.data) != 8) begin $write("%%Error: $bits(inst8.data)=%0d exp=8\n", $bits(inst8.data)); $stop; end $write("*-* All Finished *-*\n"); $finish; end endmodule