Fix `rand_mode` method with cast (#5831).
This commit is contained in:
parent
258becd179
commit
8e87a99628
1
Changes
1
Changes
|
@ -24,6 +24,7 @@ Verilator 5.035 devel
|
|||
* Fix tcmalloc static link and non-22.04 builds (#5817) (#5818). [Geza Lore]
|
||||
* Fix UNOPTFLAT warnings with `--coverage-trace` and always_comb (#5821).
|
||||
* Fix function locals in SenExprBuilder (#5822). [Geza Lore]
|
||||
* Fix `rand_mode` method with cast (#5831).
|
||||
|
||||
|
||||
Verilator 5.034 2025-02-24
|
||||
|
|
|
@ -1996,6 +1996,7 @@ class WidthVisitor final : public VNVisitor {
|
|||
if (debug() >= 9) nodep->dumpTree("- CastPre: ");
|
||||
// if (debug()) nodep->backp()->dumpTree("- CastPreUpUp: ");
|
||||
userIterateAndNext(nodep->fromp(), WidthVP{SELF, PRELIM}.p());
|
||||
if (debug() >= 9) nodep->dumpTree("- CastDit: ");
|
||||
AstNodeDType* const toDtp = nodep->dtypep()->skipRefToEnump();
|
||||
AstNodeDType* const fromDtp = nodep->fromp()->dtypep()->skipRefToEnump();
|
||||
const auto castable = AstNode::computeCastable(toDtp, fromDtp, nodep->fromp());
|
||||
|
@ -4009,9 +4010,9 @@ class WidthVisitor final : public VNVisitor {
|
|||
methodOkArguments(nodep, 0, 1);
|
||||
// IEEE 1800-2023 18.8
|
||||
if (nodep->pinsp()) {
|
||||
nodep->dtypep(nodep->findBasicDType(VBasicDTypeKwd::INT));
|
||||
} else {
|
||||
nodep->dtypeSetVoid();
|
||||
} else {
|
||||
nodep->dtypep(nodep->findBasicDType(VBasicDTypeKwd::INT));
|
||||
}
|
||||
v3Global.useRandomizeMethods(true);
|
||||
}
|
||||
|
|
|
@ -25,16 +25,23 @@ class Qux extends Bar;
|
|||
constraint y_gt_x {y > x;};
|
||||
constraint y_lt_10 {y < 10;};
|
||||
|
||||
function bit get_rand_mode();
|
||||
return bit'(y.rand_mode());
|
||||
endfunction
|
||||
|
||||
function void test;
|
||||
logic ok = 0;
|
||||
x.rand_mode(1);
|
||||
if (x.rand_mode == 0) $stop;
|
||||
if (x.rand_mode != 1) $stop; // Note no rand_mode parens
|
||||
if (get_rand_mode() != 1) $stop;
|
||||
y.rand_mode(0);
|
||||
if (y.rand_mode == 1) $stop;
|
||||
if (y.rand_mode() != 0) $stop; // Note has rand_mode parens
|
||||
|
||||
foo.a.rand_mode(0);
|
||||
if (foo.a.rand_mode == 1) $stop;
|
||||
if (foo.a.rand_mode != 0) $stop; // Note no rand_mode parens
|
||||
foo.b.rand_mode(1);
|
||||
if (foo.b.rand_mode == 0) $stop;
|
||||
if (foo.b.rand_mode() != 1) $stop; // Note has rand_mode parens
|
||||
|
||||
for (int i = 0; i < 20; ++i) begin
|
||||
x = 4;
|
||||
y = 8;
|
||||
|
|
Loading…
Reference in New Issue