Skip to content

Commit f66c022

Browse files
committed
pdn: add layer checks to connect statements
Signed-off-by: Peter Gadfort <[email protected]>
1 parent 61c6ec8 commit f66c022

File tree

9 files changed

+91
-7
lines changed

9 files changed

+91
-7
lines changed

src/pdn/include/pdn/PdnGen.hh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ class PdnGen
7171
odb::dbMTerm* switched_power,
7272
odb::dbMTerm* alwayson_power,
7373
odb::dbMTerm* ground);
74+
const std::vector<std::unique_ptr<PowerCell>>& getSwitchedPowerCells() const
75+
{
76+
return switched_power_cells_;
77+
}
7478

7579
// Domains
7680
std::vector<VoltageDomain*> getDomains() const;

src/pdn/src/grid.cpp

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -647,6 +647,93 @@ void Grid::checkSetup() const
647647
}
648648
}
649649
}
650+
651+
// Check connectivity
652+
std::set<odb::dbTechLayer*> check_layers;
653+
for (const auto& ring : rings_) {
654+
for (auto* layer : ring->getLayers()) {
655+
check_layers.insert(layer);
656+
}
657+
}
658+
for (const auto& strap : straps_) {
659+
check_layers.insert(strap->getLayer());
660+
}
661+
662+
// Check that pin layers actually exists in stack
663+
for (auto* layer : pin_layers_) {
664+
if (check_layers.find(layer) == check_layers.end()) {
665+
getLogger()->error(utl::PDN,
666+
111,
667+
"Pin layer {} is not a valid shape in {}",
668+
layer->getName(),
669+
name_);
670+
}
671+
}
672+
673+
// add instance layers
674+
const auto nets_vec = getNets();
675+
const std::set<odb::dbNet*> nets(nets_vec.begin(), nets_vec.end());
676+
677+
for (auto* inst : getInstances()) {
678+
if (!inst->isFixed()) {
679+
continue;
680+
}
681+
for (auto* iterm : inst->getITerms()) {
682+
if (nets.find(iterm->getNet()) != nets.end()) {
683+
for (const auto& [layer, shape] : iterm->getGeometries()) {
684+
check_layers.insert(layer);
685+
}
686+
}
687+
}
688+
}
689+
if (domain_->hasSwitchedPower()) {
690+
for (const auto& powercell :
691+
domain_->getPDNGen()->getSwitchedPowerCells()) {
692+
for (auto* mterm : powercell->getMaster()->getMTerms()) {
693+
for (auto* mpin : mterm->getMPins()) {
694+
for (auto* box : mpin->getGeometry()) {
695+
auto* layer = box->getTechLayer();
696+
if (layer) {
697+
check_layers.insert(layer);
698+
}
699+
}
700+
}
701+
}
702+
}
703+
}
704+
705+
// add bterms
706+
for (auto* net : nets) {
707+
for (auto* bterm : net->getBTerms()) {
708+
for (auto* bpin : bterm->getBPins()) {
709+
if (!bpin->getPlacementStatus().isFixed()) {
710+
continue;
711+
}
712+
for (auto* box : bpin->getBoxes()) {
713+
auto* layer = box->getTechLayer();
714+
if (layer) {
715+
check_layers.insert(layer);
716+
}
717+
}
718+
}
719+
}
720+
}
721+
722+
// Check that connect statement actually point to something
723+
for (const auto& connect : connect_) {
724+
if (check_layers.find(connect->getLowerLayer()) == check_layers.end()) {
725+
getLogger()->error(utl::PDN,
726+
112,
727+
"Cannot find shapes to connect to on {}",
728+
connect->getLowerLayer()->getName());
729+
}
730+
if (check_layers.find(connect->getUpperLayer()) == check_layers.end()) {
731+
getLogger()->error(utl::PDN,
732+
113,
733+
"Cannot find shapes to connect to on {}",
734+
connect->getLowerLayer()->getName());
735+
}
736+
}
650737
}
651738

652739
void Grid::getObstructions(Shape::ObstructionTreeMap& obstructions) const

src/pdn/test/power_switch.ok

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ Straps:
4141
Snap to grid: false
4242
Connect:
4343
Connect layers met1 -> met4
44-
Connect layers met2 -> met4
4544
Connect layers met4 -> met5
4645
Switched power cell: POWER_SWITCH
4746
Control net: nPWRUP

src/pdn/test/power_switch.tcl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ add_pdn_stripe -layer met1 -width 0.48 -offset 0 -followpins
2323
add_pdn_stripe -layer met4 -width 1.600 -pitch 27.140 -offset 13.570
2424
add_pdn_stripe -layer met5 -width 1.600 -pitch 27.200 -offset 13.600
2525
add_pdn_connect -layers {met1 met4}
26-
add_pdn_connect -layers {met2 met4}
2726
add_pdn_connect -layers {met4 met5}
2827

2928
pdngen -report_only

src/pdn/test/power_switch_cut_rows.tcl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ add_pdn_stripe -layer met1 -width 0.48 -offset 0 -followpins
2323
add_pdn_stripe -layer met4 -width 1.600 -pitch 27.140 -offset 13.570
2424
add_pdn_stripe -layer met5 -width 1.600 -pitch 27.200 -offset 13.600
2525
add_pdn_connect -layers {met1 met4}
26-
add_pdn_connect -layers {met2 met4}
2726
add_pdn_connect -layers {met4 met5}
2827

2928
pdngen

src/pdn/test/power_switch_daisy.tcl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ add_pdn_stripe -layer met1 -width 0.48 -offset 0 -followpins
2424
add_pdn_stripe -layer met4 -width 1.600 -pitch 20.000 -offset 13.000
2525
add_pdn_stripe -layer met5 -width 1.600 -pitch 27.200 -offset 13.600
2626
add_pdn_connect -layers {met1 met4}
27-
add_pdn_connect -layers {met2 met4}
2827
add_pdn_connect -layers {met4 met5}
2928

3029
pdngen

src/pdn/test/power_switch_star.tcl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ add_pdn_stripe -layer met1 -width 0.48 -offset 0 -followpins
2424
add_pdn_stripe -layer met4 -width 1.600 -pitch 27.140 -offset 13.570
2525
add_pdn_stripe -layer met5 -width 1.600 -pitch 27.200 -offset 13.600
2626
add_pdn_connect -layers {met1 met4}
27-
add_pdn_connect -layers {met2 met4}
2827
add_pdn_connect -layers {met4 met5}
2928

3029
pdngen

src/pdn/test/power_switch_upf_daisy.tcl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ add_pdn_stripe -layer met1 -width 0.48 -offset 0 -followpins
4545
add_pdn_stripe -layer met4 -width 1.600 -pitch 27.140 -offset 13.570
4646
add_pdn_stripe -layer met5 -width 1.600 -pitch 27.200 -offset 13.600
4747
add_pdn_connect -layers {met1 met4}
48-
add_pdn_connect -layers {met2 met4}
4948
add_pdn_connect -layers {met4 met5}
5049

5150
pdngen

src/pdn/test/power_switch_upf_star.tcl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ add_pdn_stripe -layer met1 -width 0.48 -offset 0 -followpins
4545
add_pdn_stripe -layer met4 -width 1.600 -pitch 27.140 -offset 13.570
4646
add_pdn_stripe -layer met5 -width 1.600 -pitch 27.200 -offset 13.600
4747
add_pdn_connect -layers {met1 met4}
48-
add_pdn_connect -layers {met2 met4}
4948
add_pdn_connect -layers {met4 met5}
5049

5150
pdngen

0 commit comments

Comments
 (0)