From e9780ea599567c7c94aa595d51eb5818511044ca Mon Sep 17 00:00:00 2001 From: mrg Date: Thu, 11 Jun 2020 15:03:36 -0700 Subject: [PATCH] Add non-preferred directions for channel routes --- compiler/base/hierarchy_layout.py | 17 ++++++++++++++--- compiler/modules/bank.py | 11 +++++++++-- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/compiler/base/hierarchy_layout.py b/compiler/base/hierarchy_layout.py index 244d7842..4b6c044d 100644 --- a/compiler/base/hierarchy_layout.py +++ b/compiler/base/hierarchy_layout.py @@ -1043,7 +1043,8 @@ class layout(): mid = vector(pin.center().x, trunk_offset.y) self.add_path(self.vertical_layer, [pin.center(), mid]) self.add_via_center(layers=layer_stack, - offset=mid) + offset=mid, + directions=self.directions) def add_vertical_trunk_route(self, pins, @@ -1083,7 +1084,8 @@ class layout(): mid = vector(trunk_offset.x, pin.center().y) self.add_path(self.horizontal_layer, [pin.center(), mid]) self.add_via_center(layers=layer_stack, - offset=mid) + offset=mid, + directions=self.directions) def create_channel_route(self, netlist, offset, @@ -1146,7 +1148,8 @@ class layout(): overlaps = (not vertical and x_overlap) or (vertical and y_overlap) return overlaps - if not directions: + self.directions = directions + if not directions or directions == "pref": # Use the preferred layer directions if self.get_preferred_direction(layer_stack[0]) == "V": self.vertical_layer = layer_stack[0] @@ -1154,6 +1157,14 @@ class layout(): else: self.vertical_layer = layer_stack[2] self.horizontal_layer = layer_stack[0] + elif directions == "nonpref": + # Use the preferred layer directions + if self.get_preferred_direction(layer_stack[0]) == "V": + self.vertical_layer = layer_stack[2] + self.horizontal_layer = layer_stack[0] + else: + self.vertical_layer = layer_stack[0] + self.horizontal_layer = layer_stack[2] else: # Use the layer directions specified to the router rather than # the preferred directions diff --git a/compiler/modules/bank.py b/compiler/modules/bank.py index af14c0ca..12fcb6dd 100644 --- a/compiler/modules/bank.py +++ b/compiler/modules/bank.py @@ -9,7 +9,7 @@ import debug import design from sram_factory import factory from math import log, ceil -from tech import drc +from tech import drc, layer from vector import vector from globals import OPTS @@ -879,9 +879,16 @@ class bank(design.design): column_mux_pins = [self.port_data_inst[port].get_pin(x) for x in sel_names] route_map = list(zip(decode_pins, column_mux_pins)) + if "li" in layer: + stack = self.li_stack + directions = "nonpref" + else: + stack = self.m1_stack + directions = "pref" self.create_vertical_channel_route(route_map, offset, - self.m1_stack) + stack, + directions=directions) def add_lvs_correspondence_points(self): """