mirror of
https://github.com/verilator/verilator.git
synced 2025-01-05 22:27:35 +00:00
72 lines
2.0 KiB
Systemverilog
72 lines
2.0 KiB
Systemverilog
// DESCRIPTION: Verilator: Verilog Test module
|
|
//
|
|
// This file ONLY is placed under the Creative Commons Public Domain, for
|
|
// any use, without warranty, 2024 by Antmicro Ltd.
|
|
// SPDX-License-Identifier: CC0-1.0
|
|
|
|
typedef enum bit[15:0] {
|
|
ONE = 3,
|
|
TWO = 5,
|
|
THREE = 8,
|
|
FOUR = 13
|
|
} Enum;
|
|
|
|
class Cls;
|
|
constraint A { v inside {ONE, THREE}; }
|
|
constraint B { w == 5; x inside {1,2} || x inside {4,5}; }
|
|
constraint C { z < 3 * 7; z > 5 + 8; }
|
|
|
|
rand Enum v;
|
|
rand logic[63:0] w;
|
|
rand logic[47:0] x;
|
|
rand logic[31:0] y;
|
|
rand logic[23:0] z;
|
|
|
|
function new;
|
|
v = ONE;
|
|
w = 0;
|
|
x = 0;
|
|
y = 0;
|
|
z = 0;
|
|
endfunction
|
|
|
|
endclass
|
|
|
|
module t (/*AUTOARG*/);
|
|
Cls obj;
|
|
|
|
initial begin
|
|
int rand_result;
|
|
int lb, ub;
|
|
longint prev_checksum;
|
|
$display("===================\nSatisfiable constraints:");
|
|
for (int i = 0; i < 25; i++) begin
|
|
obj = new;
|
|
lb = 16;
|
|
ub = 32;
|
|
rand_result = obj.randomize() with { lb <= y && y <= ub; };
|
|
$display("obj.v == %0d", obj.v);
|
|
$display("obj.w == %0d", obj.w);
|
|
$display("obj.x == %0d", obj.x);
|
|
$display("obj.y == %0d", obj.y);
|
|
$display("obj.z == %0d", obj.z);
|
|
$display("rand_result == %0d", rand_result);
|
|
$display("-------------------");
|
|
if (!(obj.v inside {ONE, THREE})) $stop;
|
|
if (obj.w != 5) $stop;
|
|
if (!(obj.x inside {1,2,4,5})) $stop;
|
|
if (obj.y < 16 || obj.y > 32) $stop;
|
|
if (obj.z <= 13 || obj.z >= 21) $stop;
|
|
if (lb != 16 || ub != 32) $stop;
|
|
end
|
|
$display("===================\nUnsatisfiable constraints for obj.y:");
|
|
rand_result = obj.randomize() with { 256 < y && y < 256; };
|
|
$display("obj.y == %0d", obj.y);
|
|
$display("rand_result == %0d", rand_result);
|
|
if (rand_result != 0) $stop;
|
|
rand_result = obj.randomize() with { 16 <= z && z <= 32; };
|
|
$write("*-* All Finished *-*\n");
|
|
$finish;
|
|
end
|
|
endmodule
|