Rectilinear.create(net, tech.getLayer(layer), coords)
def _routing():
- return
+ return # all commented-out for now
af = CRL.AllianceFramework.get()
db = DataBase.getDB()
tech = db.getTechnology()
lib = Library.create(rootlib, 'LibreSOCMem')
- cell = Cell.create(lib, 'real_sram')
+ cell = Cell.create(lib, 'spblock_512w64b8w')
+ space = 0.1
+
with UpdateSession():
cell.setAbutmentBox(Box(
- u(0.0), u(0.0), u(16.0), u(40.0),
+ #u(0.0), u(0.0), u(110.025), u(2.025),
+ u(0.0), u(0.0), u(space*1000), u(space*25),
))
nets = {
'*': Net.create(cell, '*'),
'clk': Net.create(cell, 'clk'),
- 'i0': Net.create(cell, 'i0'),
- 'i1': Net.create(cell, 'i1'),
- 'q': Net.create(cell, 'q'),
- 'vdd': Net.create(cell, 'vdd'),
- 'vss': Net.create(cell, 'vss'),
+ #'vdd': Net.create(cell, 'vdd'),
+ #'vss': Net.create(cell, 'vss'),
}
- for name, qty in (('a', 8),
- ('d', 63),
- ('q', 63),
+ for name, qty in (('a', 9),
+ ('d', 64),
+ ('q', 64),
('we', 8),
):
for i in range(qty):
cname = "%s(%d)" % (name, i)
nets[cname] = Net.create(cell, cname)
+ # create series of stepped pins
+ x = space*20
+ wid = space
+ step = wid*5
+ for name, qty in (('a', 9),
+ ('d', 64),
+ ('q', 64),
+ ('we', 8),
+ ):
+ for i in range(qty):
+ cname = "%s(%d)" % (name, i)
+ net = nets[cname]
+ pin = Vertical.create(
+ net, tech.getLayer('metal1'),
+ u(x), u(wid), u(0), u(space*25),
+ )
+ x += step
+ net.setExternal(True)
+ NetExternalComponents.setExternal(pin)
+ # q is an output, has to be explicitly set as output
+ # everything else can kinda get away with not being set
+ if name == 'q':
+ net.setDirection( Net.Direction.OUT )
+ # separate the pin groups
+ x += step * 3
+
net = nets['*']
createRL(
tech, net, 'active',
tech, net, 'pimplant',
((0.115,0.195),(0.115,0.365),(0.285,0.365),(0.285,0.195),(0.115,0.195)),
)
- net = nets['vss']
- createRL(
- tech, net, 'pwell',
- ((-0.12,-0.32),(-0.12,1.92),(1.72,1.92),(1.72,-0.32),(-0.12,-0.32)),
- )
- createRL(
- tech, net, 'metal1',
- ((0.0,0.0),(0.0,0.48),(1.6,0.48),(1.6,0.0),(0.0,0.0)),
- )
if False:
- Vertical.create(
- net, tech.getLayer('metal1.pin'),
+ net = nets['vss']
+ createRL(
+ tech, net, 'pwell',
+ ((-0.12,-0.32),(-0.12,1.92),(1.72,1.92),(1.72,-0.32),(-0.12,-0.32)),
+ )
+ createRL(
+ tech, net, 'metal1',
+ ((0.0,0.0),(0.0,0.48),(1.6,0.48),(1.6,0.0),(0.0,0.0)),
+ )
+ if False:
+ Vertical.create(
+ net, tech.getLayer('metal1.pin'),
+ u(0.8), u(1.6), u(0.0), u(0.48),
+ )
+ pin = Vertical.create(
+ net, tech.getLayer('metal1'),
u(0.8), u(1.6), u(0.0), u(0.48),
)
- pin = Vertical.create(
- net, tech.getLayer('metal1'),
- u(0.8), u(1.6), u(0.0), u(0.48),
- )
- net.setExternal(True)
- NetExternalComponents.setExternal(pin)
- createRL(
- tech, net, 'active',
- ((0.12,0.2),(0.12,0.36),(0.28,0.36),(0.28,0.2),(0.12,0.2)),
- )
- createRL(
- tech, net, 'active',
- ((0.9625,0.3075),(1.0375,0.3075),(1.0375,0.3825),(0.9625,0.3825),(0.9625,0.3075)),
- )
- createRL(
- tech, net, 'contact',
- ((0.1675,0.2475),(0.2325,0.2475),(0.2325,0.3125),(0.1675,0.3125),(0.1675,0.2475)),
- )
- createRL(
- tech, net, 'contact',
- ((0.9675,0.3125),(1.0325,0.3125),(1.0325,0.3775),(0.9675,0.3775),(0.9675,0.3125)),
- )
+ net.setExternal(True)
+ NetExternalComponents.setExternal(pin)
+ createRL(
+ tech, net, 'active',
+ ((0.12,0.2),(0.12,0.36),(0.28,0.36),(0.28,0.2),(0.12,0.2)),
+ )
+ createRL(
+ tech, net, 'active',
+ ((0.9625,0.3075),(1.0375,0.3075),(1.0375,0.3825),(0.9625,0.3825),(0.9625,0.3075)),
+ )
+ createRL(
+ tech, net, 'contact',
+ ((0.1675,0.2475),(0.2325,0.2475),(0.2325,0.3125),(0.1675,0.3125),(0.1675,0.2475)),
+ )
+ createRL(
+ tech, net, 'contact',
+ ((0.9675,0.3125),(1.0325,0.3125),(1.0325,0.3775),(0.9675,0.3775),(0.9675,0.3125)),
+ )
net = nets['*']
createRL(
tech, net, 'active',
((1.105,3.8),(1.4375,3.8),(1.4375,2.2),(0.9625,2.2),(0.9625,3.8),(1.105,3.8)),
)
- net = nets['vdd']
- createRL(
- tech, net, 'nwell',
- ((-0.12,1.92),(-0.12,4.32),(1.72,4.32),(1.72,1.92),(-0.12,1.92)),
- )
- createRL(
- tech, net, 'metal1',
- ((0.0,3.52),(0.0,4.0),(1.6,4.0),(1.6,3.52),(0.0,3.52)),
- )
if False:
- Vertical.create(
- net, tech.getLayer('metal1.pin'),
+ net = nets['vdd']
+ createRL(
+ tech, net, 'nwell',
+ ((-0.12,1.92),(-0.12,4.32),(1.72,4.32),(1.72,1.92),(-0.12,1.92)),
+ )
+ createRL(
+ tech, net, 'metal1',
+ ((0.0,3.52),(0.0,4.0),(1.6,4.0),(1.6,3.52),(0.0,3.52)),
+ )
+ if False:
+ Vertical.create(
+ net, tech.getLayer('metal1.pin'),
+ u(0.8), u(1.6), u(3.52), u(4.0),
+ )
+ pin = Vertical.create(
+ net, tech.getLayer('metal1'),
u(0.8), u(1.6), u(3.52), u(4.0),
)
- pin = Vertical.create(
- net, tech.getLayer('metal1'),
- u(0.8), u(1.6), u(3.52), u(4.0),
- )
- net.setExternal(True)
- NetExternalComponents.setExternal(pin)
- createRL(
- tech, net, 'active',
- ((0.52,3.6),(0.52,3.76),(0.68,3.76),(0.68,3.6),(0.52,3.6)),
- )
- createRL(
- tech, net, 'active',
- ((0.9625,3.5675),(1.0375,3.5675),(1.0375,3.7825),(0.9625,3.7825),(0.9625,3.5675)),
- )
- createRL(
- tech, net, 'active',
- ((0.1625,3.6025),(0.2375,3.6025),(0.2375,3.6775),(0.1625,3.6775),(0.1625,3.6025)),
- )
- createRL(
- tech, net, 'contact',
- ((0.5675,3.6475),(0.6325,3.6475),(0.6325,3.7125),(0.5675,3.7125),(0.5675,3.6475)),
- )
- createRL(
- tech, net, 'contact',
- ((0.9675,3.5725),(1.0325,3.5725),(1.0325,3.6375),(0.9675,3.6375),(0.9675,3.5725)),
- )
- createRL(
- tech, net, 'contact',
- ((0.9675,3.7125),(1.0325,3.7125),(1.0325,3.7775),(0.9675,3.7775),(0.9675,3.7125)),
- )
- createRL(
- tech, net, 'contact',
- ((0.1675,3.6075),(0.2325,3.6075),(0.2325,3.6725),(0.1675,3.6725),(0.1675,3.6075)),
- )
+ net.setExternal(True)
+ NetExternalComponents.setExternal(pin)
+ createRL(
+ tech, net, 'active',
+ ((0.52,3.6),(0.52,3.76),(0.68,3.76),(0.68,3.6),(0.52,3.6)),
+ )
+ createRL(
+ tech, net, 'active',
+ ((0.9625,3.5675),(1.0375,3.5675),(1.0375,3.7825),(0.9625,3.7825),(0.9625,3.5675)),
+ )
+ createRL(
+ tech, net, 'active',
+ ((0.1625,3.6025),(0.2375,3.6025),(0.2375,3.6775),(0.1625,3.6775),(0.1625,3.6025)),
+ )
+ createRL(
+ tech, net, 'contact',
+ ((0.5675,3.6475),(0.6325,3.6475),(0.6325,3.7125),(0.5675,3.7125),(0.5675,3.6475)),
+ )
+ createRL(
+ tech, net, 'contact',
+ ((0.9675,3.5725),(1.0325,3.5725),(1.0325,3.6375),(0.9675,3.6375),(0.9675,3.5725)),
+ )
+ createRL(
+ tech, net, 'contact',
+ ((0.9675,3.7125),(1.0325,3.7125),(1.0325,3.7775),(0.9675,3.7775),(0.9675,3.7125)),
+ )
+ createRL(
+ tech, net, 'contact',
+ ((0.1675,3.6075),(0.2325,3.6075),(0.2325,3.6725),(0.1675,3.6725),(0.1675,3.6075)),
+ )
net = nets['*']
createRL(
tech, net, 'active',
((0.305,1.38),(0.495,1.38),(0.495,0.62),(0.1625,0.62),(0.1625,1.38),(0.305,1.38)),
)
- net = nets['i0']
- createRL(
- tech, net, 'poly',
- ((0.425,1.385),(0.425,0.565),(0.375,0.565),(0.375,1.9625),(0.2025,1.9625),(0.2025,2.0375),(0.375,2.0375),(0.375,3.455),(0.425,3.455),(0.425,1.385)),
- )
- createRL(
- tech, net, 'metal1',
- ((0.2325,1.9325),(0.2325,1.4125),(0.1675,1.4125),(0.1675,3.455),(0.2325,3.455),(0.2325,2.0675),(0.2725,2.0675),(0.2725,1.9325),(0.2325,1.9325)),
- )
- if False:
- Vertical.create(
- net, tech.getLayer('metal1.pin'),
- u(0.2), u(0.065), u(1.4125), u(3.455),
- )
- pin = Vertical.create(
- net, tech.getLayer('metal1'),
- u(0.2), u(0.065), u(1.4125), u(3.455),
- )
- net.setExternal(True)
- NetExternalComponents.setExternal(pin)
- createRL(
- tech, net, 'contact',
- ((0.2075,1.9675),(0.2725,1.9675),(0.2725,2.0325),(0.2075,2.0325),(0.2075,1.9675)),
- )
net = nets['*']
createRL(
tech, net, 'active',
tech, net, 'active',
((0.705,1.0),(1.0375,1.0),(1.0375,0.24),(0.555,0.24),(0.555,1.0),(0.705,1.0)),
)
- net = nets['i1']
+ net = nets['clk']
createRL(
tech, net, 'poly',
((0.775,0.185),(0.775,1.2375),(0.9975,1.2375),(0.9975,1.1625),(0.825,1.1625),(0.825,0.185),(0.775,0.185)),
if False:
Vertical.create(
net, tech.getLayer('metal1.pin'),
- u(1.0), u(0.065), u(0.545), u(3.455),
+ u(1.0), u(0.065), u(0), u(3.455),
)
pin = Vertical.create(
net, tech.getLayer('metal1'),
- u(1.0), u(0.065), u(0.545), u(3.455),
+ u(1.0), u(0.065), u(0), u(3.455),
)
net.setExternal(True)
NetExternalComponents.setExternal(pin)
tech, net, 'active',
((0.775,2.6),(0.705,2.6),(0.705,3.4),(0.955,3.4),(0.955,3.7825),(1.045,3.7825),(1.045,2.6),(0.775,2.6)),
)
- net = nets['q']
- createRL(
- tech, net, 'metal1',
- ((1.4325,2.185),(1.4325,0.545),(1.3675,0.545),(1.3675,3.455),(1.4325,3.455),(1.4325,2.185)),
- )
- if False:
- Vertical.create(
- net, tech.getLayer('metal1.pin'),
- u(1.4), u(0.065), u(0.545), u(3.455),
- )
- pin = Vertical.create(
- net, tech.getLayer('metal1'),
- u(1.4), u(0.065), u(0.545), u(3.455),
- )
- net.setExternal(True)
- NetExternalComponents.setExternal(pin)
- createRL(
- tech, net, 'active',
- ((1.3625,2.215),(1.4375,2.215),(1.4375,3.41),(1.3625,3.41),(1.3625,2.215)),
- )
- createRL(
- tech, net, 'active',
- ((1.3625,0.61),(1.4375,0.61),(1.4375,0.965),(1.3625,0.965),(1.3625,0.61)),
- )
- createRL(
- tech, net, 'contact',
- ((1.3675,2.22),(1.4325,2.22),(1.4325,2.285),(1.3675,2.285),(1.3675,2.22)),
- )
- createRL(
- tech, net, 'contact',
- ((1.3675,2.36),(1.4325,2.36),(1.4325,2.425),(1.3675,2.425),(1.3675,2.36)),
- )
- createRL(
- tech, net, 'contact',
- ((1.3675,2.5),(1.4325,2.5),(1.4325,2.565),(1.3675,2.565),(1.3675,2.5)),
- )
- createRL(
- tech, net, 'contact',
- ((1.3675,2.64),(1.4325,2.64),(1.4325,2.705),(1.3675,2.705),(1.3675,2.64)),
- )
- createRL(
- tech, net, 'contact',
- ((1.3675,2.78),(1.4325,2.78),(1.4325,2.845),(1.3675,2.845),(1.3675,2.78)),
- )
- createRL(
- tech, net, 'contact',
- ((1.3675,2.92),(1.4325,2.92),(1.4325,2.985),(1.3675,2.985),(1.3675,2.92)),
- )
- createRL(
- tech, net, 'contact',
- ((1.3675,3.06),(1.4325,3.06),(1.4325,3.125),(1.3675,3.125),(1.3675,3.06)),
- )
- createRL(
- tech, net, 'contact',
- ((1.3675,3.2),(1.4325,3.2),(1.4325,3.265),(1.3675,3.265),(1.3675,3.2)),
- )
- createRL(
- tech, net, 'contact',
- ((1.3675,3.34),(1.4325,3.34),(1.4325,3.405),(1.3675,3.405),(1.3675,3.34)),
- )
- createRL(
- tech, net, 'contact',
- ((1.3675,0.615),(1.4325,0.615),(1.4325,0.68),(1.3675,0.68),(1.3675,0.615)),
- )
- createRL(
- tech, net, 'contact',
- ((1.3675,0.755),(1.4325,0.755),(1.4325,0.82),(1.3675,0.82),(1.3675,0.755)),
- )
- createRL(
- tech, net, 'contact',
- ((1.3675,0.895),(1.4325,0.895),(1.4325,0.96),(1.3675,0.96),(1.3675,0.895)),
- )
af.wrapLibrary(lib, 0)