Timing: Fix combinational paths through all ports (#1175)

Fixes https://github.com/YosysHQ/nextpnr/issues/1174
This commit is contained in:
Rowan Goemans 2023-06-12 10:25:01 +02:00 committed by GitHub
parent 5b958c4d80
commit 0f947ee693
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -113,8 +113,11 @@ void TimingAnalyser::get_cell_delays()
info.edge); info.edge);
} }
} }
// asynchronous endpoint
else if (cls == TMG_ENDPOINT) {
pd.cell_arcs.emplace_back(CellArc::ENDPOINT, async_clk_key.key.clock, DelayQuad {});
}
// Combinational delays through cell // Combinational delays through cell
else if (cls == TMG_COMB_INPUT) {
for (auto &other_port : ci->ports) { for (auto &other_port : ci->ports) {
auto &op = other_port.second; auto &op = other_port.second;
// ignore dangling ports and non-outputs // ignore dangling ports and non-outputs
@ -125,11 +128,6 @@ void TimingAnalyser::get_cell_delays()
if (is_path) if (is_path)
pd.cell_arcs.emplace_back(CellArc::COMBINATIONAL, other_port.first, delay); pd.cell_arcs.emplace_back(CellArc::COMBINATIONAL, other_port.first, delay);
} }
}
// asynchronous endpoint
else if (cls == TMG_ENDPOINT) {
pd.cell_arcs.emplace_back(CellArc::ENDPOINT, async_clk_key.key.clock, DelayQuad {});
}
} else if (pi.type == PORT_OUT) { } else if (pi.type == PORT_OUT) {
// Output ports might have clk-to-q relationships // Output ports might have clk-to-q relationships
if (cls == TMG_REGISTER_OUTPUT) { if (cls == TMG_REGISTER_OUTPUT) {
@ -140,8 +138,11 @@ void TimingAnalyser::get_cell_delays()
pd.cell_arcs.emplace_back(CellArc::CLK_TO_Q, info.clock_port, info.clockToQ, info.edge); pd.cell_arcs.emplace_back(CellArc::CLK_TO_Q, info.clock_port, info.clockToQ, info.edge);
} }
} }
// Asynchronous startpoint
else if (cls == TMG_STARTPOINT) {
pd.cell_arcs.emplace_back(CellArc::STARTPOINT, async_clk_key.key.clock, DelayQuad {});
}
// Combinational delays through cell // Combinational delays through cell
else if (cls == TMG_COMB_OUTPUT) {
for (auto &other_port : ci->ports) { for (auto &other_port : ci->ports) {
auto &op = other_port.second; auto &op = other_port.second;
// ignore dangling ports and non-inputs // ignore dangling ports and non-inputs
@ -153,11 +154,6 @@ void TimingAnalyser::get_cell_delays()
pd.cell_arcs.emplace_back(CellArc::COMBINATIONAL, other_port.first, delay); pd.cell_arcs.emplace_back(CellArc::COMBINATIONAL, other_port.first, delay);
} }
} }
// Asynchronous startpoint
else if (cls == TMG_STARTPOINT) {
pd.cell_arcs.emplace_back(CellArc::STARTPOINT, async_clk_key.key.clock, DelayQuad {});
}
}
} }
} }