diff --git a/compiler/sram/sram_1bank.py b/compiler/sram/sram_1bank.py index 3dc9b297..26fc56c8 100644 --- a/compiler/sram/sram_1bank.py +++ b/compiler/sram/sram_1bank.py @@ -70,10 +70,14 @@ class sram_1bank(sram_base): wmask_pos = [None]*len(self.all_ports) data_pos = [None]*len(self.all_ports) - # This is M2 pitch even though it is on M1 to help stem via spacings on the trunk - # The M1 pitch is for supply rail spacings - max_gap_size = self.m2_pitch*max(self.word_size+1,self.col_addr_size+1) + 2*self.m1_pitch - + if self.write_size: + max_gap_size = self.m3_pitch*max(self.word_size+1,self.col_addr_size+1) + 2*self.m1_pitch + max_gap_size_wmask = self.m2_pitch*self.num_wmasks + 2*self.m1_pitch + else: + # This is M2 pitch even though it is on M1 to help stem via spacings on the trunk + # The M1 pitch is for supply rail spacings + max_gap_size = self.m2_pitch*max(self.word_size+1,self.col_addr_size+1) + 2*self.m1_pitch + # Port 0 port = 0 @@ -81,12 +85,12 @@ class sram_1bank(sram_base): if self.write_size: # Add the write mask flops below the write mask AND array. wmask_pos[port] = vector(self.bank.bank_array_ll.x, - -0.5 * max_gap_size - self.dff.height) + -max_gap_size_wmask - self.dff.height) self.wmask_dff_insts[port].place(wmask_pos[port]) # Add the data flops below the write mask flops. data_pos[port] = vector(self.bank.bank_array_ll.x, - -2 * max_gap_size - 2 * self.dff.height) + -max_gap_size - max_gap_size_wmask - 2 * self.dff.height) self.data_dff_insts[port].place(data_pos[port]) else: # Add the data flops below the bank to the right of the lower-left of bank array @@ -107,7 +111,7 @@ class sram_1bank(sram_base): if self.col_addr_dff: if self.write_size: col_addr_pos[port] = vector(self.bank.bank_array_ll.x - self.col_addr_dff_insts[port].width - self.bank.m2_gap, - -0.5*max_gap_size - self.col_addr_dff_insts[port].height) + -max_gap_size_wmask - self.col_addr_dff_insts[port].height) else: col_addr_pos[port] = vector(self.bank.bank_array_ll.x - self.col_addr_dff_insts[port].width - self.bank.m2_gap, -max_gap_size - self.col_addr_dff_insts[port].height) @@ -135,12 +139,12 @@ class sram_1bank(sram_base): if self.write_size: # Add the write mask flops below the write mask AND array. wmask_pos[port] = vector(self.bank.bank_array_ur.x - self.data_dff_insts[port].width, - self.bank.height + 0.5*max_gap_size + self.dff.height) + self.bank.height + max_gap_size_wmask + self.dff.height) self.wmask_dff_insts[port].place(wmask_pos[port], mirror="MX") # Add the data flops below the write mask flops data_pos[port] = vector(self.bank.bank_array_ur.x - self.data_dff_insts[port].width, - self.bank.height + 2*max_gap_size + 2*self.dff.height) + self.bank.height + max_gap_size_wmask + max_gap_size + 2*self.dff.height) self.data_dff_insts[port].place(data_pos[port], mirror="MX") else: # Add the data flops above the bank to the left of the upper-right of bank array