diff --git a/compiler/characterizer/functional.py b/compiler/characterizer/functional.py index aa516455..44a466df 100644 --- a/compiler/characterizer/functional.py +++ b/compiler/characterizer/functional.py @@ -97,13 +97,16 @@ class functional(): self.sp_read_value[port] = "0" + self.sp_read_value[port] else: self.functional_fail = 1 - self.error ="FAILED: dout value ({}) does not fall within noise margins.".format(self.sp_read_value[port]) + self.error ="FAILED: dout value {0} does not fall within noise margins <{1} or >{2}.".format(value,0.25*self.vdd_voltage,0.75*self.vdd_voltage) if i < self.num_checks: self.read_values_over_test[i].append(self.sp_read_value[port]) else: self.read_values_test[i-self.num_checks].append(self.sp_read_value[port]) + if self.functional_fail: + return (self.functional_fail, self.error) + # Compare written values to read values for i in range(self.num_checks): debug.info(1, "Stored Word - Overwrite Test: {}".format(self.stored_values_over_test[i])) @@ -147,7 +150,7 @@ class functional(): self.sp_read_value[port] = "0" + self.sp_read_value[port] else: self.functional_fail = 1 - self.error ="FAILED: dout value ({}) does not fall within noise margins.".format(self.sp_read_value[port]) + self.error ="FAILED: dout value {0} does not fall within noise margins <{1} or >{2}.".format(value,0.25*self.vdd_voltage,0.75*self.vdd_voltage) if i < self.num_checks: self.read_values_multi_test[i][self.multi_addrs[i][port]] = self.sp_read_value[port] @@ -155,6 +158,9 @@ class functional(): self.read_values_over_test[i-self.num_checks].append(self.sp_read_value[port]) else: self.read_values_test[i-2*self.num_checks].append(self.sp_read_value[port]) + + if self.functional_fail: + return (self.functional_fail, self.error) # Compare written values to read values for i in range(self.num_checks): diff --git a/compiler/tests/22_psram_func_test.py b/compiler/tests/22_psram_func_test.py index a4e71484..bd2c4f66 100644 --- a/compiler/tests/22_psram_func_test.py +++ b/compiler/tests/22_psram_func_test.py @@ -36,24 +36,9 @@ class psram_func_test(openram_test): num_words=16, num_banks=1) c.words_per_row=1 - """ - OPTS.num_rw_ports = 1 - OPTS.num_w_ports = 0 - OPTS.num_r_ports = 0 - debug.info(1, "Functional test for 1bit, 16word SRAM, with 1 bank. Multiport with {}RW {}W {}R.".format(OPTS.num_rw_ports, OPTS.num_w_ports, OPTS.num_r_ports)) - s = sram(c, name="sram1") - - tempspice = OPTS.openram_temp + "temp.sp" - s.sp_write(tempspice) - - corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) - f = functional(s.s, tempspice, corner) - f.run() - - """ OPTS.num_rw_ports = 1 - OPTS.num_w_ports = 1 + OPTS.num_w_ports = 2 OPTS.num_r_ports = 2 debug.info(1, "Functional test for 1bit, 16word SRAM, with 1 bank. Multiport with {}RW {}W {}R.".format(OPTS.num_rw_ports, OPTS.num_w_ports, OPTS.num_r_ports))