mirror of https://github.com/VLSIDA/OpenRAM.git
Fix supply rail step size to place alternating rails
This commit is contained in:
parent
e2cfd382b9
commit
5cb3a24b19
|
|
@ -72,8 +72,9 @@ class supply_router(router):
|
||||||
#self.write_debug_gds("pre_pin_debug.gds",stop_program=True)
|
#self.write_debug_gds("pre_pin_debug.gds",stop_program=True)
|
||||||
|
|
||||||
# Route the supply pins to the supply rails
|
# Route the supply pins to the supply rails
|
||||||
self.route_pins_to_rails(gnd_name)
|
# Route vdd first since we want it to be shorter
|
||||||
self.route_pins_to_rails(vdd_name)
|
self.route_pins_to_rails(vdd_name)
|
||||||
|
self.route_pins_to_rails(gnd_name)
|
||||||
|
|
||||||
#self.write_debug_gds("post_pin_debug.gds",stop_program=False)
|
#self.write_debug_gds("post_pin_debug.gds",stop_program=False)
|
||||||
|
|
||||||
|
|
@ -155,21 +156,22 @@ class supply_router(router):
|
||||||
# space
|
# space
|
||||||
track_pitch = self.rail_track_width*width + space
|
track_pitch = self.rail_track_width*width + space
|
||||||
|
|
||||||
self.supply_rail_step = math.ceil(track_pitch/self.track_width)
|
self.supply_rail_width = math.ceil(track_pitch/self.track_width)
|
||||||
debug.info(1,"Rail step: {}".format(self.supply_rail_step))
|
debug.info(1,"Rail step: {}".format(self.supply_rail_width))
|
||||||
|
|
||||||
|
|
||||||
def compute_supply_rails(self, name, start_offset):
|
def compute_supply_rails(self, name, supply_number):
|
||||||
"""
|
"""
|
||||||
Compute the unblocked locations for the horizontal and vertical supply rails.
|
Compute the unblocked locations for the horizontal and vertical supply rails.
|
||||||
Go in a raster order from bottom to the top (for horizontal) and left to right
|
Go in a raster order from bottom to the top (for horizontal) and left to right
|
||||||
(for vertical). Start with an initial start_offset in x and y direction.
|
(for vertical). Start with an initial start_offset in x and y direction.
|
||||||
"""
|
"""
|
||||||
|
start_offset = supply_number*self.supply_rail_width
|
||||||
|
|
||||||
# Horizontal supply rails
|
# Horizontal supply rails
|
||||||
for offset in range(start_offset, self.max_yoffset, self.supply_rail_step):
|
for offset in range(start_offset, self.max_yoffset, 2*self.supply_rail_width):
|
||||||
# Seed the function at the location with the given width
|
# Seed the function at the location with the given width
|
||||||
wave = [vector3d(0,offset+i,0) for i in range(self.supply_rail_step)]
|
wave = [vector3d(0,offset+i,0) for i in range(self.supply_rail_width)]
|
||||||
# While we can keep expanding east in this horizontal track
|
# While we can keep expanding east in this horizontal track
|
||||||
while wave and wave[0].x < self.max_xoffset:
|
while wave and wave[0].x < self.max_xoffset:
|
||||||
wave = self.find_supply_rail(name, wave, direction.EAST)
|
wave = self.find_supply_rail(name, wave, direction.EAST)
|
||||||
|
|
@ -177,9 +179,9 @@ class supply_router(router):
|
||||||
|
|
||||||
# Vertical supply rails
|
# Vertical supply rails
|
||||||
max_offset = self.rg.ur.x
|
max_offset = self.rg.ur.x
|
||||||
for offset in range(start_offset, self.max_xoffset, self.supply_rail_step):
|
for offset in range(start_offset, self.max_xoffset, 2*self.supply_rail_width):
|
||||||
# Seed the function at the location with the given width
|
# Seed the function at the location with the given width
|
||||||
wave = [vector3d(offset+i,0,1) for i in range(self.supply_rail_step)]
|
wave = [vector3d(offset+i,0,1) for i in range(self.supply_rail_width)]
|
||||||
# While we can keep expanding north in this vertical track
|
# While we can keep expanding north in this vertical track
|
||||||
while wave and wave[0].y < self.max_yoffset:
|
while wave and wave[0].y < self.max_yoffset:
|
||||||
wave = self.find_supply_rail(name, wave, direction.NORTH)
|
wave = self.find_supply_rail(name, wave, direction.NORTH)
|
||||||
|
|
@ -234,8 +236,7 @@ class supply_router(router):
|
||||||
self.compute_supply_rail_dimensions()
|
self.compute_supply_rail_dimensions()
|
||||||
|
|
||||||
# Compute the grid locations of the supply rails
|
# Compute the grid locations of the supply rails
|
||||||
start_offset = supply_number*self.rail_track_width
|
self.compute_supply_rails(name, supply_number)
|
||||||
self.compute_supply_rails(name, start_offset)
|
|
||||||
|
|
||||||
# Add the supply rail vias (and prune disconnected rails)
|
# Add the supply rail vias (and prune disconnected rails)
|
||||||
self.connect_supply_rails(name)
|
self.connect_supply_rails(name)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue