Skip to content

Commit 2c7e8b5

Browse files
committed
odb: add test for readBMap
Signed-off-by: Peter Gadfort <[email protected]>
1 parent f547bba commit 2c7e8b5

File tree

3 files changed

+73
-0
lines changed

3 files changed

+73
-0
lines changed

src/odb/test/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,7 @@ filegroup(
279279
"data/example.3dbv",
280280
"data/example.3dbx",
281281
"data/example.bmap",
282+
"data/example1.bmap",
282283
"data/floorplan_initialize.def",
283284
"data/floorplan_initialize.v",
284285
"data/floorplan_initialize2.def",

src/odb/test/cpp/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ cc_test(
224224
],
225225
deps = [
226226
"//src/odb",
227+
"//src/odb/test/cpp/helper",
227228
"//src/tst",
228229
"//src/tst:nangate45_fixture",
229230
"//src/utl",

src/odb/test/cpp/Test3DBloxParser.cpp

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include <string>
33

44
#include "gtest/gtest.h"
5+
#include "helper.h"
56
#include "odb/3dblox.h"
67
#include "odb/db.h"
78
#include "odb/geom.h"
@@ -133,5 +134,75 @@ TEST_F(DbvFixture, test_bump_map_parser)
133134
EXPECT_EQ(bump_inst->getChipRegionInst(), region_inst);
134135
}
135136

137+
TEST_F(SimpleDbFixture, test_bump_map_reader)
138+
{
139+
createSimpleDB();
140+
141+
db_->setDbuPerMicron(1000);
142+
143+
// Create BUMP master
144+
dbLib* lib = db_->findLib("lib1");
145+
dbTechLayer* layer
146+
= dbTechLayer::create(lib->getTech(), "TOP", dbTechLayerType::ROUTING);
147+
dbMaster* master = dbMaster::create(lib, "BUMP");
148+
master->setWidth(10000);
149+
master->setHeight(10000);
150+
master->setOrigin(5000, 5000);
151+
master->setType(dbMasterType::COVER_BUMP);
152+
dbMTerm* term
153+
= dbMTerm::create(master, "PAD", dbIoType::INOUT, dbSigType::SIGNAL);
154+
dbMPin* pin = dbMPin::create(term);
155+
dbBox::create(pin, layer, -2000, -2000, 2000, 2000);
156+
master->setFrozen();
157+
158+
// Create BTerms
159+
dbBlock* block = db_->getChip()->getBlock();
160+
dbBTerm* SIG1 = dbBTerm::create(dbNet::create(block, "SIG1"), "SIG1");
161+
dbBTerm* SIG2 = dbBTerm::create(dbNet::create(block, "SIG2"), "SIG2");
162+
block->setDieArea(Rect(0, 0, 500, 500));
163+
164+
EXPECT_EQ(block->getInsts().size(), 0);
165+
166+
ThreeDBlox parser(&logger_, db_.get());
167+
std::string path = getFilePath(prefix + "data/example1.bmap");
168+
parser.readBMap(path, false);
169+
170+
// Check bumps were created
171+
EXPECT_EQ(block->getInsts().size(), 2);
172+
dbInst* inst1 = block->findInst("bump1");
173+
EXPECT_EQ(inst1->getBBox()->getBox().xCenter(), 100 * 1000);
174+
EXPECT_EQ(inst1->getBBox()->getBox().yCenter(), 200 * 1000);
175+
dbInst* inst2 = block->findInst("bump2");
176+
EXPECT_EQ(inst2->getBBox()->getBox().xCenter(), 150 * 1000);
177+
EXPECT_EQ(inst2->getBBox()->getBox().yCenter(), 200 * 1000);
178+
179+
// Check that no BPins where added
180+
EXPECT_EQ(SIG1->getBPins().size(), 0);
181+
EXPECT_EQ(SIG2->getBPins().size(), 0);
182+
183+
// Read bmap again to add bpins
184+
parser.readBMap(path, true);
185+
186+
// Check that BPins where added
187+
EXPECT_EQ(SIG1->getBPins().size(), 1);
188+
EXPECT_EQ(SIG2->getBPins().size(), 1);
189+
EXPECT_EQ(SIG1->getBPins().begin()->getBoxes().size(), 1);
190+
EXPECT_EQ(SIG2->getBPins().begin()->getBoxes().size(), 1);
191+
192+
// Check bPin shape and layer
193+
dbBox* sig1_box = *SIG1->getBPins().begin()->getBoxes().begin();
194+
dbBox* sig2_box = *SIG2->getBPins().begin()->getBoxes().begin();
195+
EXPECT_EQ(sig1_box->getTechLayer(), layer);
196+
EXPECT_EQ(sig1_box->getBox().xMin(), 98000);
197+
EXPECT_EQ(sig1_box->getBox().yMin(), 198000);
198+
EXPECT_EQ(sig1_box->getBox().xMax(), 102000);
199+
EXPECT_EQ(sig1_box->getBox().yMax(), 202000);
200+
EXPECT_EQ(sig2_box->getTechLayer(), layer);
201+
EXPECT_EQ(sig2_box->getBox().xMin(), 148000);
202+
EXPECT_EQ(sig2_box->getBox().yMin(), 198000);
203+
EXPECT_EQ(sig2_box->getBox().xMax(), 152000);
204+
EXPECT_EQ(sig2_box->getBox().yMax(), 202000);
205+
}
206+
136207
} // namespace
137208
} // namespace odb

0 commit comments

Comments
 (0)