1import opendbpy as odb
2import os
3
4current_dir = os.path.dirname(os.path.realpath(__file__))
5tests_dir = os.path.abspath(os.path.join(current_dir, os.pardir))
6opendb_dir = os.path.abspath(os.path.join(tests_dir, os.pardir))
7data_dir = os.path.join(tests_dir, "data")
8
9db = odb.dbDatabase.create()
10odb.read_lef(db, os.path.join(data_dir, "gscl45nm.lef"))
11odb.read_def(db, os.path.join(data_dir, "design.def"))
12chip = db.getChip()
13tech = db.getTech()
14
15vias = tech.getVias()
16via1 = vias[0]
17layer1 = via1.getBottomLayer()
18via2 = vias[1]
19via3 = vias[2]
20block = chip.getBlock()
21net = odb.dbNet_create(block, "w1")
22wire = odb.dbWire_create(net)
23wire_encoder =  odb.dbWireEncoder()
24
25wire_encoder.begin(wire)
26wire_encoder.newPath(layer1, "ROUTED")
27wire_encoder.addPoint(2000,2000)
28
29jid1 = wire_encoder.addPoint(10000,2000)
30wire_encoder.addPoint(18000,2000)
31wire_encoder.newPath(jid1)
32wire_encoder.addTechVia(via1)
33
34jid2 = wire_encoder.addPoint(10000,10000)
35wire_encoder.addPoint(10000,18000)
36wire_encoder.newPath(jid2)
37
38jid3=wire_encoder.addTechVia(via2)
39wire_encoder.end()
40
41result = odb.write_def(block, os.path.join(opendb_dir, "build/wire_encoder.def"))
42if(result!=1):
43    exit("Write DEF failed")
44