Skip to content

Commit 66535ef

Browse files
committed
tap: fix missing endcaps on rows with corners
Signed-off-by: Peter Gadfort <[email protected]>
1 parent fecb042 commit 66535ef

File tree

7 files changed

+1110
-2
lines changed

7 files changed

+1110
-2
lines changed

src/tap/src/tapcell.cpp

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1256,8 +1256,43 @@ int Tapcell::placeEndcapEdgeVertical(const Tapcell::Edge& edge,
12561256
for (auto* row : rows) {
12571257
auto check_row = corners.find(row);
12581258
if (check_row != corners.end()) {
1259-
// corner is already placed in this row
1260-
continue;
1259+
bool skip = false;
1260+
for (odb::dbInst* inst : check_row->second) {
1261+
switch (edge.type) {
1262+
case EdgeType::Right: {
1263+
if (inst->getBBox()->xMax() == row->getBBox().xMax()) {
1264+
// this edge is already placed
1265+
skip = true;
1266+
}
1267+
break;
1268+
}
1269+
case EdgeType::Left: {
1270+
if (inst->getBBox()->xMin() == row->getBBox().xMin()) {
1271+
// this edge is already placed
1272+
skip = true;
1273+
}
1274+
break;
1275+
}
1276+
case EdgeType::Top:
1277+
case EdgeType::Bottom:
1278+
case EdgeType::Unknown:
1279+
break;
1280+
}
1281+
if (skip) {
1282+
break;
1283+
}
1284+
}
1285+
1286+
if (skip) {
1287+
debugPrint(logger_,
1288+
utl::TAP,
1289+
"Endcap",
1290+
2,
1291+
"Skipping {} due to corners in {}",
1292+
row->getName(),
1293+
toString(edge.type));
1294+
continue;
1295+
}
12611296
}
12621297

12631298
const int width = edge_master->getWidth();

src/tap/test/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ COMPULSORY_TESTS = [
2424
"endcap_autoselection_error2",
2525
"endcap_autoselection_error3",
2626
"endcap_autoselection_error4",
27+
"endcap_corners",
2728
"gcd_asap7",
2829
"gcd_fakeram",
2930
"gcd_nangate45",

src/tap/test/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ or_integration_tests(
1919
endcap_autoselection_error2
2020
endcap_autoselection_error3
2121
endcap_autoselection_error4
22+
endcap_corners
2223
gcd_asap7
2324
gcd_fakeram
2425
gcd_nangate45

src/tap/test/endcap_corners.defok

Lines changed: 1036 additions & 0 deletions
Large diffs are not rendered by default.

src/tap/test/endcap_corners.ok

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[INFO ODB-0227] LEF file: Nangate45/Nangate45_tech.lef, created 22 layers, 27 vias
2+
[INFO ODB-0227] LEF file: Nangate45/Nangate45_stdcell.lef, created 135 library cells
3+
[INFO IFP-0005] Added 4 die polygon vertices to the list.
4+
[WARNING IFP-1003] Core polygon bounding box lower left (10.000, 10.000) snapped to (10.070, 11.200).
5+
[INFO IFP-1002] Added 63 polygon-aware rows for site FreePDK45_38x28_10R_NP_162NW_34O.
6+
[INFO IFP-0997] Completed polygon-aware row generation using 10 vertices
7+
[INFO TAP-0003] Inserted 10 endcap corners.
8+
[INFO TAP-0004] Inserted 952 endcaps.
9+
No differences found.

src/tap/test/endcap_corners.tcl

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
source "helpers.tcl"
2+
read_lef Nangate45/Nangate45_tech.lef
3+
read_lef Nangate45/Nangate45_stdcell.lef
4+
5+
read_verilog endcap_corners.v
6+
link_design empty
7+
8+
initialize_floorplan \
9+
-die_area "0 0 0 100 100 100 100 0" \
10+
-core_area "10 10 10 80 80 80 80 90 90 90 90 10 50 10 50 20 40 20 40 10 10 10" \
11+
-site FreePDK45_38x28_10R_NP_162NW_34O
12+
13+
set def_file [make_result_file endcap_corners.def]
14+
15+
place_endcaps \
16+
-corner TAPCELL_X1 \
17+
-edge_corner TAPCELL_X1 \
18+
-endcap TAPCELL_X1
19+
20+
check_placement -verbose
21+
22+
write_def $def_file
23+
24+
diff_file endcap_corners.defok $def_file

src/tap/test/endcap_corners.v

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
module empty ();
2+
endmodule

0 commit comments

Comments
 (0)