check_setup ignore constant nets resolves #224

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2025-03-21 13:55:41 -07:00
parent c6d8e3cf91
commit e9b92fddfb
1 changed files with 14 additions and 10 deletions

View File

@ -246,9 +246,11 @@ CheckTiming::checkUnconstraintedOutputs(PinSet &unconstrained_ends)
while (pin_iter->hasNext()) {
Pin *pin = pin_iter->next();
PortDirection *dir = network_->direction(pin);
Vertex *vertex = graph_->pinLoadVertex(pin);
if (dir->isAnyOutput()
&& !((hasClkedDepature(pin)
&& hasClkedArrival(graph_->pinLoadVertex(pin)))
&& !vertex->isConstant()
&& !((hasClkedDepature(pin)
&& hasClkedArrival(vertex))
|| hasMaxDelay(pin)))
unconstrained_ends.insert(pin);
}
@ -294,14 +296,16 @@ CheckTiming::checkUnconstrainedSetups(PinSet &unconstrained_ends)
VertexIterator vertex_iter(graph_);
while (vertex_iter.hasNext()) {
Vertex *vertex = vertex_iter.next();
VertexInEdgeIterator edge_iter(vertex, graph_);
while (edge_iter.hasNext()) {
Edge *edge = edge_iter.next();
if (edge->role() == TimingRole::setup()
&& (!search_->isClock(edge->from(graph_))
|| !hasClkedArrival(edge->to(graph_)))) {
unconstrained_ends.insert(vertex->pin());
break;
if (!vertex->isConstant()) {
VertexInEdgeIterator edge_iter(vertex, graph_);
while (edge_iter.hasNext()) {
Edge *edge = edge_iter.next();
if (edge->role() == TimingRole::setup()
&& (!search_->isClock(edge->from(graph_))
|| !hasClkedArrival(edge->to(graph_)))) {
unconstrained_ends.insert(vertex->pin());
break;
}
}
}
}