1// DESCRIPTION: Verilator: Verilog Test module 2// 3// This file ONLY is placed into the Public Domain, for any use, 4// without warranty, 2012 by Iztok Jeras. 5// SPDX-License-Identifier: CC0-1.0 6 7module t (/*AUTOARG*/ 8 // Inputs 9 clk 10 ); 11 12 input clk; 13 14 integer cnt = 0; 15 integer mod = 0; 16 17 // event counter 18 always @ (posedge clk) 19 if (cnt==20) begin 20 cnt <= 0; 21 mod <= mod + 1; 22 end else begin 23 cnt <= cnt + 1; 24 end 25 26 // finish report 27 always @ (posedge clk) 28 if (mod==3) begin 29 $write("*-* All Finished *-*\n"); 30 $finish; 31 end 32 33 // anonymous type variable declaration 34 enum logic [2:0] {red=1, orange, yellow, green, blue, indigo, violet} rainbow7; 35 36 // named type 37 typedef enum logic {OFF, ON} t_switch; 38 t_switch switch; 39 40 // numbering examples 41 enum integer {father, mother, son[2], daughter, gerbil, dog[3]=10, cat[3:5]=20, car[3:1]=30} family; 42 43 // test of raibow7 type 44 always @ (posedge clk) 45 if (mod==0) begin 46 // write value to array 47 if (cnt== 0) begin 48 rainbow7 <= rainbow7.first(); 49 // check number 50 if (rainbow7.num() !== 7 ) begin $display("%d", rainbow7.num() ); $stop(); end 51 if (rainbow7 !== 3'bxxx ) begin $display("%b", rainbow7 ); $stop(); end 52 end 53 else if (cnt== 1) begin 54 if (rainbow7 !== 3'd1 ) begin $display("%b", rainbow7 ); $stop(); end 55 if (rainbow7 !== red ) begin $display("%b", rainbow7 ); $stop(); end 56 rainbow7 <= rainbow7.next(); 57 end 58 else if (cnt== 2) begin 59 if (rainbow7 !== 3'd2 ) begin $display("%b", rainbow7 ); $stop(); end 60 if (rainbow7 !== orange ) begin $display("%b", rainbow7 ); $stop(); end 61 rainbow7 <= rainbow7.next(); 62 end 63 else if (cnt== 3) begin 64 if (rainbow7 !== 3'd3 ) begin $display("%b", rainbow7 ); $stop(); end 65 if (rainbow7 !== yellow ) begin $display("%b", rainbow7 ); $stop(); end 66 rainbow7 <= rainbow7.next(); 67 end 68 else if (cnt== 4) begin 69 if (rainbow7 !== 3'd4 ) begin $display("%b", rainbow7 ); $stop(); end 70 if (rainbow7 !== green ) begin $display("%b", rainbow7 ); $stop(); end 71 rainbow7 <= rainbow7.next(); 72 end 73 else if (cnt== 5) begin 74 if (rainbow7 !== 3'd5 ) begin $display("%b", rainbow7 ); $stop(); end 75 if (rainbow7 !== blue ) begin $display("%b", rainbow7 ); $stop(); end 76 rainbow7 <= rainbow7.next(); 77 end 78 else if (cnt== 6) begin 79 if (rainbow7 !== 3'd6 ) begin $display("%b", rainbow7 ); $stop(); end 80 if (rainbow7 !== indigo ) begin $display("%b", rainbow7 ); $stop(); end 81 rainbow7 <= rainbow7.next(); 82 end 83 else if (cnt== 7) begin 84 if (rainbow7 !== 3'd7 ) begin $display("%b", rainbow7 ); $stop(); end 85 if (rainbow7 !== violet ) begin $display("%b", rainbow7 ); $stop(); end 86 rainbow7 <= rainbow7.next(); 87 end 88 else if (cnt== 8) begin 89 if (rainbow7 !== 3'd1 ) begin $display("%b", rainbow7 ); $stop(); end 90 if (rainbow7 !== red ) begin $display("%b", rainbow7 ); $stop(); end 91 rainbow7 <= rainbow7.next(); 92 end 93 end else if (mod==1) begin 94 // write value to array 95 if (cnt== 0) begin 96 rainbow7 <= rainbow7.last(); 97 // check number 98 if (rainbow7.num() !== 7 ) begin $display("%d", rainbow7.num() ); $stop(); end 99 end 100 else if (cnt== 1) begin 101 if (rainbow7 !== 3'd7 ) begin $display("%b", rainbow7 ); $stop(); end 102 if (rainbow7 !== violet ) begin $display("%b", rainbow7 ); $stop(); end 103 rainbow7 <= rainbow7.prev(); 104 end 105 else if (cnt== 2) begin 106 if (rainbow7 !== 3'd6 ) begin $display("%b", rainbow7 ); $stop(); end 107 if (rainbow7 !== indigo ) begin $display("%b", rainbow7 ); $stop(); end 108 rainbow7 <= rainbow7.prev(); 109 end 110 else if (cnt== 3) begin 111 if (rainbow7 !== 3'd5 ) begin $display("%b", rainbow7 ); $stop(); end 112 if (rainbow7 !== blue ) begin $display("%b", rainbow7 ); $stop(); end 113 rainbow7 <= rainbow7.prev(); 114 end 115 else if (cnt== 4) begin 116 if (rainbow7 !== 3'd4 ) begin $display("%b", rainbow7 ); $stop(); end 117 if (rainbow7 !== green ) begin $display("%b", rainbow7 ); $stop(); end 118 rainbow7 <= rainbow7.prev(); 119 end 120 else if (cnt== 5) begin 121 if (rainbow7 !== 3'd3 ) begin $display("%b", rainbow7 ); $stop(); end 122 if (rainbow7 !== yellow ) begin $display("%b", rainbow7 ); $stop(); end 123 rainbow7 <= rainbow7.prev(); 124 end 125 else if (cnt== 6) begin 126 if (rainbow7 !== 3'd2 ) begin $display("%b", rainbow7 ); $stop(); end 127 if (rainbow7 !== orange ) begin $display("%b", rainbow7 ); $stop(); end 128 rainbow7 <= rainbow7.prev(); 129 end 130 else if (cnt== 7) begin 131 if (rainbow7 !== 3'd1 ) begin $display("%b", rainbow7 ); $stop(); end 132 if (rainbow7 !== red ) begin $display("%b", rainbow7 ); $stop(); end 133 rainbow7 <= rainbow7.prev(); 134 end 135 else if (cnt== 8) begin 136 if (rainbow7 !== 3'd7 ) begin $display("%b", rainbow7 ); $stop(); end 137 if (rainbow7 !== violet ) begin $display("%b", rainbow7 ); $stop(); end 138 rainbow7 <= rainbow7.prev(); 139 end 140 end 141 142 // test of t_switch type 143 always @ (posedge clk) 144 if (mod==0) begin 145 // write value to array 146 if (cnt== 0) begin 147 switch <= switch.first(); 148 // check number 149 if (switch.num() !== 2 ) begin $display("%d", switch.num() ); $stop(); end 150 if (switch !== 1'bx) begin $display("%b", switch ); $stop(); end 151 end 152 else if (cnt== 1) begin 153 if (switch !== 1'b0) begin $display("%b", switch ); $stop(); end 154 if (switch !== OFF ) begin $display("%b", switch ); $stop(); end 155 switch <= switch.next(); 156 end 157 else if (cnt== 2) begin 158 if (switch !== 1'b1) begin $display("%b", switch ); $stop(); end 159 if (switch !== ON ) begin $display("%b", switch ); $stop(); end 160 switch <= switch.next(); 161 end 162 else if (cnt== 3) begin 163 if (switch !== 1'b0) begin $display("%b", switch ); $stop(); end 164 if (switch !== OFF ) begin $display("%b", switch ); $stop(); end 165 switch <= switch.next(); 166 end 167 end else if (mod==1) begin 168 // write value to array 169 if (cnt== 0) begin 170 rainbow7 <= rainbow7.last(); 171 // check number 172 if (switch.num() !== 2 ) begin $display("%d", switch.num() ); $stop(); end 173 end 174 else if (cnt== 1) begin 175 if (switch !== 1'b1) begin $display("%b", switch ); $stop(); end 176 if (switch !== ON ) begin $display("%b", switch ); $stop(); end 177 switch <= switch.prev(); 178 end 179 else if (cnt== 2) begin 180 if (switch !== 1'b0) begin $display("%b", switch ); $stop(); end 181 if (switch !== OFF ) begin $display("%b", switch ); $stop(); end 182 switch <= switch.prev(); 183 end 184 else if (cnt== 3) begin 185 if (switch !== 1'b1) begin $display("%b", switch ); $stop(); end 186 if (switch !== ON ) begin $display("%b", switch ); $stop(); end 187 switch <= switch.prev(); 188 end 189 end 190 191 // test of raibow7 type 192 always @ (posedge clk) 193 if (mod==0) begin 194 // write value to array 195 if (cnt== 0) begin 196 family <= family.first(); 197 // check number 198 if (family.num() !== 15 ) begin $display("%d", family.num() ); $stop(); end 199 if (family !== 32'dx ) begin $display("%b", family ); $stop(); end 200 end 201 else if (cnt== 1) begin 202 if (family !== 0 ) begin $display("%b", family ); $stop(); end 203 if (family !== father ) begin $display("%b", family ); $stop(); end 204 family <= family.next(); 205 end 206 else if (cnt== 2) begin 207 if (family !== 1 ) begin $display("%b", family ); $stop(); end 208 if (family !== mother ) begin $display("%b", family ); $stop(); end 209 family <= family.next(); 210 end 211 else if (cnt== 3) begin 212 if (family !== 2 ) begin $display("%b", family ); $stop(); end 213 if (family !== son0 ) begin $display("%b", family ); $stop(); end 214 family <= family.next(); 215 end 216 else if (cnt== 4) begin 217 if (family !== 3 ) begin $display("%b", family ); $stop(); end 218 if (family !== son1 ) begin $display("%b", family ); $stop(); end 219 family <= family.next(); 220 end 221 else if (cnt== 5) begin 222 if (family !== 4 ) begin $display("%b", family ); $stop(); end 223 if (family !== daughter ) begin $display("%b", family ); $stop(); end 224 family <= family.next(); 225 end 226 else if (cnt== 6) begin 227 if (family !== 5 ) begin $display("%b", family ); $stop(); end 228 if (family !== gerbil ) begin $display("%b", family ); $stop(); end 229 family <= family.next(); 230 end 231 else if (cnt== 7) begin 232 if (family !== 10 ) begin $display("%b", family ); $stop(); end 233 if (family !== dog0 ) begin $display("%b", family ); $stop(); end 234 family <= family.next(); 235 end 236 else if (cnt== 8) begin 237 if (family !== 11 ) begin $display("%b", family ); $stop(); end 238 if (family !== dog1 ) begin $display("%b", family ); $stop(); end 239 family <= family.next(); 240 end 241 else if (cnt== 9) begin 242 if (family !== 12 ) begin $display("%b", family ); $stop(); end 243 if (family !== dog2 ) begin $display("%b", family ); $stop(); end 244 family <= family.next(); 245 end 246 else if (cnt== 10) begin 247 if (family !== 20 ) begin $display("%b", family ); $stop(); end 248 if (family !== cat3 ) begin $display("%b", family ); $stop(); end 249 family <= family.next(); 250 end 251 else if (cnt== 11) begin 252 if (family !== 21 ) begin $display("%b", family ); $stop(); end 253 if (family !== cat4 ) begin $display("%b", family ); $stop(); end 254 family <= family.next(); 255 end 256 else if (cnt== 12) begin 257 if (family !== 22 ) begin $display("%b", family ); $stop(); end 258 if (family !== cat5 ) begin $display("%b", family ); $stop(); end 259 family <= family.next(); 260 end 261 else if (cnt== 13) begin 262 if (family !== 30 ) begin $display("%b", family ); $stop(); end 263 if (family !== car3 ) begin $display("%b", family ); $stop(); end 264 family <= family.next(); 265 end 266 else if (cnt== 14) begin 267 if (family !== 31 ) begin $display("%b", family ); $stop(); end 268 if (family !== car2 ) begin $display("%b", family ); $stop(); end 269 family <= family.next(); 270 end 271 else if (cnt== 15) begin 272 if (family !== 32 ) begin $display("%b", family ); $stop(); end 273 if (family !== car1 ) begin $display("%b", family ); $stop(); end 274 family <= family.next(); 275 end 276 end 277endmodule 278