path enum for clks used as data

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2025-04-10 08:48:55 -07:00
parent 6ebd162d42
commit c8537cbc4b
1 changed files with 4 additions and 4 deletions

View File

@ -506,16 +506,16 @@ PathEnum::makeDiversions(PathEnd *path_end,
Path *prev_path = path->prevPath();
TimingArc *prev_arc = path->prevArc(this);
PathEnumFaninVisitor fanin_visitor(path_end, path, unique_pins_, this);
while (prev_path
// Do not enumerate paths in the clk network.
&& !path->isClock(this)) {
while (prev_path) {
// Fanin visitor does all the work.
// While visiting the fanins the fanin_visitor finds the
// previous path and arc as well as diversions.
fanin_visitor.visitFaninPathsThru(path, prev_path->vertex(this), prev_arc);
// Do not enumerate beyond latch D to Q edges.
// This breaks latch loop paths.
if (prev_arc->role() == TimingRole::latchDtoQ())
const TimingRole *prev_role = prev_arc->role();
if (prev_role == TimingRole::latchDtoQ()
|| prev_role == TimingRole::regClkToQ())
break;
path = prev_path;
prev_path = path->prevPath();