mirror of https://github.com/VLSIDA/OpenRAM.git
Simplify router code to clean it up a bit.
This commit is contained in:
parent
5b828f32cb
commit
66c703d932
|
|
@ -27,7 +27,7 @@ class supply_grid(signal_grid):
|
||||||
p.reset()
|
p.reset()
|
||||||
|
|
||||||
|
|
||||||
def find_start_wave(self, wave, width, direct):
|
def find_start_wave(self, wave, direct):
|
||||||
"""
|
"""
|
||||||
Finds the first loc starting at loc and up that is open.
|
Finds the first loc starting at loc and up that is open.
|
||||||
Returns None if it reaches max size first.
|
Returns None if it reaches max size first.
|
||||||
|
|
|
||||||
|
|
@ -146,12 +146,6 @@ class supply_router(router):
|
||||||
# We need to move this rail to the other layer for the z indices to match
|
# We need to move this rail to the other layer for the z indices to match
|
||||||
# during the intersection. This also makes a copy.
|
# during the intersection. This also makes a copy.
|
||||||
new_r1 = {vector3d(i.x,i.y,1) for i in r1}
|
new_r1 = {vector3d(i.x,i.y,1) for i in r1}
|
||||||
|
|
||||||
# If horizontal, subtract off the left/right track to prevent end of rail via
|
|
||||||
#ll = grid_utils.get_lower_left(new_r1)
|
|
||||||
#ur = grid_utils.get_upper_right(new_r1)
|
|
||||||
grid_utils.remove_border(new_r1, direction.EAST)
|
|
||||||
grid_utils.remove_border(new_r1, direction.WEST)
|
|
||||||
|
|
||||||
for i2,r2 in enumerate(all_rails):
|
for i2,r2 in enumerate(all_rails):
|
||||||
# Never compare to yourself
|
# Never compare to yourself
|
||||||
|
|
@ -163,16 +157,11 @@ class supply_router(router):
|
||||||
if e.z==0:
|
if e.z==0:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Need to maek a copy to consider via overlaps to ignore the end-caps
|
# Determine if we have sufficient overlap and, if so,
|
||||||
new_r2 = r2.copy()
|
|
||||||
grid_utils.remove_border(new_r2, direction.NORTH)
|
|
||||||
grid_utils.remove_border(new_r2, direction.SOUTH)
|
|
||||||
|
|
||||||
# Determine if we hhave sufficient overlap and, if so,
|
|
||||||
# remember:
|
# remember:
|
||||||
# the indices to determine a rail is connected to another
|
# the indices to determine a rail is connected to another
|
||||||
# the overlap area for placement of a via
|
# the overlap area for placement of a via
|
||||||
overlap = new_r1 & new_r2
|
overlap = new_r1 & r2
|
||||||
if len(overlap) >= 1:
|
if len(overlap) >= 1:
|
||||||
debug.info(3,"Via overlap {0} {1}".format(len(overlap),overlap))
|
debug.info(3,"Via overlap {0} {1}".format(len(overlap),overlap))
|
||||||
connections.update([i1,i2])
|
connections.update([i1,i2])
|
||||||
|
|
@ -270,7 +259,8 @@ class supply_router(router):
|
||||||
Find a start location, probe in the direction, and see if the rail is big enough
|
Find a start location, probe in the direction, and see if the rail is big enough
|
||||||
to contain a via, and, if so, add it.
|
to contain a via, and, if so, add it.
|
||||||
"""
|
"""
|
||||||
start_wave = self.find_supply_rail_start(name, seed_wave, direct)
|
# Sweep to find an initial unblocked valid wave
|
||||||
|
start_wave = self.rg.find_start_wave(seed_wave, direct)
|
||||||
|
|
||||||
# This means there were no more unblocked grids in the row/col
|
# This means there were no more unblocked grids in the row/col
|
||||||
if not start_wave:
|
if not start_wave:
|
||||||
|
|
@ -284,17 +274,6 @@ class supply_router(router):
|
||||||
# as it will be used to find the next start location
|
# as it will be used to find the next start location
|
||||||
return wave_path
|
return wave_path
|
||||||
|
|
||||||
def find_supply_rail_start(self, name, seed_wave, direct):
|
|
||||||
"""
|
|
||||||
This finds the first valid starting location and routes a supply rail
|
|
||||||
in the given direction.
|
|
||||||
It returns the space after the end of the rail to seed another call for multiple
|
|
||||||
supply rails in the same "track" when there is a blockage.
|
|
||||||
"""
|
|
||||||
# Sweep to find an initial unblocked valid wave
|
|
||||||
start_wave = self.rg.find_start_wave(seed_wave, len(seed_wave), direct)
|
|
||||||
|
|
||||||
return start_wave
|
|
||||||
|
|
||||||
def probe_supply_rail(self, name, start_wave, direct):
|
def probe_supply_rail(self, name, start_wave, direct):
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue