mirror of
https://github.com/VLSIDA/OpenRAM.git
synced 2026-09-02 02:57:53 +02:00
Changing the location of the vdd contact in precharge to avoid drc errors when the bitlines are close to the edge of the cell. Correcting replica bitcell function in pbitcell.
This commit is contained in:
@@ -233,7 +233,7 @@ class pbitcell(design.design):
|
||||
- self.num_rw_ports*(self.readwrite_nmos.active_width + self.port_spacing) \
|
||||
- self.num_w_ports*(self.write_nmos.active_width + self.port_spacing) \
|
||||
- self.num_r_ports*(self.read_port_width + self.port_spacing) \
|
||||
- self.bitline_offset - 0.5*self.m2_space
|
||||
- self.bitline_offset - 0.5*self.m2_width
|
||||
|
||||
self.width = -2*self.leftmost_xpos
|
||||
self.height = self.topmost_ypos - self.botmost_ypos
|
||||
@@ -925,7 +925,7 @@ class pbitcell(design.design):
|
||||
|
||||
def route_rbc_short(self):
|
||||
""" route the short from Q_bar to gnd necessary for the replica bitcell """
|
||||
Q_bar_pos = self.inverter_pmos_left.get_pin("D").uc()
|
||||
Q_bar_pos = self.inverter_pmos_right.get_pin("S").uc()
|
||||
vdd_pos = vector(Q_bar_pos.x, self.vdd_position.y)
|
||||
|
||||
self.add_path("metal1", [Q_bar_pos, vdd_pos])
|
||||
|
||||
@@ -78,13 +78,14 @@ class precharge(pgate.pgate):
|
||||
self.add_path("metal1", [pmos_pin.uc(), vdd_pos])
|
||||
|
||||
# Add the M1->M2->M3 stack at the left edge
|
||||
vdd_contact_pos = vector(0.5*self.width, vdd_position.y + 0.5*self.m1_width)
|
||||
self.add_via_center(layers=("metal1", "via1", "metal2"),
|
||||
offset=vdd_pos.scale(0,1))
|
||||
offset=vdd_contact_pos)
|
||||
self.add_via_center(layers=("metal2", "via2", "metal3"),
|
||||
offset=vdd_pos.scale(0,1))
|
||||
offset=vdd_contact_pos)
|
||||
self.add_layout_pin_rect_center(text="vdd",
|
||||
layer="metal3",
|
||||
offset=vdd_pos.scale(0,1))
|
||||
offset=vdd_contact_pos)
|
||||
|
||||
|
||||
def create_ptx(self):
|
||||
@@ -112,7 +113,7 @@ class precharge(pgate.pgate):
|
||||
|
||||
# adds the lower pmos to layout
|
||||
#base = vector(self.width - 2*self.pmos.width + self.overlap_offset.x, 0)
|
||||
self.lower_pmos_position = vector(self.bitcell.get_pin(self.bitcell_bl).lx(),
|
||||
self.lower_pmos_position = vector(max(self.bitcell.get_pin(self.bitcell_bl).lx(), self.well_enclose_active),
|
||||
self.pmos.active_offset.y)
|
||||
self.lower_pmos_inst.place(self.lower_pmos_position)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user