verilator/test_regress/t/t_sys_rand_concat.v
2022-03-26 15:41:32 -04:00

61 lines
1.8 KiB
Systemverilog

// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain, for
// any use, without warranty, 2008 by Wilson Snyder.
// SPDX-License-Identifier: CC0-1.0
`define stop $stop
`define checkh(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got='h%x exp='h%x\n", `__FILE__,`__LINE__, (gotv), (expv)); `stop; end while(0)
module t;
`define TRIES 100
bit [6:0] b5a; // We use larger than [4:0] so make sure we truncate
bit [6:0] b5b; // We use larger than [4:0] so make sure we truncate
bit [6:0] b7c;
bit [6:0] b7d;
bit [59:0] b60c;
bit [89:0] b90c;
bit [6:0] max_b5a;
bit [6:0] max_b5b;
bit [6:0] max_b7c;
bit [6:0] max_b7d;
bit [59:0] max_b60c;
bit [89:0] max_b90c;
initial begin
for (int i = 0; i < `TRIES; ++i) begin
// verilator lint_off WIDTH
// Optimize away extracts
b5a = {$random}[4:0];
b5b = {$random}[14:10];
// Optimize away concats
b7c = {$random, $random, $random, $random, $random, $random, $random};
b7d = {{{$random}[0]}, {{$random}[0]}, {{$random}[0]}, {{$random}[0]}, {{$random}[0]}};
b60c = {$random, $random, $random, $random, $random, $random, $random};
b90c = {$random, $random, $random, $random, $random, $random, $random};
// verilator lint_on WIDTH
max_b5a = max_b5a | b5a;
max_b5b = max_b5b | b5b;
max_b7c = max_b7c | b7c;
max_b7d = max_b7d | b7d;
max_b60c = max_b60c | b60c;
max_b90c = max_b90c | b90c;
end
`checkh(max_b5a, 7'h1f);
`checkh(max_b5b, 7'h1f);
`checkh(max_b7c, 7'h7f);
`checkh(max_b7d, 7'h1f);
`checkh(max_b60c, ~ 60'h0);
`checkh(max_b90c, ~ 90'h0);
$write("*-* All Finished *-*\n");
$finish;
end
endmodule