1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
// DESCRIPTION: Verilator: Verilog Test module
//
// Copyright 2010 by Wilson Snyder. 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-License-Identifier: LGPL-3.0-only OR Artistic-2.0
/* verilator public_on */
typedef struct packed {
logic [3:0][7:0] adr; // address
logic [3:0][7:0] dat; // data
int sel; // select
} t_bus;
interface TestInterface();
logic [31:0] addr;
modport source (input addr);
endinterface
module t ( /*AUTOARG*/
// Outputs
x,
// Inputs
clk,
a
);
parameter int do_generate = 1;
parameter longint long_int = 64'h123456789abcdef;
input clk;
input [7:0] a;
output reg [7:0] x;
reg onebit;
reg [2:1] twoone;
reg [2:1] fourthreetwoone[4:3];
reg LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND ;
// verilator lint_off ASCRANGE
reg [0:61] quads[2:3];
// verilator lint_on ASCRANGE
reg [31:0] count;
reg [31:0] half_count;
reg [7:0] text_byte;
reg [15:0] text_half;
reg [31:0] text_word;
reg [63:0] text_long;
reg [511:0] text;
integer status;
real real1;
string str1;
t_bus bus1;
sub sub ();
TestInterface intf_arr[2]();
initial begin
$write("*-* All Finished *-*\n");
$finish();
end
genvar i;
generate
for (i = 1; i <= 2; i = i + 1) begin : arr
arr #(.LENGTH(i)) arr ();
end
for (i = 1; i <= 3; i = i + 1) begin : outer_scope
parameter int scoped_param = i * 2;
genvar j;
for (j = 1; j <= 3; j = j + 1) begin : inner_scope
parameter int scoped_param_inner = scoped_param + 1;
arr #(.LENGTH(scoped_param_inner)) arr ();
end
end
endgenerate
sub_wrapper sub_wrap ();
generate
if (do_generate == 1) begin : cond_scope
sub scoped_sub ();
parameter int scoped_wire = 1;
sub_wrapper sub_wrap_gen ();
end else begin : cond_scope_else
sub scoped_sub_else ();
end
endgenerate
endmodule : t
module sub;
reg subsig1;
reg subsig2;
`ifdef IVERILOG
// stop icarus optimizing signals away
wire redundant = subsig1 | subsig2;
`endif
endmodule : sub
module arr;
parameter LENGTH = 1;
reg [LENGTH-1:0] sig;
reg [LENGTH-1:0] rfr;
reg check;
reg verbose;
initial begin
sig = {LENGTH{1'b0}};
rfr = {LENGTH{1'b0}};
end
always @(posedge check) begin
if (verbose) $display("%m : %x %x", sig, rfr);
if (check && sig != rfr) $stop;
check <= 0;
end
endmodule : arr
module sub_wrapper;
sub my_sub ();
endmodule
|