mirror of
https://github.com/verilator/verilator.git
synced 2024-12-29 10:47:34 +00:00
parent
54ef9ad31c
commit
a8e06874bd
@ -3916,9 +3916,14 @@ class LinkDotResolveVisitor final : public VNVisitor {
|
|||||||
LINKDOT_VISIT_START();
|
LINKDOT_VISIT_START();
|
||||||
UINFO(5, indent() << "visit " << nodep << endl);
|
UINFO(5, indent() << "visit " << nodep << endl);
|
||||||
checkNoDot(nodep);
|
checkNoDot(nodep);
|
||||||
|
VL_RESTORER(m_curSymp);
|
||||||
VL_RESTORER(m_inWith);
|
VL_RESTORER(m_inWith);
|
||||||
m_inWith = true;
|
{
|
||||||
symIterateChildren(nodep, m_statep->getNodeSym(nodep));
|
m_ds.m_dotSymp = m_curSymp = m_statep->getNodeSym(nodep);
|
||||||
|
m_inWith = true;
|
||||||
|
iterateChildren(nodep);
|
||||||
|
}
|
||||||
|
m_ds.m_dotSymp = VL_RESTORER_PREV(m_curSymp);
|
||||||
}
|
}
|
||||||
void visit(AstLambdaArgRef* nodep) override {
|
void visit(AstLambdaArgRef* nodep) override {
|
||||||
LINKDOT_VISIT_START();
|
LINKDOT_VISIT_START();
|
||||||
|
21
test_regress/t/t_randomize_param_with.py
Executable file
21
test_regress/t/t_randomize_param_with.py
Executable file
@ -0,0 +1,21 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2024 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
|
||||||
|
|
||||||
|
import vltest_bootstrap
|
||||||
|
|
||||||
|
test.scenarios('simulator')
|
||||||
|
|
||||||
|
if not test.have_solver:
|
||||||
|
test.skip("No constraint solver installed")
|
||||||
|
|
||||||
|
test.compile()
|
||||||
|
|
||||||
|
test.execute()
|
||||||
|
|
||||||
|
test.passes()
|
48
test_regress/t/t_randomize_param_with.v
Normal file
48
test_regress/t/t_randomize_param_with.v
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
`define check_rand(cl, field, constr, cond) \
|
||||||
|
begin \
|
||||||
|
longint prev_result; \
|
||||||
|
int ok = 0; \
|
||||||
|
if (!bit'(cl.randomize() with { constr; })) $stop; \
|
||||||
|
prev_result = longint'(field); \
|
||||||
|
if (!(cond)) $stop; \
|
||||||
|
repeat(9) begin \
|
||||||
|
longint result; \
|
||||||
|
if (!bit'(cl.randomize() with { constr; })) $stop; \
|
||||||
|
result = longint'(field); \
|
||||||
|
if (!(cond)) $stop; \
|
||||||
|
if (result != prev_result) ok = 1; \
|
||||||
|
prev_result = result; \
|
||||||
|
end \
|
||||||
|
if (ok != 1) $stop; \
|
||||||
|
end
|
||||||
|
|
||||||
|
class Cls #(int LIMIT = 3);
|
||||||
|
rand int x;
|
||||||
|
int y = -100;
|
||||||
|
constraint x_limit { x <= LIMIT; };
|
||||||
|
endclass
|
||||||
|
|
||||||
|
module t;
|
||||||
|
initial begin
|
||||||
|
Cls#() cd = new;
|
||||||
|
Cls#(5) c5 = new;
|
||||||
|
|
||||||
|
`check_rand(cd, cd.x, x > 0, cd.x > 0 && cd.x <= 3);
|
||||||
|
`check_rand(cd, cd.x, x > y, cd.x > -100 && cd.x <= 3);
|
||||||
|
if (cd.randomize() with {x > 3;} == 1) $stop;
|
||||||
|
|
||||||
|
`check_rand(c5, c5.x, x > 0, c5.x > 0 && c5.x <= 5);
|
||||||
|
`check_rand(c5, c5.x, x > y, c5.x > -100 && c5.x <= 5);
|
||||||
|
if (c5.randomize() with {x >= 5;} == 0) $stop;
|
||||||
|
if (c5.x != 5) $stop;
|
||||||
|
|
||||||
|
$write("*-* All Finished *-*\n");
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
endmodule
|
Loading…
Reference in New Issue
Block a user