mirror of https://github.com/VLSIDA/OpenRAM.git
Fix missing hash recompute in vector class.
This commit is contained in:
parent
bed12d2a9e
commit
9b592ab432
|
|
@ -51,6 +51,7 @@ class vector():
|
||||||
else:
|
else:
|
||||||
self.x=float(value[0])
|
self.x=float(value[0])
|
||||||
self.y=float(value[1])
|
self.y=float(value[1])
|
||||||
|
self._hash = hash((self.x,self.y))
|
||||||
|
|
||||||
def __getitem__(self, index):
|
def __getitem__(self, index):
|
||||||
"""
|
"""
|
||||||
|
|
@ -104,6 +105,7 @@ class vector():
|
||||||
def snap_to_grid(self):
|
def snap_to_grid(self):
|
||||||
self.x = self.snap_offset_to_grid(self.x)
|
self.x = self.snap_offset_to_grid(self.x)
|
||||||
self.y = self.snap_offset_to_grid(self.y)
|
self.y = self.snap_offset_to_grid(self.y)
|
||||||
|
self._hash = hash((self.x,self.y))
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def snap_offset_to_grid(self, offset):
|
def snap_offset_to_grid(self, offset):
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,111 @@
|
||||||
|
# See LICENSE for licensing information.
|
||||||
|
#
|
||||||
|
# Copyright (c) 2016-2022 Regents of the University of California
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
from tech import drc
|
||||||
|
import debug
|
||||||
|
import design
|
||||||
|
import math
|
||||||
|
from sram_factory import factory
|
||||||
|
from vector import vector
|
||||||
|
from globals import OPTS
|
||||||
|
from tech import cell_properties
|
||||||
|
from tech import layer_properties as layer_props
|
||||||
|
|
||||||
|
|
||||||
|
class column_decoder(design.design):
|
||||||
|
"""
|
||||||
|
Create the column mux decoder.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, name, col_addr_size):
|
||||||
|
super().__init__(name)
|
||||||
|
|
||||||
|
self.col_addr_size = col_addr_size
|
||||||
|
self.num_inputs = col_addr_size
|
||||||
|
self.num_outputs = pow(col_addr_size, 2)
|
||||||
|
debug.info(2,
|
||||||
|
"create column decoder of {0} inputs and {1} outputs".format(self.num_inputs,
|
||||||
|
self.num_outputs))
|
||||||
|
|
||||||
|
self.create_netlist()
|
||||||
|
if not OPTS.netlist_only:
|
||||||
|
self.create_layout()
|
||||||
|
self.DRC_LVS()
|
||||||
|
|
||||||
|
def create_netlist(self):
|
||||||
|
self.add_pins()
|
||||||
|
self.add_modules()
|
||||||
|
self.create_instances()
|
||||||
|
|
||||||
|
def create_instances(self):
|
||||||
|
self.column_decoder_inst = self.add_inst(name="column_decoder",
|
||||||
|
mod=self.column_decoder)
|
||||||
|
self.connect_inst(self.pins)
|
||||||
|
|
||||||
|
def create_layout(self):
|
||||||
|
self.column_decoder_inst.place(vector(0,0))
|
||||||
|
|
||||||
|
self.width = self.column_decoder_inst.width
|
||||||
|
self.height = self.column_decoder_inst.height
|
||||||
|
|
||||||
|
self.route_layout()
|
||||||
|
|
||||||
|
|
||||||
|
def add_pins(self):
|
||||||
|
""" Add the module pins """
|
||||||
|
|
||||||
|
for i in range(self.num_inputs):
|
||||||
|
self.add_pin("in_{0}".format(i), "INPUT")
|
||||||
|
|
||||||
|
for j in range(self.num_outputs):
|
||||||
|
self.add_pin("out_{0}".format(j), "OUTPUT")
|
||||||
|
|
||||||
|
self.add_pin("vdd", "POWER")
|
||||||
|
self.add_pin("gnd", "GROUND")
|
||||||
|
|
||||||
|
def route_layout_pins(self):
|
||||||
|
""" Add the pins. """
|
||||||
|
|
||||||
|
for i in range(self.num_inputs):
|
||||||
|
self.copy_layout_pin(self.column_decoder_inst, "in_{0}".format(i))
|
||||||
|
|
||||||
|
for i in range(self.num_outputs):
|
||||||
|
self.copy_layout_pin(self.column_decoder_inst, "out_{0}".format(i))
|
||||||
|
|
||||||
|
def route_layout(self):
|
||||||
|
""" Create routing among the modules """
|
||||||
|
self.route_layout_pins()
|
||||||
|
self.route_supplies()
|
||||||
|
|
||||||
|
def route_supplies(self):
|
||||||
|
""" Propagate all vdd/gnd pins up to this level for all modules """
|
||||||
|
|
||||||
|
self.route_vertical_pins("vdd", self.insts, xside="rx",)
|
||||||
|
self.route_vertical_pins("gnd", self.insts, xside="lx",)
|
||||||
|
|
||||||
|
def add_modules(self):
|
||||||
|
|
||||||
|
self.dff =factory.create(module_type="dff")
|
||||||
|
|
||||||
|
if self.col_addr_size == 1:
|
||||||
|
self.column_decoder = factory.create(module_type="pinvbuf",
|
||||||
|
height=self.dff.height)
|
||||||
|
elif self.col_addr_size == 2:
|
||||||
|
self.column_decoder = factory.create(module_type="hierarchical_predecode2x4",
|
||||||
|
column_decoder=True,
|
||||||
|
height=self.dff.height)
|
||||||
|
|
||||||
|
elif self.col_addr_size == 3:
|
||||||
|
self.column_decoder = factory.create(module_type="hierarchical_predecode3x8",
|
||||||
|
column_decoder=True,
|
||||||
|
height=self.dff.height)
|
||||||
|
elif self.col_addr_size == 4:
|
||||||
|
self.column_decoder = factory.create(module_type="hierarchical_predecode4x16",
|
||||||
|
column_decoder=True,
|
||||||
|
height=self.dff.height)
|
||||||
|
else:
|
||||||
|
# No error checking before?
|
||||||
|
debug.error("Invalid column decoder?", -1)
|
||||||
|
|
||||||
Loading…
Reference in New Issue