mirror of https://github.com/VLSIDA/OpenRAM.git
first commit
This commit is contained in:
parent
3ee769a771
commit
f69f8de000
|
|
@ -105,6 +105,7 @@ class sram_1bank(design, verilog, lef):
|
||||||
for bit in range(self.row_addr_size):
|
for bit in range(self.row_addr_size):
|
||||||
#input
|
#input
|
||||||
self.add_pin("addr{}[{}]".format(port, bit + self.col_addr_size), "INPUT")
|
self.add_pin("addr{}[{}]".format(port, bit + self.col_addr_size), "INPUT")
|
||||||
|
print("addr{}[{}]".format(port, bit), "INPUT")
|
||||||
#output
|
#output
|
||||||
self.add_pin("a{}_{}".format(port, bit + self.col_addr_size), "OUTPUT")
|
self.add_pin("a{}_{}".format(port, bit + self.col_addr_size), "OUTPUT")
|
||||||
#clk_buf, regard as input
|
#clk_buf, regard as input
|
||||||
|
|
@ -492,7 +493,7 @@ class sram_1bank(design, verilog, lef):
|
||||||
# Must create the control logic before pins to get the pins
|
# Must create the control logic before pins to get the pins
|
||||||
self.add_modules()
|
self.add_modules()
|
||||||
self.add_pin_data_dff()
|
self.add_pin_data_dff()
|
||||||
self.bank_inst = self.create_col_addr_dff() # be aware, multi-insts possible
|
self.data_dff_insts = self.create_data_dff() # be aware, multi-insts possible
|
||||||
|
|
||||||
# This is for the lib file if we don't create layout
|
# This is for the lib file if we don't create layout
|
||||||
self.width=0
|
self.width=0
|
||||||
|
|
@ -510,7 +511,7 @@ class sram_1bank(design, verilog, lef):
|
||||||
self.add_modules()
|
self.add_modules()
|
||||||
if self.write_size != self.word_size:
|
if self.write_size != self.word_size:
|
||||||
self.add_pin_wmask_dff()
|
self.add_pin_wmask_dff()
|
||||||
self.bank_inst = self.create_wmask_dff() # be aware, multi-insts possible, or none
|
self.wmask_dff_insts = self.create_wmask_dff() # be aware, multi-insts possible, or none
|
||||||
|
|
||||||
# This is for the lib file if we don't create layout
|
# This is for the lib file if we don't create layout
|
||||||
self.width=0
|
self.width=0
|
||||||
|
|
@ -612,8 +613,7 @@ class sram_1bank(design, verilog, lef):
|
||||||
# Placement
|
# Placement
|
||||||
# We will generate different layout for different port(if there are multi-port)
|
# We will generate different layout for different port(if there are multi-port)
|
||||||
port = instance_index
|
port = instance_index
|
||||||
self.control_pos[port] = vector(0,0)
|
self.control_logic_insts[port].place(vector(0,0))
|
||||||
self.control_logic_insts[port].place(self.control_pos[port])
|
|
||||||
|
|
||||||
if not OPTS.is_unit_test:
|
if not OPTS.is_unit_test:
|
||||||
print_time("Control Placement", datetime.datetime.now(), start_time)
|
print_time("Control Placement", datetime.datetime.now(), start_time)
|
||||||
|
|
@ -648,8 +648,7 @@ class sram_1bank(design, verilog, lef):
|
||||||
# Placement
|
# Placement
|
||||||
# We will generate different layout for different port(if there are multi-port)
|
# We will generate different layout for different port(if there are multi-port)
|
||||||
port = instance_index
|
port = instance_index
|
||||||
self.row_addr_pos[port] = vector(0,0)
|
self.row_addr_dff_insts[port].place(vector(0,0))
|
||||||
self.row_addr_dff_insts[port].place(self.row_addr_pos[port])
|
|
||||||
|
|
||||||
if not OPTS.is_unit_test:
|
if not OPTS.is_unit_test:
|
||||||
print_time("row_addr_dff Placement", datetime.datetime.now(), start_time)
|
print_time("row_addr_dff Placement", datetime.datetime.now(), start_time)
|
||||||
|
|
@ -684,8 +683,7 @@ class sram_1bank(design, verilog, lef):
|
||||||
# Placement
|
# Placement
|
||||||
# We will generate different layout for different port(if there are multi-port)
|
# We will generate different layout for different port(if there are multi-port)
|
||||||
port = instance_index
|
port = instance_index
|
||||||
self.col_addr_pos[port] = vector(0,0)
|
self.col_addr_dff_insts[port].place(vector(0,0))
|
||||||
self.col_addr_dff_insts[port].place(self.col_addr_pos[port])
|
|
||||||
|
|
||||||
if not OPTS.is_unit_test:
|
if not OPTS.is_unit_test:
|
||||||
print_time("col_addr_dff Placement", datetime.datetime.now(), start_time)
|
print_time("col_addr_dff Placement", datetime.datetime.now(), start_time)
|
||||||
|
|
@ -720,8 +718,7 @@ class sram_1bank(design, verilog, lef):
|
||||||
# Placement
|
# Placement
|
||||||
# We will generate different layout for different port(if there are multi-port)
|
# We will generate different layout for different port(if there are multi-port)
|
||||||
port = instance_index
|
port = instance_index
|
||||||
self.data_pos[port] = vector(0,0)
|
self.data_dff_insts[port].place(vector(0,0))
|
||||||
self.data_dff_insts[port].place(self.data_pos[port])
|
|
||||||
|
|
||||||
if not OPTS.is_unit_test:
|
if not OPTS.is_unit_test:
|
||||||
print_time("data_dff Placement", datetime.datetime.now(), start_time)
|
print_time("data_dff Placement", datetime.datetime.now(), start_time)
|
||||||
|
|
@ -756,8 +753,7 @@ class sram_1bank(design, verilog, lef):
|
||||||
# Placement
|
# Placement
|
||||||
# We will generate different layout for different port(if there are multi-port)
|
# We will generate different layout for different port(if there are multi-port)
|
||||||
port = instance_index
|
port = instance_index
|
||||||
self.wmask_pos[port] = vector(0,0)
|
self.wmask_dff_insts[port].place(vector(0,0))
|
||||||
self.wmask_dff_insts[port].place(self.wmask_pos[port])
|
|
||||||
|
|
||||||
if not OPTS.is_unit_test:
|
if not OPTS.is_unit_test:
|
||||||
print_time("wmask_dff Placement", datetime.datetime.now(), start_time)
|
print_time("wmask_dff Placement", datetime.datetime.now(), start_time)
|
||||||
|
|
@ -792,8 +788,7 @@ class sram_1bank(design, verilog, lef):
|
||||||
# Placement
|
# Placement
|
||||||
# We will generate different layout for different port(if there are multi-port)
|
# We will generate different layout for different port(if there are multi-port)
|
||||||
port = instance_index
|
port = instance_index
|
||||||
self.spare_wen_pos[port] = vector(0,0)
|
self.spare_wen_dff_insts[port].place(vector(0,0))
|
||||||
self.spare_wen_dff_insts[port].place(self.spare_wen_pos[port])
|
|
||||||
|
|
||||||
if not OPTS.is_unit_test:
|
if not OPTS.is_unit_test:
|
||||||
print_time("spare_wen_dff Placement", datetime.datetime.now(), start_time)
|
print_time("spare_wen_dff Placement", datetime.datetime.now(), start_time)
|
||||||
|
|
@ -1005,7 +1000,7 @@ class sram_1bank(design, verilog, lef):
|
||||||
if OPTS.route_supplies:
|
if OPTS.route_supplies:
|
||||||
self.route_supplies(init_bbox)
|
self.route_supplies(init_bbox)
|
||||||
|
|
||||||
def add_layout_spare_wen_dff_only_pins(self, instance_index=0):
|
def add_pins_to_route_spare_wen_dff(self, instance_index=0):
|
||||||
#only contains signal pins, no power pins
|
#only contains signal pins, no power pins
|
||||||
""" Adding to route pins for spare wen dff """
|
""" Adding to route pins for spare wen dff """
|
||||||
pins_to_route = []
|
pins_to_route = []
|
||||||
|
|
@ -1021,7 +1016,7 @@ class sram_1bank(design, verilog, lef):
|
||||||
|
|
||||||
return pins_to_route
|
return pins_to_route
|
||||||
|
|
||||||
def add_pins_to_route_spare_wen_dff(self, add_vias=True, instance_index=0):
|
def add_layout_spare_wen_dff_only_pins(self, add_vias=True, instance_index=0):
|
||||||
"""
|
"""
|
||||||
Add the top-level pins for a single bank SRAM with control.
|
Add the top-level pins for a single bank SRAM with control.
|
||||||
"""
|
"""
|
||||||
|
|
@ -1039,17 +1034,17 @@ class sram_1bank(design, verilog, lef):
|
||||||
for bit in range(self.num_spare_cols):
|
for bit in range(self.num_spare_cols):
|
||||||
# input
|
# input
|
||||||
self.add_io_pin(self.spare_wen_dff_insts[port],
|
self.add_io_pin(self.spare_wen_dff_insts[port],
|
||||||
"spare_wen{}[{}]".format(port, bit), # old name
|
"din_{}".format(bit), # old name
|
||||||
"spare_wen{}[{}]".format(port, bit), # new name
|
"spare_wen{}[{}]".format(port, bit), # new name
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
# output
|
# output
|
||||||
self.add_io_pin(self.spare_wen_dff_insts[port],
|
self.add_io_pin(self.spare_wen_dff_insts[port],
|
||||||
"bank_spare_wen{}_{}".format(port, bit),
|
"dout_{}".format(port, bit),
|
||||||
"bank_spare_wen{}_{}".format(port, bit),
|
"bank_spare_wen{}_{}".format(port, bit),
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
#clk_buf, regard as input
|
#clk_buf, regard as input
|
||||||
self.add_io_pin(self.spare_wen_dff_insts[port],
|
self.add_io_pin(self.spare_wen_dff_insts[port],
|
||||||
"clk_buf{}".format(port),
|
"clk",
|
||||||
"clk_buf{}".format(port),
|
"clk_buf{}".format(port),
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
|
|
||||||
|
|
@ -1086,17 +1081,17 @@ class sram_1bank(design, verilog, lef):
|
||||||
for bit in range(self.num_wmasks):
|
for bit in range(self.num_wmasks):
|
||||||
# input
|
# input
|
||||||
self.add_io_pin(self.wmask_dff_insts[port],
|
self.add_io_pin(self.wmask_dff_insts[port],
|
||||||
"wmask{}[{}]".format(port, bit),
|
"din_{}".format(bit),
|
||||||
"wmask{}[{}]".format(port, bit),
|
"wmask{}[{}]".format(port, bit),
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
# output
|
# output
|
||||||
self.add_io_pin(self.wmask_dff_insts[port],
|
self.add_io_pin(self.wmask_dff_insts[port],
|
||||||
"bank_wmask{}_{}".format(port, bit),
|
"dout_{}".format(bit),
|
||||||
"bank_wmask{}_{}".format(port, bit),
|
"bank_wmask{}_{}".format(port, bit),
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
#clk_buf, regard as input
|
#clk_buf, regard as input
|
||||||
self.add_io_pin(self.wmask_dff_insts[port],
|
self.add_io_pin(self.wmask_dff_insts[port],
|
||||||
"clk_buf{}".format(port),
|
"clk",
|
||||||
"clk_buf{}".format(port),
|
"clk_buf{}".format(port),
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
|
|
||||||
|
|
@ -1133,17 +1128,17 @@ class sram_1bank(design, verilog, lef):
|
||||||
for bit in range(self.word_size + self.num_spare_cols):
|
for bit in range(self.word_size + self.num_spare_cols):
|
||||||
# input
|
# input
|
||||||
self.add_io_pin(self.data_dff_insts[port],
|
self.add_io_pin(self.data_dff_insts[port],
|
||||||
"din{}[{}]".format(port, bit),
|
"din_{}".format(bit),
|
||||||
"din{}[{}]".format(port, bit),
|
"din{}[{}]".format(port, bit),
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
# output
|
# output
|
||||||
self.add_io_pin(self.data_dff_insts[port],
|
self.add_io_pin(self.data_dff_insts[port],
|
||||||
"bank_din{}_{}".format(port, bit),
|
"dout_{}".format(bit),
|
||||||
"bank_din{}_{}".format(port, bit),
|
"bank_din{}_{}".format(port, bit),
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
#clk_buf, regard as input
|
#clk_buf, regard as input
|
||||||
self.add_io_pin(self.data_dff_insts[port],
|
self.add_io_pin(self.data_dff_insts[port],
|
||||||
"clk_buf{}".format(port),
|
"clk",
|
||||||
"clk_buf{}".format(port),
|
"clk_buf{}".format(port),
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
|
|
||||||
|
|
@ -1180,17 +1175,17 @@ class sram_1bank(design, verilog, lef):
|
||||||
for bit in range(self.col_addr_size):
|
for bit in range(self.col_addr_size):
|
||||||
#input
|
#input
|
||||||
self.add_io_pin(self.col_addr_dff_insts[port],
|
self.add_io_pin(self.col_addr_dff_insts[port],
|
||||||
"addr{}[{}]".format(port, bit), # old name
|
"din_{}".format(bit), # old name
|
||||||
"addr{}[{}]".format(port, bit), # new name
|
"addr{}[{}]".format(port, bit), # new name
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
#output
|
#output
|
||||||
self.add_io_pin(self.col_addr_dff_insts[port],
|
self.add_io_pin(self.col_addr_dff_insts[port],
|
||||||
"a{}_{}".format(port, bit),
|
"dout_{}".format(bit),
|
||||||
"a{}_{}".format(port, bit),
|
"a{}_{}".format(port, bit),
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
#clk_buf, regard as input
|
#clk_buf, regard as input
|
||||||
self.add_pin(self.col_addr_dff_insts[port],
|
self.add_pin(self.col_addr_dff_insts[port],
|
||||||
"clk_buf{}".format(port),
|
"clk",
|
||||||
"clk_buf{}".format(port),
|
"clk_buf{}".format(port),
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
|
|
||||||
|
|
@ -1226,18 +1221,21 @@ class sram_1bank(design, verilog, lef):
|
||||||
|
|
||||||
for bit in range(self.row_addr_size):
|
for bit in range(self.row_addr_size):
|
||||||
#input
|
#input
|
||||||
|
#debug
|
||||||
|
print("this is port number:{0}".format(port))
|
||||||
|
print("insts:{0}".format(self.row_addr_dff_insts[port]))
|
||||||
self.add_io_pin(self.row_addr_dff_insts[port],
|
self.add_io_pin(self.row_addr_dff_insts[port],
|
||||||
"addr{}[{}]".format(port, bit + self.col_addr_size), # old name
|
"din_{}".format(bit + self.col_addr_size), # old name
|
||||||
"addr{}[{}]".format(port, bit + self.col_addr_size), # new name
|
"addr{}[{}]".format(port, bit + self.col_addr_size), # new name
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
#output
|
#output
|
||||||
self.add_io_pin(self.row_addr_dff_insts[port],
|
self.add_io_pin(self.row_addr_dff_insts[port],
|
||||||
"a{}_{}".format(port, bit + self.col_addr_size),
|
"dout_{}".format(bit + self.col_addr_size),
|
||||||
"a{}_{}".format(port, bit + self.col_addr_size),
|
"a{}_{}".format(port, bit + self.col_addr_size),
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
#clk_buf, regard as input
|
#clk_buf, regard as input
|
||||||
self.add_io_pin(self.row_addr_dff_insts[port],
|
self.add_io_pin(self.row_addr_dff_insts[port],
|
||||||
"clk_buf{}".format(port),
|
"clk",
|
||||||
"clk_buf{}".format(port),
|
"clk_buf{}".format(port),
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
|
|
||||||
|
|
@ -1280,45 +1278,45 @@ class sram_1bank(design, verilog, lef):
|
||||||
pin_layer = self.pwr_grid_layers[0]
|
pin_layer = self.pwr_grid_layers[0]
|
||||||
|
|
||||||
# Inputs
|
# Inputs
|
||||||
self.add_io_pin(self.control_insts[port],
|
self.add_io_pin(self.control_logic_insts[port],
|
||||||
"csb{}".format(port), #old name
|
"csb", #old name
|
||||||
"csb{}".format(port), #new name
|
"csb{}".format(port), #new name
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
if port in self.readwrite_ports:
|
if port in self.readwrite_ports:
|
||||||
self.add_io_pin(self.control_insts[port],
|
self.add_io_pin(self.control_logic_insts[port],
|
||||||
"web{}".format(port),
|
"web",
|
||||||
"web{}".format(port),
|
"web{}".format(port),
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
self.add_io_pin(self.control_insts[port],
|
self.add_io_pin(self.control_logic_insts[port],
|
||||||
"clk{}".format(port),
|
"clk",
|
||||||
"clk{}".format(port),
|
"clk{}".format(port),
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
if self.has_rbl:
|
if self.has_rbl:
|
||||||
self.add_io_pin(self.control_insts[port],
|
self.add_io_pin(self.control_logic_insts[port],
|
||||||
"rbl_bl{}".format(port),
|
"rbl_bl",
|
||||||
"rbl_bl{}".format(port),
|
"rbl_bl{}".format(port),
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
# Outputs
|
# Outputs
|
||||||
if port in self.read_ports:
|
if port in self.read_ports:
|
||||||
self.add_io_pin(self.control_insts[port],
|
self.add_io_pin(self.control_logic_insts[port],
|
||||||
"s_en{}".format(port),
|
"s_en",
|
||||||
"s_en{}".format(port),
|
"s_en{}".format(port),
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
if port in self.write_ports:
|
if port in self.write_ports:
|
||||||
self.add_io_pin(self.control_insts[port],
|
self.add_io_pin(self.control_logic_insts[port],
|
||||||
"w_en{}".format(port),
|
"w_en",
|
||||||
"w_en{}".format(port),
|
"w_en{}".format(port),
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
self.add_io_pin(self.control_insts[port],
|
self.add_io_pin(self.control_logic_insts[port],
|
||||||
"p_en_bar{}".format(port),
|
"p_en_bar",
|
||||||
"p_en_bar{}".format(port),
|
"p_en_bar{}".format(port),
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
self.add_io_pin(self.control_insts[port],
|
self.add_io_pin(self.control_logic_insts[port],
|
||||||
"wl_en{}".format(port),
|
"wl_en",
|
||||||
"wl_en{}".format(port),
|
"wl_en{}".format(port),
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
self.add_io_pin(self.control_insts[port],
|
self.add_io_pin(self.control_logic_insts[port],
|
||||||
"clk_buf{}".format(port),
|
"clk_buf",
|
||||||
"clk_buf{}".format(port),
|
"clk_buf{}".format(port),
|
||||||
start_layer=pin_layer)
|
start_layer=pin_layer)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -184,70 +184,69 @@ class sram():
|
||||||
print_time("Extended Config", datetime.datetime.now(), start_time)
|
print_time("Extended Config", datetime.datetime.now(), start_time)
|
||||||
|
|
||||||
|
|
||||||
def save(self):
|
def save(self, mod=0):
|
||||||
""" Save all the output files while reporting time to do it as well. """
|
""" Save all the output files while reporting time to do it as well. """
|
||||||
for i in range(7):
|
if mod == 0:
|
||||||
if i == 0:
|
self.s.create_netlist_bank()
|
||||||
self.s.create_netlist_bank()
|
if not OPTS.netlist_only:
|
||||||
if not OPTS.netlist_only:
|
self.s.create_layout_bank_only()
|
||||||
self.s.create_layout_bank_only()
|
self.generate_files("_bank")
|
||||||
self.generate_files("bank")
|
elif mod == 1:
|
||||||
elif i == 1:
|
self.s.create_netlist_control()
|
||||||
self.s.create_netlist_control()
|
if not OPTS.netlist_only:
|
||||||
if not OPTS.netlist_only:
|
for port in self.s.all_ports:
|
||||||
for port in self.s.all_ports:
|
self.s.create_layout_control_only(instance_index=port)
|
||||||
self.s.create_layout_control_only(self, instance_index=port)
|
self.generate_files("_control_" + str(port))
|
||||||
self.generate_files("control_" + port)
|
else:
|
||||||
else:
|
for port in self.s.all_ports:
|
||||||
for port in self.s.all_ports:
|
self.generate_files("_control_" + str(port))
|
||||||
self.generate_files("control_" + port)
|
elif mod == 2:
|
||||||
elif i == 2:
|
self.s.create_netlist_row_addr_dff()
|
||||||
self.s.create_netlist_row_addr_dff()
|
if not OPTS.netlist_only:
|
||||||
if not OPTS.netlist_only:
|
for port in self.s.all_ports:
|
||||||
for port in self.s.all_ports:
|
self.s.create_layout_row_addr_dff_only(instance_index=port)
|
||||||
self.s.create_layout_row_addr_dff_only(self, instance_index=port)
|
self.generate_files("_row_addr_dff_" + str(port))
|
||||||
self.generate_files("row_addr_dff_" + port)
|
else:
|
||||||
else:
|
for port in self.s.all_ports:
|
||||||
for port in self.s.all_ports:
|
self.generate_files("_row_addr_dff_" + str(port))
|
||||||
self.generate_files("row_addr_dff_" + port)
|
elif mod == 3:
|
||||||
elif i == 3:
|
if self.s.create_netlist_col_addr_dff() == False:
|
||||||
if self.s.create_netlist_col_addr_dff() == False:
|
pass#continue # do not need col addr dff
|
||||||
continue # do not need col addr dff
|
elif not OPTS.netlist_only:
|
||||||
elif not OPTS.netlist_only:
|
for port in self.s.all_ports:
|
||||||
for port in self.s.all_ports:
|
self.create_layout_col_addr_dff_only(instance_index=port)
|
||||||
self.create_layout_col_addr_dff_only(self, instance_index=port)
|
self.generate_files("_col_addr_dff_" + str(port))
|
||||||
self.generate_files("col_addr_dff_" + port)
|
else:
|
||||||
else:
|
self.generate_files("_col_addr_dff_" + str(port))
|
||||||
self.generate_files("col_addr_dff_" + port)
|
elif mod == 4:
|
||||||
elif i == 4:
|
self.s.create_netlist_data_dff()
|
||||||
self.s.create_netlist_data_dff()
|
if not OPTS.netlist_only:
|
||||||
if not OPTS.netlist_only:
|
for port in self.s.all_ports:
|
||||||
for port in self.s.all_ports:
|
self.s.create_layout_data_dff_only(instance_index=port)
|
||||||
self.s.create_layout_data_dff_only(self, instance_index=port)
|
self.generate_files("_data_dff_" + str(port))
|
||||||
self.generate_files("data_dff_" + port)
|
else:
|
||||||
else:
|
for port in self.s.all_ports:
|
||||||
for port in self.s.all_ports:
|
self.generate_files("_data_dff_" + str(port))
|
||||||
self.generate_files("data_dff_" + port)
|
elif mod == 5:
|
||||||
elif i == 5:
|
if self.s.create_netlist_wmask_dff() == False:
|
||||||
if self.s.create_netlist_wmask_dff() == False:
|
pass#continue # do not need wmask dff
|
||||||
continue # do not need wmask dff
|
elif not OPTS.netlist_only:
|
||||||
elif not OPTS.netlist_only:
|
for port in self.s.all_ports:
|
||||||
for port in self.s.all_ports:
|
self.s.create_layout_wmask_dff_only(instance_index=port)
|
||||||
self.s.create_layout_wmask_dff_only(self, instance_index=port)
|
self.generate_files("_wmask_dff_" + str(port))
|
||||||
self.generate_files("wmask_dff_" + port)
|
else:
|
||||||
else:
|
for port in self.s.all_ports:
|
||||||
for port in self.s.all_ports:
|
self.generate_files("_wmask_dff_" + str(port))
|
||||||
self.generate_files("wmask_dff_" + port)
|
elif mod == 6:
|
||||||
elif i == 6:
|
if self.s.create_netlist_spare_wen_dff() == False:
|
||||||
if self.s.create_netlist_spare_wen_dff() == False:
|
pass#continue # do not need spare wen dff
|
||||||
continue # do not need spare wen dff
|
elif not OPTS.netlist_only:
|
||||||
elif not OPTS.netlist_only:
|
for port in self.s.all_ports:
|
||||||
for port in self.s.all_ports:
|
self.s.create_layout_spare_wen_dff_only(instance_index=port)
|
||||||
self.s.create_layout_spare_wen_dff_only(self, instance_index=port)
|
self.generate_files("_spare_wen_dff_" + str(port))
|
||||||
self.generate_files("spare_wen_dff_" + port)
|
else:
|
||||||
else:
|
for port in self.s.all_ports:
|
||||||
for port in self.s.all_ports:
|
self.generate_files("_spare_wen_dff_" + str(port))
|
||||||
self.generate_files("spare_wen_dff_" + port)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,30 @@ s = sram_road.sram()
|
||||||
# Output the files for the resulting SRAM
|
# Output the files for the resulting SRAM
|
||||||
s.save()
|
s.save()
|
||||||
|
|
||||||
|
del s
|
||||||
|
s = sram_road.sram()
|
||||||
|
s.save(mod=1)
|
||||||
|
|
||||||
|
del s
|
||||||
|
s = sram_road.sram()
|
||||||
|
s.save(mod=2)
|
||||||
|
|
||||||
|
del s
|
||||||
|
s = sram_road.sram()
|
||||||
|
s.save(mod=3)
|
||||||
|
|
||||||
|
del s
|
||||||
|
s = sram_road.sram()
|
||||||
|
s.save(mod=4)
|
||||||
|
|
||||||
|
del s
|
||||||
|
s = sram_road.sram()
|
||||||
|
s.save(mod=5)
|
||||||
|
|
||||||
|
del s
|
||||||
|
s = sram_road.sram()
|
||||||
|
s.save(mod=6)
|
||||||
|
|
||||||
# Delete temp files etc.
|
# Delete temp files etc.
|
||||||
openram.end_openram()
|
openram.end_openram()
|
||||||
openram.print_time("End", datetime.datetime.now(), start_time)
|
openram.print_time("End", datetime.datetime.now(), start_time)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue