Cannot use posedge, negedge or edge with a real expression
This commit is contained in:
parent
2249d224de
commit
095e6daa0a
25
elaborate.cc
25
elaborate.cc
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1998-2022 Stephen Williams (steve@icarus.com)
|
* Copyright (c) 1998-2023 Stephen Williams (steve@icarus.com)
|
||||||
* Copyright CERN 2013 / Stephen Williams (steve@icarus.com)
|
* Copyright CERN 2013 / Stephen Williams (steve@icarus.com)
|
||||||
*
|
*
|
||||||
* This source code is free software; you can redistribute it
|
* This source code is free software; you can redistribute it
|
||||||
|
|
@ -4886,6 +4886,29 @@ cerr << endl;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// posedge, negedge and edge are not allowed on real expressions.
|
||||||
|
if ((tmp->expr_type() == IVL_VT_REAL) &&
|
||||||
|
(expr_[idx]->type() != PEEvent::ANYEDGE)) {
|
||||||
|
cerr << get_fileline() << ": error: '";
|
||||||
|
switch (expr_[idx]->type()) {
|
||||||
|
case PEEvent::POSEDGE:
|
||||||
|
cerr << "posedge";
|
||||||
|
break;
|
||||||
|
case PEEvent::NEGEDGE:
|
||||||
|
cerr << "negedge";
|
||||||
|
break;
|
||||||
|
case PEEvent::EDGE:
|
||||||
|
cerr << "edge";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ivl_assert(*this, 0);
|
||||||
|
}
|
||||||
|
cerr << "' cannot be used with real expressions '"
|
||||||
|
<< *expr_[idx]->expr() << "'." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
NetNet*expr = tmp->synthesize(des, scope, tmp);
|
NetNet*expr = tmp->synthesize(des, scope, tmp);
|
||||||
if (expr == 0) {
|
if (expr == 0) {
|
||||||
expr_[idx]->dump(cerr);
|
expr_[idx]->dump(cerr);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
./ivltests/real_edges.v:5: error: 'posedge' cannot be used with real expressions 'rval'.
|
||||||
|
./ivltests/real_edges.v:6: error: 'negedge' cannot be used with real expressions 'rval'.
|
||||||
|
./ivltests/real_edges.v:7: error: 'edge' cannot be used with real expressions 'rval'.
|
||||||
|
3 error(s) during elaboration.
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
module top;
|
||||||
|
real rval;
|
||||||
|
|
||||||
|
always @(rval) $display("any change");
|
||||||
|
always @(posedge rval) $display("posedge");
|
||||||
|
always @(negedge rval) $display("negedge");
|
||||||
|
always @(edge rval) $display("edge");
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
#1 rval = 1.0;
|
||||||
|
#1 rval = 0.0;
|
||||||
|
end
|
||||||
|
endmodule
|
||||||
|
|
@ -996,3 +996,4 @@ br_gh840a CE,-g2012 ivltests
|
||||||
br_gh840b CE,-g2012 ivltests
|
br_gh840b CE,-g2012 ivltests
|
||||||
bitsel_real_idx CE,-g2012 ivltests gold=bitsel_real_idx.gold
|
bitsel_real_idx CE,-g2012 ivltests gold=bitsel_real_idx.gold
|
||||||
partsel_real_idx CE,-g2012 ivltests gold=partsel_real_idx.gold
|
partsel_real_idx CE,-g2012 ivltests gold=partsel_real_idx.gold
|
||||||
|
real_edges CE,-g2012 ivltests gold=real_edges.gold
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue