// DESCRIPTION: Verilator: Test generate index usage. // // The code illustrates a problem in Verilator's handling of constant // expressions inside generate indexes. // // This is a regression test against issue #517. // // **If you do not wish for your code to be released to the public // please note it here, otherwise:** // // This file ONLY is placed under the Creative Commons Public Domain. // SPDX-FileCopyrightText: 2012 Jeremy Bennett // SPDX-License-Identifier: CC0-1.0 `define START 8 `define SIZE 4 `define END (`START + `SIZE) module t ( input clk ); reg [`END-1:0] y; wire [`END-1:0] x; foo foo_i ( .y(y), .x(x), .clk(clk) ); always @(posedge clk) begin $write("*-* All Finished *-*\n"); $finish; end endmodule // t module foo ( output wire [`END-1:0] y, input wire [`END-1:0] x, input wire clk ); function peek_bar; peek_bar = bar_inst[`START].i_bar.r; // this is ok peek_bar = bar_inst[`START+1].i_bar.r; // this fails, should not. endfunction genvar g; generate for (g = `START; g < `END; g = g + 1) begin : bar_inst bar i_bar ( .x(x[g]), .y(y[g]), .clk(clk) ); end endgenerate endmodule : foo module bar ( output wire y, input wire x, input wire clk ); reg r = 0; assign y = r; always @(posedge clk) begin r = x ? ~x : y; end endmodule : bar