mirror of https://github.com/VLSIDA/OpenRAM.git
use odd number inverter chains from delay chain for delay instead of external inverters
This commit is contained in:
parent
b9b57ab6b3
commit
606260dd68
|
|
@ -151,8 +151,8 @@ class control_logic_delay(design.design):
|
||||||
debug.check(OPTS.delay_chain_stages % 2,
|
debug.check(OPTS.delay_chain_stages % 2,
|
||||||
"Must use odd number of delay chain stages for inverting delay chain.")
|
"Must use odd number of delay chain stages for inverting delay chain.")
|
||||||
self.multi_delay_chain=factory.create(module_type = "multi_delay_chain",
|
self.multi_delay_chain=factory.create(module_type = "multi_delay_chain",
|
||||||
fanout_list = 28 * [ OPTS.delay_chain_fanout_per_stage ], # TODO: generate this programatically
|
fanout_list = 29 * [ OPTS.delay_chain_fanout_per_stage ], # TODO: generate this programatically
|
||||||
pinout_list = [2, 12, 14, 28]) # TODO: generate this list programatically
|
pinout_list = [2, 12, 13, 15, 29]) # TODO: generate this list programatically
|
||||||
|
|
||||||
# not being used
|
# not being used
|
||||||
def get_dynamic_delay_chain_size(self, previous_stages, previous_fanout):
|
def get_dynamic_delay_chain_size(self, previous_stages, previous_fanout):
|
||||||
|
|
@ -260,9 +260,9 @@ class control_logic_delay(design.design):
|
||||||
|
|
||||||
# list of output control signals (for making a vertical bus)
|
# list of output control signals (for making a vertical bus)
|
||||||
if self.port_type == "rw":
|
if self.port_type == "rw":
|
||||||
self.internal_bus_list = ["glitch1_bar", "glitch2_bar", "glitch3_bar", "pre_sen", "delay1", "delay2", "delay3", "delay4", "gated_clk_bar", "gated_clk_buf", "we", "we_bar", "clk_buf", "cs"]
|
self.internal_bus_list = ["glitch1_bar", "glitch2_bar", "glitch3_bar", "pre_sen", "delay1", "delay2", "delay3", "delay4", "delay5", "gated_clk_bar", "gated_clk_buf", "we", "we_bar", "clk_buf", "cs"]
|
||||||
else:
|
else:
|
||||||
self.internal_bus_list = ["glitch1_bar", "glitch2_bar", "glitch3_bar", "pre_sen", "delay1", "delay2", "delay3", "delay4", "gated_clk_bar", "gated_clk_buf", "clk_buf", "cs"]
|
self.internal_bus_list = ["glitch1_bar", "glitch2_bar", "glitch3_bar", "pre_sen", "delay1", "delay2", "delay3", "delay4", "delay5", "gated_clk_bar", "gated_clk_buf", "clk_buf", "cs"]
|
||||||
# leave space for the bus plus one extra space
|
# leave space for the bus plus one extra space
|
||||||
self.internal_bus_width = (len(self.internal_bus_list) + 1) * self.m2_pitch
|
self.internal_bus_width = (len(self.internal_bus_list) + 1) * self.m2_pitch
|
||||||
|
|
||||||
|
|
@ -383,7 +383,7 @@ class control_logic_delay(design.design):
|
||||||
""" Create the delay chain """
|
""" Create the delay chain """
|
||||||
self.delay_inst=self.add_inst(name="multi_delay_chain",
|
self.delay_inst=self.add_inst(name="multi_delay_chain",
|
||||||
mod=self.multi_delay_chain)
|
mod=self.multi_delay_chain)
|
||||||
self.connect_inst(["gated_clk_buf", "delay1", "delay2", "delay3", "delay4", "vdd", "gnd"])
|
self.connect_inst(["gated_clk_buf", "delay1", "delay2", "delay3", "delay4", "delay5", "vdd", "gnd"])
|
||||||
|
|
||||||
def place_delay(self, row):
|
def place_delay(self, row):
|
||||||
""" Place the delay chain """
|
""" Place the delay chain """
|
||||||
|
|
@ -414,29 +414,17 @@ class control_logic_delay(design.design):
|
||||||
# glitch{1-3} are internal timing signals based on different in/out
|
# glitch{1-3} are internal timing signals based on different in/out
|
||||||
# points on the delay chain for adjustable start time and duration
|
# points on the delay chain for adjustable start time and duration
|
||||||
def create_glitches(self):
|
def create_glitches(self):
|
||||||
self.glitch1_inv_inst = self.add_inst(name="inv_glitch1",
|
|
||||||
mod=self.inv)
|
|
||||||
self.connect_inst(["delay2", "g1_end", "vdd", "gnd"])
|
|
||||||
|
|
||||||
self.glitch2_inv_inst = self.add_inst(name="inv_glitch2",
|
|
||||||
mod=self.inv)
|
|
||||||
self.connect_inst(["delay3", "g2_end", "vdd", "gnd"])
|
|
||||||
|
|
||||||
self.glitch3_inv_inst = self.add_inst(name="inv_glitch3",
|
|
||||||
mod=self.inv)
|
|
||||||
self.connect_inst(["delay4", "g3_end", "vdd", "gnd"])
|
|
||||||
|
|
||||||
self.glitch1_nand_inst = self.add_inst(name="nand2_glitch1",
|
self.glitch1_nand_inst = self.add_inst(name="nand2_glitch1",
|
||||||
mod=self.nand2)
|
mod=self.nand2)
|
||||||
self.connect_inst(["delay1", "g1_end", "glitch1_bar", "vdd", "gnd"])
|
self.connect_inst(["delay1", "delay3", "glitch1_bar", "vdd", "gnd"])
|
||||||
|
|
||||||
self.glitch2_nand_inst = self.add_inst(name="nand2_glitch2",
|
self.glitch2_nand_inst = self.add_inst(name="nand2_glitch2",
|
||||||
mod=self.nand2)
|
mod=self.nand2)
|
||||||
self.connect_inst(["gated_clk_buf", "g2_end", "glitch2_bar", "vdd", "gnd"])
|
self.connect_inst(["gated_clk_buf", "delay4", "glitch2_bar", "vdd", "gnd"])
|
||||||
|
|
||||||
self.glitch3_nand_inst = self.add_inst(name="nand2_glitch3",
|
self.glitch3_nand_inst = self.add_inst(name="nand2_glitch3",
|
||||||
mod=self.nand2)
|
mod=self.nand2)
|
||||||
self.connect_inst(["delay2", "g3_end", "glitch3_bar", "vdd", "gnd"])
|
self.connect_inst(["delay2", "delay5", "glitch3_bar", "vdd", "gnd"])
|
||||||
|
|
||||||
def place_glitch1_row(self, row):
|
def place_glitch1_row(self, row):
|
||||||
x_offset = self.control_x_offset
|
x_offset = self.control_x_offset
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue