UDPs can only take two delay values.
Check in the compiler that a UDP is only given two delay values.
(cherry picked from commit 7916e148f8)
This commit is contained in:
parent
eb2fed7015
commit
f9774758a3
55
elaborate.cc
55
elaborate.cc
|
|
@ -1571,43 +1571,34 @@ void PGModule::elaborate_udp_(Design*des, PUdp*udp, NetScope*scope) const
|
||||||
module or primitive, it interprets them as parameter
|
module or primitive, it interprets them as parameter
|
||||||
overrides. Correct that misconception here. */
|
overrides. Correct that misconception here. */
|
||||||
if (overrides_) {
|
if (overrides_) {
|
||||||
PDelays tmp_del;
|
if (overrides_->count() > 2) {
|
||||||
tmp_del.set_delays(overrides_, false);
|
cerr << get_fileline() << ": error: UDPs take at most two "
|
||||||
tmp_del.eval_delays(des, scope, rise_expr, fall_expr, decay_expr);
|
"delay arguments." << endl;
|
||||||
|
|
||||||
if (dynamic_cast<NetEConst*> (rise_expr)) {
|
|
||||||
|
|
||||||
} else {
|
|
||||||
cerr << get_fileline() << ": error: Delay expressions must be "
|
|
||||||
<< "constant for primitives." << endl;
|
|
||||||
cerr << get_fileline() << ": : Cannot calculate "
|
|
||||||
<< *rise_expr << endl;
|
|
||||||
des->errors += 1;
|
des->errors += 1;
|
||||||
}
|
|
||||||
|
|
||||||
if (dynamic_cast<NetEConst*> (fall_expr)) {
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
cerr << get_fileline() << ": error: Delay expressions must be "
|
PDelays tmp_del;
|
||||||
<< "constant for primitives." << endl;
|
tmp_del.set_delays(overrides_, false);
|
||||||
cerr << get_fileline() << ": : Cannot calculate "
|
tmp_del.eval_delays(des, scope, rise_expr, fall_expr,
|
||||||
<< *rise_expr << endl;
|
decay_expr);
|
||||||
des->errors += 1;
|
|
||||||
|
if (! dynamic_cast<NetEConst*> (rise_expr)) {
|
||||||
|
cerr << get_fileline() << ": error: UDP rising delay "
|
||||||
|
"expression must be constant." << endl;
|
||||||
|
cerr << get_fileline() << ": : Cannot calculate "
|
||||||
|
<< *rise_expr << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! dynamic_cast<NetEConst*> (fall_expr)) {
|
||||||
|
cerr << get_fileline() << ": error: UDP falling delay "
|
||||||
|
"expression must be constant." << endl;
|
||||||
|
cerr << get_fileline() << ": : Cannot calculate "
|
||||||
|
<< *fall_expr << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dynamic_cast<NetEConst*> (decay_expr)) {
|
|
||||||
|
|
||||||
} else {
|
|
||||||
cerr << get_fileline() << ": error: Delay expressions must be "
|
|
||||||
<< "constant for primitives." << endl;
|
|
||||||
cerr << get_fileline() << ": : Cannot calculate "
|
|
||||||
<< *rise_expr << endl;
|
|
||||||
des->errors += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
assert(udp);
|
assert(udp);
|
||||||
NetUDP*net = new NetUDP(scope, my_name, udp->ports.count(), udp);
|
NetUDP*net = new NetUDP(scope, my_name, udp->ports.count(), udp);
|
||||||
net->rise_time(rise_expr);
|
net->rise_time(rise_expr);
|
||||||
|
|
|
||||||
|
|
@ -410,6 +410,8 @@ void PDelays::dump_delays(ostream&out) const
|
||||||
if (delay_[0] && delay_[1] && delay_[2])
|
if (delay_[0] && delay_[1] && delay_[2])
|
||||||
out << "#(" << *delay_[0] << "," << *delay_[1] << "," <<
|
out << "#(" << *delay_[0] << "," << *delay_[1] << "," <<
|
||||||
*delay_[2] << ")";
|
*delay_[2] << ")";
|
||||||
|
else if (delay_[0] && delay_[1])
|
||||||
|
out << "#(" << *delay_[0] << "," << *delay_[1] << ")";
|
||||||
else if (delay_[0])
|
else if (delay_[0])
|
||||||
out << "#" << *delay_[0];
|
out << "#" << *delay_[0];
|
||||||
else
|
else
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue