diff options
author | David Shah <dave@ds0.me> | 2020-02-04 16:08:08 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-04 16:08:08 +0000 |
commit | 1ceffbe0bcba4f31a40c58c436df9370899fa4a2 (patch) | |
tree | f3cff1e5f8a067159a4e0fecd870a7acacba57a0 /ecp5/arch_place.cc | |
parent | b4d029a55cd67bafcc9c364d609208a818227204 (diff) | |
parent | a1c902dadc3165fe9abab7c96a75b5f4808836cd (diff) | |
download | nextpnr-1ceffbe0bcba4f31a40c58c436df9370899fa4a2.tar.gz nextpnr-1ceffbe0bcba4f31a40c58c436df9370899fa4a2.tar.bz2 nextpnr-1ceffbe0bcba4f31a40c58c436df9370899fa4a2.zip |
Merge pull request #391 from YosysHQ/router2-upstream
Upstreaming router2
Diffstat (limited to 'ecp5/arch_place.cc')
-rw-r--r-- | ecp5/arch_place.cc | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/ecp5/arch_place.cc b/ecp5/arch_place.cc index 6057605b..c5330694 100644 --- a/ecp5/arch_place.cc +++ b/ecp5/arch_place.cc @@ -203,17 +203,26 @@ void Arch::setupWireLocations() CellInfo *ci = cell.second; if (ci->bel == BelId()) continue; - if (ci->type == id_MULT18X18D || ci->type == id_DCUA) { + if (ci->type == id_MULT18X18D || ci->type == id_DCUA || ci->type == id_DDRDLL || ci->type == id_DQSBUFM || + ci->type == id_EHXPLLL) { for (auto &port : ci->ports) { - if (port.second.type != PORT_IN || port.second.net == nullptr) + if (port.second.net == nullptr) continue; WireId pw = getBelPinWire(ci->bel, port.first); if (pw == WireId()) continue; - for (auto uh : getPipsUphill(pw)) { - WireId pip_src = getPipSrcWire(uh); - wire_loc_overrides[pw] = std::make_pair(pip_src.location.x, pip_src.location.y); - break; + if (port.second.type == PORT_OUT) { + for (auto dh : getPipsDownhill(pw)) { + WireId pip_dst = getPipDstWire(dh); + wire_loc_overrides[pw] = std::make_pair(pip_dst.location.x, pip_dst.location.y); + break; + } + } else { + for (auto uh : getPipsUphill(pw)) { + WireId pip_src = getPipSrcWire(uh); + wire_loc_overrides[pw] = std::make_pair(pip_src.location.x, pip_src.location.y); + break; + } } } } |