11
11
import click
12
12
import odb
13
13
14
+ sys .path .append ('../../py' )
15
+ import tt
16
+
14
17
try :
15
18
from reader import click_odb
16
19
interactive = False
25
28
def route_analog_pins (
26
29
reader ,
27
30
):
31
+ tti = tt .TinyTapeout ()
28
32
29
33
# Manual routing for analog pins
30
34
tech = reader .db .getTech ()
@@ -39,76 +43,36 @@ def route_analog_pins(
39
43
layer_rule .setSpacing (2700 )
40
44
41
45
for inst in reader .block .getInsts ():
42
- if inst .getMaster ().getName () == "tt_um_htfab_r2r_dac" :
43
- for term in inst .getITerms ():
44
- net = term .getNet ()
45
- if net .getName () == "pad_raw[58]" :
46
- net .clearSpecial ()
47
- net .setNonDefaultRule (analog_track )
48
- bbox = term .getBBox ()
49
- wire = odb .dbWire .create (net )
50
- encoder = odb .dbWireEncoder ()
51
- encoder .begin (wire )
52
- encoder .newPath (metal5 , "FIXED" , analog_track .getLayerRule (metal5 ))
53
- encoder .addPoint (bbox .xMin (), bbox .yCenter ())
54
- encoder .addPoint (bbox .xMin () - 50000 , bbox .yCenter ())
55
- encoder .addTechVia (via4 )
56
- encoder .addPoint (bbox .xMin () - 50000 , 988490 )
57
- encoder .addPoint (319855 , 988490 )
58
- encoder .addTechVia (via3 )
59
- encoder .addPoint (319855 , 987490 )
60
- encoder .end ()
61
- if inst .getMaster ().getName () == "tt_um_algofoogle_antonalog" :
62
- for term in inst .getITerms ():
63
- net = term .getNet ()
64
- if net .getName () == "pad_raw[59]" :
65
- net .clearSpecial ()
66
- net .setNonDefaultRule (analog_track )
67
- bbox = term .getBBox ()
68
- wire = odb .dbWire .create (net )
69
- encoder = odb .dbWireEncoder ()
70
- encoder .begin (wire )
71
- encoder .newPath (metal5 , "FIXED" , analog_track .getLayerRule (metal5 ))
72
- encoder .addPoint (bbox .xMin (), bbox .yCenter ())
73
- encoder .addPoint (bbox .xMin () - 47300 , bbox .yCenter ())
74
- encoder .addTechVia (via4 )
75
- encoder .addPoint (bbox .xMin () - 47300 , 886490 )
76
- encoder .addPoint (319855 , 886490 )
77
- encoder .addTechVia (via3 )
78
- encoder .addPoint (319855 , 884490 )
79
- encoder .end ()
80
- if net .getName () == "pad_raw[60]" :
81
- net .clearSpecial ()
82
- net .setNonDefaultRule (analog_track )
83
- bbox = term .getBBox ()
84
- wire = odb .dbWire .create (net )
85
- encoder = odb .dbWireEncoder ()
86
- encoder .begin (wire )
87
- encoder .newPath (metal5 , "FIXED" , analog_track .getLayerRule (metal5 ))
88
- encoder .addPoint (bbox .xMin (), bbox .yCenter ())
89
- encoder .addPoint (bbox .xMin () - 50000 , bbox .yCenter ())
90
- encoder .addTechVia (via4 )
91
- encoder .addPoint (bbox .xMin () - 50000 , 784490 )
92
- encoder .addPoint (319855 , 784490 )
93
- encoder .addTechVia (via3 )
94
- encoder .addPoint (319855 , 782490 )
95
- encoder .end ()
96
- if net .getName () == "pad_raw[61]" :
97
- net .clearSpecial ()
98
- net .setNonDefaultRule (analog_track )
99
- bbox = term .getBBox ()
100
- wire = odb .dbWire .create (net )
101
- encoder = odb .dbWireEncoder ()
102
- encoder .begin (wire )
103
- encoder .newPath (metal5 , "FIXED" , analog_track .getLayerRule (metal5 ))
104
- encoder .addPoint (bbox .xMin (), bbox .yCenter ())
105
- encoder .addPoint (bbox .xMin () - 50000 , bbox .yCenter ())
106
- encoder .addTechVia (via4 )
107
- encoder .addPoint (bbox .xMin () - 50000 , 682490 )
108
- encoder .addPoint (319855 , 682490 )
109
- encoder .addTechVia (via3 )
110
- encoder .addPoint (319855 , 680490 )
111
- encoder .end ()
46
+ name = inst .getMaster ().getName ()
47
+ if not name .startswith ("tt_um_" ):
48
+ continue
49
+ user_module = next (filter (lambda m : m .name == name [6 :], tti .placer .modules ), None )
50
+ if not user_module .analog_dedicated :
51
+ continue
52
+ paths = user_module .analog_dedicated ["paths" ]
53
+ for term in inst .getITerms ():
54
+ net = term .getNet ()
55
+ if net .getName () in paths :
56
+ net .clearSpecial ()
57
+ net .setNonDefaultRule (analog_track )
58
+ bbox = term .getBBox ()
59
+ wire = odb .dbWire .create (net )
60
+ encoder = odb .dbWireEncoder ()
61
+ encoder .begin (wire )
62
+ encoder .newPath (metal5 , "FIXED" , analog_track .getLayerRule (metal5 ))
63
+ x = bbox .xMin ()
64
+ y = bbox .yCenter ()
65
+ encoder .addPoint (x , y )
66
+ for item in paths [net .getName ()]:
67
+ if "x" in item :
68
+ x = item ["x" ]
69
+ encoder .addPoint (x , y )
70
+ if "y" in item :
71
+ y = item ["y" ]
72
+ encoder .addPoint (x , y )
73
+ if "via" in item :
74
+ encoder .addTechVia (tech .findVia (item ["via" ]))
75
+ encoder .end ()
112
76
113
77
114
78
if __name__ == "__main__" :
0 commit comments