Merge pull request #1415 from larsclausen/aa-pattern-terms
Detect automatic terms in assignment patterns
This commit is contained in:
commit
d01efc910b
10
PExpr.cc
10
PExpr.cc
|
|
@ -108,6 +108,16 @@ PEAssignPattern::~PEAssignPattern()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PEAssignPattern::has_aa_term(Design*des, NetScope*scope) const
|
||||||
|
{
|
||||||
|
bool flag = false;
|
||||||
|
for (const auto *parm : parms_) {
|
||||||
|
if (parm)
|
||||||
|
flag = parm->has_aa_term(des, scope) || flag;
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
PEBinary::PEBinary(char op, PExpr*l, PExpr*r)
|
PEBinary::PEBinary(char op, PExpr*l, PExpr*r)
|
||||||
: op_(op), left_(l), right_(r)
|
: op_(op), left_(l), right_(r)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
2
PExpr.h
2
PExpr.h
|
|
@ -208,6 +208,8 @@ class PEAssignPattern : public PExpr {
|
||||||
|
|
||||||
void dump(std::ostream&) const override;
|
void dump(std::ostream&) const override;
|
||||||
|
|
||||||
|
virtual bool has_aa_term(Design*des, NetScope*scope) const override;
|
||||||
|
|
||||||
virtual unsigned test_width(Design*des, NetScope*scope, width_mode_t&mode) override;
|
virtual unsigned test_width(Design*des, NetScope*scope, width_mode_t&mode) override;
|
||||||
virtual NetExpr*elaborate_expr(Design*des, NetScope*scope,
|
virtual NetExpr*elaborate_expr(Design*des, NetScope*scope,
|
||||||
ivl_type_t type, unsigned flags) const override;
|
ivl_type_t type, unsigned flags) const override;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
// Check that assignment patterns cannot reference automatic variables in
|
||||||
|
// procedural force statements.
|
||||||
|
|
||||||
|
module test;
|
||||||
|
|
||||||
|
reg [3:0] result;
|
||||||
|
|
||||||
|
task automatic t;
|
||||||
|
input [3:0] value;
|
||||||
|
begin
|
||||||
|
force result = '{value[3], value[2], value[1], value[0]};
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
t(4'ha);
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
|
|
@ -260,6 +260,7 @@ sv_array_cassign9 vvp_tests/sv_array_cassign9.json
|
||||||
sv_array_cassign10 vvp_tests/sv_array_cassign10.json
|
sv_array_cassign10 vvp_tests/sv_array_cassign10.json
|
||||||
sv_array_cassign_single vvp_tests/sv_array_cassign_single.json
|
sv_array_cassign_single vvp_tests/sv_array_cassign_single.json
|
||||||
sv_array_cassign_single_fail1 vvp_tests/sv_array_cassign_single_fail1.json
|
sv_array_cassign_single_fail1 vvp_tests/sv_array_cassign_single_fail1.json
|
||||||
|
sv_assign_pattern_auto_force_fail vvp_tests/sv_assign_pattern_auto_force_fail.json
|
||||||
sv_automatic_2state vvp_tests/sv_automatic_2state.json
|
sv_automatic_2state vvp_tests/sv_automatic_2state.json
|
||||||
sv_bad_member_lval_proc_fail vvp_tests/sv_bad_member_lval_proc_fail.json
|
sv_bad_member_lval_proc_fail vvp_tests/sv_bad_member_lval_proc_fail.json
|
||||||
sv_byte_array_string1 vvp_tests/sv_byte_array_string1.json
|
sv_byte_array_string1 vvp_tests/sv_byte_array_string1.json
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"type" : "CE",
|
||||||
|
"source" : "sv_assign_pattern_auto_force_fail.v",
|
||||||
|
"iverilog-args" : [ "-g2005-sv" ]
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue