Merge branch 'master' into router

This commit is contained in:
Matt Guthaus 2016-11-17 16:11:21 -08:00
commit 5cef8606b4
8 changed files with 23 additions and 23 deletions

View File

@ -913,7 +913,7 @@ class bank(design.design):
mid2 = col_decoder_out_position + vector(connection_width, mid2 = col_decoder_out_position + vector(connection_width,
-self.central_line_y_offset) -self.central_line_y_offset)
self.add_wire(layers=("metal2", "via1", "metal1"), self.add_wire(layers=("metal1", "via1", "metal2"),
coordinates=[col_decoder_out_position,mid1,mid2], coordinates=[col_decoder_out_position,mid1,mid2],
offset=col_decoder_out_position) offset=col_decoder_out_position)
@ -1150,7 +1150,7 @@ class bank(design.design):
start = self.bank_select_inv_position + self.inv4x.A_position start = self.bank_select_inv_position + self.inv4x.A_position
end = vector(self.left_vdd_x_offset, start.y + 3 * drc["minwidth_metal3"]) end = vector(self.left_vdd_x_offset, start.y + 3 * drc["minwidth_metal3"])
mid = vector(start.x, end.y) mid = vector(start.x, end.y)
self.add_wire(("metal1", "via1", "metal2"), [start, mid, end]) self.add_wire(("metal2", "via1", "metal1"), [start, mid, end])
# save position # save position
self.bank_select_position = end - vector(0, 0.5 * drc["minwidth_metal2"]) self.bank_select_position = end - vector(0, 0.5 * drc["minwidth_metal2"])
@ -1235,7 +1235,7 @@ class bank(design.design):
correct_y = (2 * self.NOR2.A_position.y + drc["minwidth_metal1"] correct_y = (2 * self.NOR2.A_position.y + drc["minwidth_metal1"]
- self.m1m2_via.width) - self.m1m2_via.width)
end = start + vector(0, correct_y) end = start + vector(0, correct_y)
self.add_wire(("metal2", "via2", "metal3"), [start, mid, end]) self.add_wire(("metal3", "via2", "metal2"), [start, mid, end])
# Save position # Save position
setattr(self,"{0}_position".format(self.control_signals[i]), setattr(self,"{0}_position".format(self.control_signals[i]),

View File

@ -457,7 +457,7 @@ class control_logic(design.design):
rotate=90) rotate=90)
# OE_bar [Bus # 1] to nor2 B input # OE_bar [Bus # 1] to nor2 B input
layer_stack = ("metal2", "via1", "metal1") layer_stack = ("metal1", "via1", "metal2")
start = self.nor2_1_B_position start = self.nor2_1_B_position
mid1 = vector(self.nor2_1_B_position.x+ 2 * drc["minwidth_metal2"], mid1 = vector(self.nor2_1_B_position.x+ 2 * drc["minwidth_metal2"],
start.y) start.y)
@ -497,7 +497,7 @@ class control_logic(design.design):
rotate=90) rotate=90)
# Replica bitline (rblk to replica bitline input) # Replica bitline (rblk to replica bitline input)
layer_stack = ("metal2", "via1", "metal1") layer_stack = ("metal1", "via1", "metal2")
start = vector(self.rail_2_x_offsets[1] + 0.5 * drc["minwidth_metal2"], start = vector(self.rail_2_x_offsets[1] + 0.5 * drc["minwidth_metal2"],
self.output_port_gap) self.output_port_gap)
mid1 = vector(start.x, 0.5 * drc["minwidth_metal1"]) mid1 = vector(start.x, 0.5 * drc["minwidth_metal1"])
@ -605,7 +605,7 @@ class control_logic(design.design):
self.clk_position = vector(0, clk_y) self.clk_position = vector(0, clk_y)
# clk port to inv1 A # clk port to inv1 A
layer_stack = ("metal2", "via1", "metal1") layer_stack = ("metal1", "via1", "metal2")
start = self.inv1_A_position + vector(0, 0.5 * drc["minwidth_metal1"]) start = self.inv1_A_position + vector(0, 0.5 * drc["minwidth_metal1"])
mid1 = vector(self.inv1_A_position.x- 2 * drc["minwidth_metal2"], mid1 = vector(self.inv1_A_position.x- 2 * drc["minwidth_metal2"],
start.y) start.y)

View File

@ -175,7 +175,7 @@ class layout:
def add_wire(self, layers, coordinates, offset=None): def add_wire(self, layers, coordinates, offset=None):
"""Connects a routing path on given layer,coordinates,width. """Connects a routing path on given layer,coordinates,width.
The layers are the (vertical, via, horizontal). """ The layers are the (horizontal, via, vertical). """
import wire import wire
debug.info(3,"add wire " + str(layers) + " " + str(coordinates)) debug.info(3,"add wire " + str(layers) + " " + str(coordinates))
# Wires/paths are created so that the first point is (0,0) # Wires/paths are created so that the first point is (0,0)

View File

@ -169,7 +169,7 @@ class logic_effort_dc(design.design):
if start_inv < half_length and end_inv >= half_length: if start_inv < half_length and end_inv >= half_length:
mid = [half_length * self.inv.width \ mid = [half_length * self.inv.width \
- 0.5 * drc["minwidth_metal2"], M2_start[1]] - 0.5 * drc["minwidth_metal2"], M2_start[1]]
self.add_wire(("metal3", "via2", "metal2"), self.add_wire(("metal2", "via2", "metal3"),
[M2_start, mid, M2_end]) [M2_start, mid, M2_end])
else: else:
self.add_path(("metal2"), [M2_start, M2_end]) self.add_path(("metal2"), [M2_start, M2_end])

View File

@ -413,7 +413,7 @@ class nor_2(design.design):
self.add_via(layers=("metal1", "via1", "metal2"), self.add_via(layers=("metal1", "via1", "metal2"),
offset=offset) offset=offset)
mid = [pmos_contact.x, self.Z_position.y] mid = [pmos_contact.x, self.Z_position.y]
self.add_wire(("metal2", "via1", "metal1"), self.add_wire(("metal1", "via1", "metal2"),
[self.Z_position, mid, pmos_contact]) [self.Z_position, mid, pmos_contact])
def extend_wells(self): def extend_wells(self):

View File

@ -221,7 +221,7 @@ class replica_bitline(design.design):
self.replica_bitline_offset.y - self.replica_bitcell.height self.replica_bitline_offset.y - self.replica_bitcell.height
- 0.5 * (self.m1m2_via.height + drc["metal1_to_metal1"]) - 0.5 * (self.m1m2_via.height + drc["metal1_to_metal1"])
- 2 * drc["metal1_to_metal1"]) - 2 * drc["metal1_to_metal1"])
self.add_wire(layers=("metal1", "via1", "metal2"), self.add_wire(layers=("metal2", "via1", "metal1"),
coordinates=[BL_inv_in, mid1, mid2, mid3]) coordinates=[BL_inv_in, mid1, mid2, mid3])
# need to fix the mid point as this is done with two wire # need to fix the mid point as this is done with two wire
@ -233,7 +233,7 @@ class replica_bitline(design.design):
height=drc["minwidth_metal1"]) height=drc["minwidth_metal1"])
mid4 = [BL_offset.x, mid3.y] mid4 = [BL_offset.x, mid3.y]
self.add_wire(layers=("metal2", "via1", "metal1"), self.add_wire(layers=("metal1", "via1", "metal2"),
coordinates=[BL_offset, mid4, mid3]) coordinates=[BL_offset, mid4, mid3])
def route_access_tx(self, delay_chain_output, BL_inv_in, vdd_offset): def route_access_tx(self, delay_chain_output, BL_inv_in, vdd_offset):
@ -265,7 +265,7 @@ class replica_bitline(design.design):
mid1 = vector(offset.x, self.delay_chain_offset.y - 3 * m2rail_space) mid1 = vector(offset.x, self.delay_chain_offset.y - 3 * m2rail_space)
mid2 = [delay_chain_output.x, mid1.y] mid2 = [delay_chain_output.x, mid1.y]
# Note the inverted wire stack # Note the inverted wire stack
self.add_wire(layers=("metal2", "via1", "metal1"), self.add_wire(layers=("metal1", "via1", "metal2"),
coordinates=[offset, mid1, mid2, delay_chain_output]) coordinates=[offset, mid1, mid2, delay_chain_output])
self.add_via(layers=("metal1", "via1", "metal2"), self.add_via(layers=("metal1", "via1", "metal2"),
offset=delay_chain_output, offset=delay_chain_output,
@ -310,7 +310,7 @@ class replica_bitline(design.design):
self.add_path("metal1", [drain_offset, close_Vdd_offset]) self.add_path("metal1", [drain_offset, close_Vdd_offset])
mid = [vdd_offset.x, close_Vdd_offset.y] mid = [vdd_offset.x, close_Vdd_offset.y]
self.add_wire(layers=("metal2", "via1", "metal1"), self.add_wire(layers=("metal1", "via1", "metal2"),
coordinates=[close_Vdd_offset, mid, vdd_offset]) coordinates=[close_Vdd_offset, mid, vdd_offset])
def route_tx_source(self, BL_inv_in): def route_tx_source(self, BL_inv_in):
@ -337,7 +337,7 @@ class replica_bitline(design.design):
end = [mid2.x, vdd_offset.y] end = [mid2.x, vdd_offset.y]
self.add_path(layer=("metal1"), self.add_path(layer=("metal1"),
coordinates=[start, mid1, mid2]) coordinates=[start, mid1, mid2])
self.add_wire(layers=("metal2", "via1", "metal1"), self.add_wire(layers=("metal1", "via1", "metal2"),
coordinates=[mid1, mid2, end]) coordinates=[mid1, mid2, end])
def route_gnd(self): def route_gnd(self):
@ -354,7 +354,7 @@ class replica_bitline(design.design):
share_gnd = vector(self.gnd_position.x, mid2.y) share_gnd = vector(self.gnd_position.x, mid2.y)
# Note the inverted stacks # Note the inverted stacks
lst = [BL_gnd_offset, mid1, mid2, share_gnd, self.gnd_position] lst = [BL_gnd_offset, mid1, mid2, share_gnd, self.gnd_position]
self.add_wire(layers=("metal2", "via1", "metal1"), self.add_wire(layers=("metal1", "via1", "metal2"),
coordinates=lst) coordinates=lst)
self.add_label(text="gnd", self.add_label(text="gnd",
layer="metal1", layer="metal1",
@ -384,13 +384,13 @@ class replica_bitline(design.design):
+ self.bitline_load.WL_positions[i].scale(0,1)) + self.bitline_load.WL_positions[i].scale(0,1))
mid = [self.delay_chain_offset.x + 6 * drc["minwidth_metal2"], mid = [self.delay_chain_offset.x + 6 * drc["minwidth_metal2"],
gnd_offset.y] gnd_offset.y]
self.add_wire(layers=("metal2", "via1", "metal1"), self.add_wire(layers=("metal1", "via1", "metal2"),
coordinates=[gnd_offset, mid, WL_offset]) coordinates=[gnd_offset, mid, WL_offset])
if i % 2 == 0: if i % 2 == 0:
load_vdd_offset = (self.replica_bitline_offset load_vdd_offset = (self.replica_bitline_offset
+ self.bitline_load.vdd_positions[i]) + self.bitline_load.vdd_positions[i])
mid = [vdd_offset.x, load_vdd_offset.y] mid = [vdd_offset.x, load_vdd_offset.y]
self.add_wire(layers=("metal2", "via1", "metal1"), self.add_wire(layers=("metal1", "via1", "metal2"),
coordinates=[vdd_offset, mid, load_vdd_offset]) coordinates=[vdd_offset, mid, load_vdd_offset])
def route_RC(self,vdd_offset): def route_RC(self,vdd_offset):
@ -399,17 +399,17 @@ class replica_bitline(design.design):
RC_vdd = self.replica_bitline_offset + vector(1,-1).scale(self.bitcell_chars["vdd"]) RC_vdd = self.replica_bitline_offset + vector(1,-1).scale(self.bitcell_chars["vdd"])
mid = [vdd_offset.x, RC_vdd.y] mid = [vdd_offset.x, RC_vdd.y]
# Note the inverted stacks # Note the inverted stacks
self.add_wire(layers=("metal2", "via1", "metal1"), self.add_wire(layers=("metal1", "via1", "metal2"),
coordinates=[vdd_offset, mid, RC_vdd]) coordinates=[vdd_offset, mid, RC_vdd])
gnd_offset = self.BL_inv_offset - vector(self.inv.width, 0) gnd_offset = self.BL_inv_offset - vector(self.inv.width, 0)
load_gnd = self.replica_bitline_offset + vector(self.bitcell_chars["gnd"][0], load_gnd = self.replica_bitline_offset + vector(self.bitcell_chars["gnd"][0],
self.bitline_load.height) self.bitline_load.height)
mid = [load_gnd.x, gnd_offset.y] mid = [load_gnd.x, gnd_offset.y]
self.add_wire(layers=("metal2", "via1", "metal1"), self.add_wire(layers=("metal1", "via1", "metal2"),
coordinates=[gnd_offset, mid, load_gnd]) coordinates=[gnd_offset, mid, load_gnd])
load_gnd = self.replica_bitline_offset + vector(0, load_gnd = self.replica_bitline_offset + vector(0,
self.bitline_load.height) self.bitline_load.height)
mid = [load_gnd.x, gnd_offset.y] mid = [load_gnd.x, gnd_offset.y]
self.add_wire(("metal2", "via1", "metal1"), [gnd_offset, mid, load_gnd]) self.add_wire(("metal1", "via1", "metal2"), [gnd_offset, mid, load_gnd])

View File

@ -803,7 +803,7 @@ class sram(design.design):
start.y) start.y)
end = vector(mid1.x, self.msf_msb_address_position.y end = vector(mid1.x, self.msf_msb_address_position.y
+ 4 * (i + 1) * drc["minwidth_metal2"]) + 4 * (i + 1) * drc["minwidth_metal2"])
self.add_wire(("metal1", "via1", "metal2"), [start, mid1, end]) self.add_wire(("metal2", "via1", "metal1"), [start, mid1, end])
x_off = self.vertical_line_positions[bank_select_line].x x_off = self.vertical_line_positions[bank_select_line].x
contact_pos = vector(x_off, contact_pos = vector(x_off,
@ -831,7 +831,7 @@ class sram(design.design):
+ 3*drc["minwidth_metal3"], + 3*drc["minwidth_metal3"],
mid2.y) mid2.y)
layer_stack = ("metal1", "via1", "metal2") layer_stack = ("metal2", "via1", "metal1")
self.add_wire(layer_stack, [start, mid1, mid2, end]) self.add_wire(layer_stack, [start, mid1, mid2, end])
self.add_rect(layer="metal1", self.add_rect(layer="metal1",

View File

@ -37,7 +37,7 @@ class wire(path):
# wires and paths should not be offset to (0,0) # wires and paths should not be offset to (0,0)
def setup_layers(self): def setup_layers(self):
(vert_layer, via_layer, horiz_layer) = self.layer_stack (horiz_layer, via_layer, vert_layer) = self.layer_stack
if (via_layer != None): if (via_layer != None):
self.via_layer_name = via_layer self.via_layer_name = via_layer
else: else: