mirror of https://github.com/VLSIDA/OpenRAM.git
Fix bug in multifinger ptx. Replace LEF file with new snapped layout.
This commit is contained in:
parent
10a8531813
commit
5c10aebc0f
|
|
@ -36,7 +36,6 @@ class nand_2(design.design):
|
|||
|
||||
self.add_pins()
|
||||
self.create_layout()
|
||||
print self.pin_map
|
||||
self.DRC_LVS()
|
||||
|
||||
def add_pins(self):
|
||||
|
|
|
|||
|
|
@ -238,17 +238,17 @@ class ptx(design.design):
|
|||
# following poly(s)
|
||||
for i in range(0, self.mults):
|
||||
if self.connect_poly:
|
||||
self.add_layout_pin(text="G",
|
||||
layer="poly",
|
||||
offset=[poly_xoffset, poly_yoffset],
|
||||
width=self.poly_width,
|
||||
height=self.poly_height)
|
||||
else:
|
||||
# Add the rectangle in case we remove the pin when joining fingers
|
||||
self.add_rect(layer="poly",
|
||||
offset=[poly_xoffset, poly_yoffset],
|
||||
width=self.poly_width,
|
||||
height=self.poly_height)
|
||||
else:
|
||||
self.add_layout_pin(text="G",
|
||||
layer="poly",
|
||||
offset=[poly_xoffset, poly_yoffset],
|
||||
width=self.poly_width,
|
||||
height=self.poly_height)
|
||||
self.poly_positions.append(vector(poly_xoffset, poly_yoffset))
|
||||
poly_xoffset += self.mults_poly_to_poly + drc["minwidth_poly"]
|
||||
|
||||
|
|
@ -325,17 +325,17 @@ class ptx(design.design):
|
|||
size=(1, self.num_contacts))
|
||||
# source are even
|
||||
if self.connect_active:
|
||||
self.add_layout_pin(text="S",
|
||||
layer="metal1",
|
||||
offset=offset+contact.second_layer_position,
|
||||
width=contact.second_layer_width,
|
||||
height=contact.second_layer_height)
|
||||
else:
|
||||
# Add this in case the pins get removed when fingers joined
|
||||
self.add_rect(layer="metal1",
|
||||
offset=offset+contact.second_layer_position,
|
||||
width=contact.second_layer_width,
|
||||
height=contact.second_layer_height)
|
||||
else:
|
||||
self.add_layout_pin(text="S",
|
||||
layer="metal1",
|
||||
offset=offset+contact.second_layer_position,
|
||||
width=contact.second_layer_width,
|
||||
height=contact.second_layer_height)
|
||||
self.active_contact_positions.append(offset)
|
||||
|
||||
# middle contact columns
|
||||
|
|
@ -350,18 +350,18 @@ class ptx(design.design):
|
|||
size=(1, self.num_contacts))
|
||||
# source are even, drain are odd
|
||||
if self.connect_active:
|
||||
# Add this in case the pins get removed when fingers joined
|
||||
self.add_rect(layer="metal1",
|
||||
offset=offset+contact.second_layer_position,
|
||||
width=contact.second_layer_width,
|
||||
height=contact.second_layer_height)
|
||||
else:
|
||||
name = "S" if i%2==1 else "D"
|
||||
self.add_layout_pin(text=name,
|
||||
layer="metal1",
|
||||
offset=offset+contact.second_layer_position,
|
||||
width=contact.second_layer_width,
|
||||
height=contact.second_layer_height)
|
||||
else:
|
||||
# Add this in case the pins get removed when fingers joined
|
||||
self.add_rect(layer="metal1",
|
||||
offset=offset+contact.second_layer_position,
|
||||
width=contact.second_layer_width,
|
||||
height=contact.second_layer_height)
|
||||
|
||||
self.active_contact_positions.append(offset)
|
||||
|
||||
|
|
@ -375,17 +375,17 @@ class ptx(design.design):
|
|||
size=(1, self.num_contacts))
|
||||
# source are even, drain are odd
|
||||
if self.connect_active:
|
||||
self.add_rect(layer="metal1",
|
||||
offset=offset+contact.second_layer_position,
|
||||
width=contact.second_layer_width,
|
||||
height=contact.second_layer_height)
|
||||
else:
|
||||
name = "D" if self.mults%2==1 else "S"
|
||||
self.add_layout_pin(text=name,
|
||||
layer="metal1",
|
||||
offset=offset+contact.second_layer_position,
|
||||
width=contact.second_layer_width,
|
||||
height=contact.second_layer_height)
|
||||
else:
|
||||
self.add_rect(layer="metal1",
|
||||
offset=offset+contact.second_layer_position,
|
||||
width=contact.second_layer_width,
|
||||
height=contact.second_layer_height)
|
||||
# Add this in case the pins get removed when fingers joined
|
||||
self.active_contact_positions.append(offset)
|
||||
|
||||
|
|
|
|||
|
|
@ -25,9 +25,9 @@ class pinv_test(unittest.TestCase):
|
|||
import pinv
|
||||
import tech
|
||||
|
||||
debug.info(2, "Checking min size inverter")
|
||||
tx = pinv.pinv(nmos_width=tech.drc["minwidth_tx"], beta=tech.parameter["pinv_beta"])
|
||||
self.local_check(tx)
|
||||
# debug.info(2, "Checking min size inverter")
|
||||
# tx = pinv.pinv(nmos_width=tech.drc["minwidth_tx"], beta=tech.parameter["pinv_beta"])
|
||||
# self.local_check(tx)
|
||||
|
||||
debug.info(2, "Checking 2x min size inverter")
|
||||
tx = pinv.pinv(nmos_width=2 * tech.drc["minwidth_tx"], beta=tech.parameter["pinv_beta"])
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -144,8 +144,8 @@ class wordline_driver(design.design):
|
|||
self.add_center_rect(layer="metal1",
|
||||
start=clk_offset,
|
||||
end=a_pos)
|
||||
self.add_center_via(layers=("metal1", "via1", "metal2"),
|
||||
offset=clk_offset)
|
||||
m1m2_via = self.add_center_via(layers=("metal1", "via1", "metal2"),
|
||||
offset=clk_offset)
|
||||
|
||||
# first inv to nand2 B
|
||||
zl_pos = inv1_inst.get_pin("Z").lc()
|
||||
|
|
@ -165,14 +165,14 @@ class wordline_driver(design.design):
|
|||
a_pin = nand_inst.get_pin("A")
|
||||
a_pos = a_pin.lc()
|
||||
input_offset = vector(0,a_pos.y)
|
||||
mid_via_offset = vector(clk_offset.x,a_pos.y) + vector(drc["minwidth_metal2"]+drc["metal2_to_metal2"],0)
|
||||
mid_via_offset = vector(clk_offset.x,a_pos.y) + vector(0.5*drc["minwidth_metal2"]+drc["metal2_to_metal2"]+0.5*m1m2_via.width,0)
|
||||
# must under the clk line in M1
|
||||
self.add_center_layout_pin(text="in[{0}]".format(row),
|
||||
layer="metal1",
|
||||
start=input_offset,
|
||||
end=mid_via_offset)
|
||||
m1m2_via=self.add_center_via(layers=("metal1", "via1", "metal2"),
|
||||
offset=mid_via_offset)
|
||||
self.add_center_via(layers=("metal1", "via1", "metal2"),
|
||||
offset=mid_via_offset)
|
||||
|
||||
# now connect to the nand2 A
|
||||
self.add_center_rect(layer="metal2",
|
||||
|
|
|
|||
Loading…
Reference in New Issue