Create sized RBL WL driver in port_address

This commit is contained in:
mrg
2020-09-28 11:30:21 -07:00
parent c7d32089f3
commit 6f06bb9dd5
8 changed files with 21 additions and 18 deletions
+4 -5
View File
@@ -372,9 +372,7 @@ class bank(design.design):
cols=self.num_cols + self.num_spare_cols,
rows=self.num_rows,
port=port))
self.add_mod(self.port_address[port])
self.num_rbl = len(self.all_ports)
self.add_mod(self.port_address[port])
try:
local_array_size = OPTS.local_array_size
@@ -875,8 +873,9 @@ class bank(design.design):
def route_port_address_right(self, port):
""" Connecting Wordline driver output to Bitcell WL connection """
driver_names = ["wl_{}".format(x) for x in range(self.num_rows)]
for (driver_name, array_name) in zip(driver_names, self.bitcell_array.get_wordline_names(port)):
driver_names = ["wl_{}".format(x) for x in range(self.num_rows)] + ["rbl_wl"]
rbl_wl_name = self.bitcell_array.get_rbl_wordline_names(port)[port]
for (driver_name, array_name) in zip(driver_names, self.bitcell_array.get_wordline_names(port) + [rbl_wl_name]):
# The mid guarantees we exit the input cell to the right.
driver_wl_pin = self.port_address_inst[port].get_pin(driver_name)
driver_wl_pos = driver_wl_pin.lc()
+1
View File
@@ -267,3 +267,4 @@ class global_bitcell_array(bitcell_base_array.bitcell_base_array):
for inst in self.local_insts:
offsets.extend(inst.lx() + x for x in inst.mod.get_column_offsets())
return offsets
+2 -2
View File
@@ -207,9 +207,9 @@ class local_bitcell_array(bitcell_base_array.bitcell_base_array):
y_offset = in_pin.cy()
if port == 0:
y_offset -= 1.5 * self.m3_pitch
y_offset -= 2 * self.m3_pitch
else:
y_offset += 1.5 * self.m3_pitch
y_offset += 2 * self.m3_pitch
self.add_layout_pin_segment_center(text=wl_name,
layer="m3",
+8 -5
View File
@@ -40,7 +40,7 @@ class port_address(design.design):
self.add_modules()
self.create_row_decoder()
self.create_wordline_driver()
self.create_rbl_driver()
self.create_rbl_driver()
def create_layout(self):
if "li" in layer:
@@ -79,7 +79,8 @@ class port_address(design.design):
self.copy_power_pins(inst, "vdd")
self.copy_power_pins(inst, "gnd")
self.copy_power_pins(self.rbl_driver_inst, "vdd")
rbl_vdd_pin = self.rbl_driver_inst.get_pin("vdd")
self.add_power_pin("vdd", rbl_vdd_pin.lc())
def route_pins(self):
for row in range(self.addr_size):
@@ -111,17 +112,19 @@ class port_address(design.design):
# Route the RBL from the enable input
en_pin = self.wordline_driver_array_inst.get_pin("en")
en_pos = en_pin.center()
rbl_in_pin = self.rbl_driver_inst.get_pin("A")
rbl_in_pos = rbl_in_pin.center()
mid_pos = vector(en_pin.cx(), rbl_in_pin.cy())
self.add_path(rbl_in_pin.layer, [rbl_in_pos, mid_pos])
self.add_via_stack_center(from_layer=rbl_in_pin.layer,
to_layer=en_pin.layer,
offset=mid_pos)
offset=rbl_in_pos)
self.add_path(en_pin.layer, [rbl_in_pos, mid_pos, en_pos])
self.add_layout_pin_segment_center(text="wl_en",
layer=en_pin.layer,
start=mid_pos,
end=en_pin.center())
end=en_pos)
def add_modules(self):