mirror of https://github.com/VLSIDA/OpenRAM.git
Fix missing via in clk input of control
This commit is contained in:
parent
2ed8fc1506
commit
b5b691b73d
|
|
@ -1227,7 +1227,7 @@ class bank(design.design):
|
||||||
|
|
||||||
# clk to wordline_driver
|
# clk to wordline_driver
|
||||||
control_signal = self.prefix+"p_en_bar{}".format(port)
|
control_signal = self.prefix+"p_en_bar{}".format(port)
|
||||||
pin_pos = self.wordline_driver_inst[port].get_pin("en").bc()
|
pin_pos = self.wordline_driver_inst[port].get_pin("en_bar").bc()
|
||||||
mid_pos = pin_pos - vector(0,self.m1_pitch)
|
mid_pos = pin_pos - vector(0,self.m1_pitch)
|
||||||
control_x_offset = self.bus_xoffset[port][control_signal].x
|
control_x_offset = self.bus_xoffset[port][control_signal].x
|
||||||
control_pos = vector(control_x_offset, mid_pos.y)
|
control_pos = vector(control_x_offset, mid_pos.y)
|
||||||
|
|
|
||||||
|
|
@ -280,17 +280,21 @@ class control_logic(design.design):
|
||||||
|
|
||||||
def route_clk_buf(self):
|
def route_clk_buf(self):
|
||||||
clk_pin = self.clkbuf_inst.get_pin("A")
|
clk_pin = self.clkbuf_inst.get_pin("A")
|
||||||
|
clk_pos = clk_pin.center()
|
||||||
self.add_layout_pin_segment_center(text="clk",
|
self.add_layout_pin_segment_center(text="clk",
|
||||||
layer="metal2",
|
layer="metal2",
|
||||||
start=clk_pin.bc(),
|
start=clk_pos,
|
||||||
end=clk_pin.bc().scale(1,0))
|
end=clk_pos.scale(1,0))
|
||||||
|
self.add_via_center(layers=("metal1","via1","metal2"),
|
||||||
|
offset=clk_pos)
|
||||||
|
|
||||||
|
|
||||||
clkbuf_map = zip(["Z"], ["clk_buf"])
|
clkbuf_map = zip(["Z"], ["clk_buf"])
|
||||||
self.connect_vertical_bus(clkbuf_map, self.clkbuf_inst, self.rail_offsets, ("metal3", "via2", "metal2"))
|
self.connect_vertical_bus(clkbuf_map, self.clkbuf_inst, self.rail_offsets, ("metal3", "via2", "metal2"))
|
||||||
# The pin is on M1, so we need another via as well
|
# The pin is on M1, so we need another via as well
|
||||||
self.add_via_center(layers=("metal1","via1","metal2"),
|
self.add_via_center(layers=("metal1","via1","metal2"),
|
||||||
offset=self.clkbuf_inst.get_pin("Z").center(),
|
offset=self.clkbuf_inst.get_pin("Z").center())
|
||||||
rotate=90)
|
|
||||||
|
|
||||||
self.connect_output(self.clkbuf_inst, "Z", "clk_buf")
|
self.connect_output(self.clkbuf_inst, "Z", "clk_buf")
|
||||||
|
|
||||||
|
|
@ -332,16 +336,15 @@ class control_logic(design.design):
|
||||||
self.connect_vertical_bus(clkbuf_map, self.gated_clk_bar_inst, self.rail_offsets, ("metal3", "via2", "metal2"))
|
self.connect_vertical_bus(clkbuf_map, self.gated_clk_bar_inst, self.rail_offsets, ("metal3", "via2", "metal2"))
|
||||||
# The pin is on M1, so we need another via as well
|
# The pin is on M1, so we need another via as well
|
||||||
self.add_via_center(layers=("metal1","via1","metal2"),
|
self.add_via_center(layers=("metal1","via1","metal2"),
|
||||||
offset=self.gated_clk_bar_inst.get_pin("A").center(),
|
offset=self.gated_clk_bar_inst.get_pin("A").center())
|
||||||
rotate=90)
|
|
||||||
|
|
||||||
# This is the second gate over, so it needs to be on M3
|
# This is the second gate over, so it needs to be on M3
|
||||||
clkbuf_map = zip(["Z"], ["gated_clk_bar"])
|
clkbuf_map = zip(["Z"], ["gated_clk_bar"])
|
||||||
self.connect_vertical_bus(clkbuf_map, self.gated_clk_bar_inst, self.rail_offsets, ("metal3", "via2", "metal2"))
|
self.connect_vertical_bus(clkbuf_map, self.gated_clk_bar_inst, self.rail_offsets, ("metal3", "via2", "metal2"))
|
||||||
# The pin is on M1, so we need another via as well
|
# The pin is on M1, so we need another via as well
|
||||||
self.add_via_center(layers=("metal1","via1","metal2"),
|
self.add_via_center(layers=("metal1","via1","metal2"),
|
||||||
offset=self.gated_clk_bar_inst.get_pin("Z").center(),
|
offset=self.gated_clk_bar_inst.get_pin("Z").center())
|
||||||
rotate=90)
|
|
||||||
|
|
||||||
def create_gated_clk_buf_row(self):
|
def create_gated_clk_buf_row(self):
|
||||||
self.gated_clk_buf_inst = self.add_inst(name="and2_gated_clk_buf",
|
self.gated_clk_buf_inst = self.add_inst(name="and2_gated_clk_buf",
|
||||||
|
|
@ -367,8 +370,7 @@ class control_logic(design.design):
|
||||||
self.connect_vertical_bus(clkbuf_map, self.gated_clk_buf_inst, self.rail_offsets, ("metal3", "via2", "metal2"))
|
self.connect_vertical_bus(clkbuf_map, self.gated_clk_buf_inst, self.rail_offsets, ("metal3", "via2", "metal2"))
|
||||||
# The pin is on M1, so we need another via as well
|
# The pin is on M1, so we need another via as well
|
||||||
self.add_via_center(layers=("metal1","via1","metal2"),
|
self.add_via_center(layers=("metal1","via1","metal2"),
|
||||||
offset=self.gated_clk_buf_inst.get_pin("Z").center(),
|
offset=self.gated_clk_buf_inst.get_pin("Z").center())
|
||||||
rotate=90)
|
|
||||||
|
|
||||||
def create_wlen_row(self):
|
def create_wlen_row(self):
|
||||||
# input pre_p_en, output: wl_en
|
# input pre_p_en, output: wl_en
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue