mirror of https://github.com/VLSIDA/OpenRAM.git
move vdd pins around to make routing nice
This commit is contained in:
parent
5c22e382b5
commit
ddba3b3718
|
|
@ -120,3 +120,14 @@ class rom_address_control_array(design):
|
||||||
for pin in tmp_pins:
|
for pin in tmp_pins:
|
||||||
self.copy_layout_pin(self, "vdd_edge", "vdd")
|
self.copy_layout_pin(self, "vdd_edge", "vdd")
|
||||||
self.remove_layout_pin("vdd_edge")
|
self.remove_layout_pin("vdd_edge")
|
||||||
|
|
||||||
|
tmp_pins = []
|
||||||
|
for pin in self.get_pins("gnd"):
|
||||||
|
edge = vector(pin.rx() + 0.5 * self.route_width, pin.cy())
|
||||||
|
tmp_pins.append(self.add_layout_pin_rect_center("gnd_edge", layer=self.route_layer, offset=edge))
|
||||||
|
self.copy_layout_pin_shapes("gnd")
|
||||||
|
self.remove_layout_pin("gnd")
|
||||||
|
|
||||||
|
for pin in tmp_pins:
|
||||||
|
self.copy_layout_pin(self, "gnd_edge", "gnd")
|
||||||
|
self.remove_layout_pin("gnd_edge")
|
||||||
|
|
@ -127,8 +127,6 @@ class rom_address_control_buf(design):
|
||||||
poly_y = A_out.cy()
|
poly_y = A_out.cy()
|
||||||
|
|
||||||
contact_offset = vector(ppoly_center, clk2_pin.cy())
|
contact_offset = vector(ppoly_center, clk2_pin.cy())
|
||||||
self.add_layout_pin_rect_center("cont", offset=contact_offset, layer="poly")
|
|
||||||
self.add_layout_pin_rect_center("ppoly", offset=vector(ppoly_center, poly_y), layer="poly")
|
|
||||||
|
|
||||||
# Route the two shared clk inputs together by connecting poly
|
# Route the two shared clk inputs together by connecting poly
|
||||||
self.add_segment_center("poly", contact_offset, vector(ppoly_center, poly_y))
|
self.add_segment_center("poly", contact_offset, vector(ppoly_center, poly_y))
|
||||||
|
|
@ -180,7 +178,6 @@ class rom_address_control_buf(design):
|
||||||
left_edge = self.inv_inst.get_pin("Z").cx() - 2 * self.contact_width - 2 * self.active_contact_to_gate - 4 * self.active_enclose_contact - self.poly_width - self.active_space
|
left_edge = self.inv_inst.get_pin("Z").cx() - 2 * self.contact_width - 2 * self.active_contact_to_gate - 4 * self.active_enclose_contact - self.poly_width - self.active_space
|
||||||
|
|
||||||
contact_pos = vector(left_edge, source_pin.cy())
|
contact_pos = vector(left_edge, source_pin.cy())
|
||||||
self.add_layout_pin_rect_center("left_edge", offset=contact_pos, layer="m1")
|
|
||||||
self.add_via_center(layers=self.active_stack,
|
self.add_via_center(layers=self.active_stack,
|
||||||
offset=contact_pos,
|
offset=contact_pos,
|
||||||
implant_type="n",
|
implant_type="n",
|
||||||
|
|
|
||||||
|
|
@ -88,8 +88,6 @@ class rom_wordline_driver_array(design):
|
||||||
Add a pin for each row of vdd/gnd which
|
Add a pin for each row of vdd/gnd which
|
||||||
are must-connects next level up.
|
are must-connects next level up.
|
||||||
"""
|
"""
|
||||||
# self.route_vertical_pins("vdd", self.wld_inst, xside="cx", layer=self.supply_layer)
|
|
||||||
# self.route_vertical_pins("gnd", self.wld_inst, xside="cx", layer=self.supply_layer)
|
|
||||||
if not self.invert_outputs:
|
if not self.invert_outputs:
|
||||||
vdd_pins = [pin for inst in self.wld_inst for pin in inst.get_pins("vdd")]
|
vdd_pins = [pin for inst in self.wld_inst for pin in inst.get_pins("vdd")]
|
||||||
gnd_pins = [pin for inst in self.wld_inst for pin in inst.get_pins("gnd")]
|
gnd_pins = [pin for inst in self.wld_inst for pin in inst.get_pins("gnd")]
|
||||||
|
|
@ -110,13 +108,13 @@ class rom_wordline_driver_array(design):
|
||||||
|
|
||||||
# Place the top level supply pins on the edge of the module
|
# Place the top level supply pins on the edge of the module
|
||||||
for pin in self.get_pins("gnd_tmp"):
|
for pin in self.get_pins("gnd_tmp"):
|
||||||
bottom = vector(pin.cx(), pin.by() - 0.5 * supply_width)
|
bottom = vector(pin.cx(), pin.by())
|
||||||
top = vector(pin.cx(), pin.uy() + 0.5 * supply_width)
|
top = vector(pin.cx(), pin.uy())
|
||||||
self.add_layout_pin_rect_ends(layer=self.supply_layer, start=bottom, end=top, name="gnd")
|
self.add_layout_pin_rect_ends(layer=self.supply_layer, start=bottom, end=top, name="gnd")
|
||||||
|
|
||||||
for pin in self.get_pins("vdd_tmp"):
|
for pin in self.get_pins("vdd_tmp"):
|
||||||
bottom = vector(pin.cx(), pin.by() - 0.5 * supply_width)
|
bottom = vector(pin.cx(), pin.by())
|
||||||
top = vector(pin.cx(), pin.uy() + 0.5 * supply_width)
|
top = vector(pin.cx(), pin.uy())
|
||||||
self.add_layout_pin_rect_ends(layer=self.supply_layer, start=bottom, end=top, name="vdd")
|
self.add_layout_pin_rect_ends(layer=self.supply_layer, start=bottom, end=top, name="vdd")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue