Fixed naming issue between sram instance and PWL in stimulus

This commit is contained in:
Hunter Nichols 2018-08-28 12:09:02 -07:00
parent 0bb4b48439
commit bd763fa1e3
3 changed files with 33 additions and 22 deletions

View File

@ -74,6 +74,7 @@ class delay():
self.sf.write("\n* Instantiation of the SRAM\n")
self.stim.inst_sram(abits=self.addr_size,
dbits=self.word_size,
port_names=(self.readwrite_ports,self.read_ports,self.write_ports),
sram_name=self.name)
self.sf.write("\n* SRAM output loads\n")

View File

@ -451,6 +451,11 @@ class lib:
if self.use_model:
self.char_results = self.d.analytical_delay(self.sram,self.slews,self.loads)
else:
#Temporary Workaround to here to set # of ports. Crashes if set in config file.
#OPTS.rw_ports = 2
#OPTS.r_ports = 1
#OPTS.w_ports = 1
probe_address = "1" * self.sram.addr_size
probe_data = self.sram.word_size - 1
self.char_results = self.d.analyze(probe_address, probe_data, self.slews, self.loads)

View File

@ -30,46 +30,51 @@ class stimuli():
self.device_models = tech.spice["fet_models"][self.process]
def inst_sram(self, abits, dbits, sram_name):
def inst_sram(self, abits, dbits, port_names, sram_name):
""" Function to instatiate an SRAM subckt. """
self.sf.write("Xsram ")
for readwrite_input in range(OPTS.rw_ports):
#Un-tuple the port names. This was done to avoid passing them all as arguments. Could be improved still.
readwrite_ports = port_names[0]
read_ports = port_names[1]
write_ports = port_names[2]
for readwrite_input in readwrite_ports:
for i in range(dbits):
self.sf.write("DIN_RWP{0}[{1}] ".format(readwrite_input, i))
for write_input in range(OPTS.w_ports):
self.sf.write("DIN_{0}[{1}] ".format(readwrite_input, i))
for write_input in write_ports:
for i in range(dbits):
self.sf.write("DIN_WP{0}[{1}] ".format(write_input, i))
self.sf.write("DIN_{0}[{1}] ".format(write_input, i))
for readwrite_addr in range(OPTS.rw_ports):
for readwrite_addr in readwrite_ports:
for i in range(abits):
self.sf.write("A_RWP{0}[{1}] ".format(readwrite_addr,i))
for write_addr in range(OPTS.w_ports):
self.sf.write("A_{0}[{1}] ".format(readwrite_addr,i))
for write_addr in write_ports:
for i in range(abits):
self.sf.write("A_WP{0}[{1}] ".format(write_addr,i))
for read_addr in range(OPTS.r_ports):
self.sf.write("A_{0}[{1}] ".format(write_addr,i))
for read_addr in read_ports:
for i in range(abits):
self.sf.write("A_RP{0}[{1}] ".format(read_addr,i))
self.sf.write("A_{0}[{1}] ".format(read_addr,i))
#These control signals assume 6t sram i.e. a single readwrite port. If multiple readwrite ports are used then add more
#control signals. Not sure if this is correct, consider a temporary change until control signals for multiport are finalizd.
for readwrite_port in range(OPTS.rw_ports):
#control signals. Not sure if this is correct, consider a temporary change until control signals for multiport are finalized.
for readwrite_port in readwrite_ports:
for i in tech.spice["control_signals"]:
self.sf.write("{0}_RWP{1} ".format(i,readwrite_port))
self.sf.write("{0}_{1} ".format(i,readwrite_port))
#Write control signals related to multiport. I do not know these entirely, so consider the signals temporary for now.
for read_port in range(OPTS.r_ports):
self.sf.write("RPENB{0} ".format(read_port))
for write_port in range(OPTS.w_ports):
self.sf.write("WPENB{0} ".format(write_port))
#The names should probably be defined in the tech file, but that has not happened for multiport yet.
for read_port in read_ports:
self.sf.write("ENB_{0} ".format(read_port))
for write_port in write_ports:
self.sf.write("ENB_{0} ".format(write_port))
self.sf.write("{0} ".format(tech.spice["clk"]))
for readwrite_output in range(OPTS.rw_ports):
for readwrite_output in readwrite_ports:
for i in range(dbits):
self.sf.write("DOUT_RWP{0}[{1}] ".format(readwrite_output, i))
for read_output in range(OPTS.r_ports):
self.sf.write("DOUT_{0}[{1}] ".format(readwrite_output, i))
for read_output in read_ports:
for i in range(dbits):
self.sf.write("DOUT_RP{0}[{1}] ".format(read_output, i))
self.sf.write("DOUT_{0}[{1}] ".format(read_output, i))
self.sf.write("{0} {1} ".format(self.vdd_name, self.gnd_name))
self.sf.write("{0}\n".format(sram_name))