diff --git a/DRAMSys/analyzer/scripts/tests.py b/DRAMSys/analyzer/scripts/tests.py index acfe7608..b27d99fa 100755 --- a/DRAMSys/analyzer/scripts/tests.py +++ b/DRAMSys/analyzer/scripts/tests.py @@ -277,16 +277,22 @@ def phase_transitions_are_valid(connection): validTransitions['PDNP'] = set(['PRE_ALL', 'ACT', 'REFA', 'PDNA', 'PDNP']) validTransitions['SREF'] = set(['PRE_ALL', 'ACT', 'REFA', 'PDNA', 'PDNP']) - # This was the original query: - # query = """SELECT PhaseName, phases.ID FROM phases INNER JOIN transactions ON phases.transact=transactions.ID WHERE TBank=:bank AND PhaseName NOT IN ('REQ','RESP') ORDER BY PhaseBegin""" - # However, refreshes, pre_all and self-refreshes are attributed to Bank 0 therefore this must be added to the order evaluation: - query = """SELECT - PhaseName, phases.ID - FROM - phases INNER JOIN transactions ON phases.transact=transactions.ID - WHERE - ((TBank=:bank) OR (PhaseNAME = "REFA" AND TBank=0) OR (PhaseNAME = "PRE_ALL" AND TBank=0) OR (PhaseNAME = "SREF" AND TBank=0)) - AND PhaseName NOT IN ('REQ','RESP') ORDER BY PhaseBegin""" + if dramconfig.bankwiseLogic: + query = """SELECT + PhaseName, phases.ID + FROM + phases INNER JOIN transactions ON phases.transact=transactions.ID + WHERE + (TBank=:bank) AND PhaseName NOT IN ('REQ','RESP') ORDER BY PhaseBegin""" + else: + # REFA, PRE_ALL, PDNA, PDNP and SREF are attributed to Bank 0 therefore this must be added to the order evaluation: + query = """SELECT + PhaseName, phases.ID + FROM + phases INNER JOIN transactions ON phases.transact=transactions.ID + WHERE + ((TBank=:bank) OR PhaseName IN ('PRE_ALL', 'SREF', 'PDNP, 'PDNA', 'REFA')) + AND PhaseName NOT IN ('REQ','RESP') ORDER BY PhaseBegin""" for bankNumber in range(dramconfig.numberOfBanks): cursor.execute(query, {"bank": bankNumber}) @@ -346,11 +352,11 @@ def timing_constraint(FirstPhase, SecondPhase): return dramconfig.tRFC elif (FirstPhaseName in ["PDNA", "PDNP"]): - print("{0}".format(FirstPhaseName)) - print("{0}".format(formatTime(FirstPhase[3]))) - print("{0}".format(formatTime(FirstPhase[2]))) - print("{0}".format(formatTime(dramconfig.tXP))) - print("{0}".format(formatTime(dramconfig.clk))) + # print("{0}".format(FirstPhaseName)) + # print("{0}".format(formatTime(FirstPhase[3]))) + # print("{0}".format(formatTime(FirstPhase[2]))) + # print("{0}".format(formatTime(dramconfig.tXP))) + # print("{0}".format(formatTime(dramconfig.clk))) return (FirstPhase[3] - FirstPhase[2]) + dramconfig.tXP - dramconfig.clk elif (FirstPhaseName == "SREF"): @@ -365,13 +371,13 @@ def timing_constraits_on_the_same_bank_hold(connection): cursor = connection.cursor() validTransitions = {} - if dramconfig.bankwiseLogic: - query = """SELECT PhaseName, phases.ID, PhaseBegin, PhaseEnd FROM phases INNER JOIN transactions ON phases.transact=transactions.ID WHERE TBank=:bank - AND PhaseName NOT IN ('REQ','RESP') ORDER BY PhaseBegin""" - else: - query = """SELECT PhaseName, phases.ID, PhaseBegin, PhaseEnd FROM phases INNER JOIN transactions ON phases.transact=transactions.ID - WHERE (TBank=:bank OR PhaseName IN ('PRE_ALL', 'SREF', 'PDNP, 'PDNA', 'REFA')) AND PhaseName NOT IN ('REQ','RESP') ORDER BY PhaseBegin""" +if dramconfig.bankwiseLogic: + query = """SELECT PhaseName, phases.ID, PhaseBegin, PhaseEnd FROM phases INNER JOIN transactions ON phases.transact=transactions.ID WHERE TBank=:bank + AND PhaseName NOT IN ('REQ','RESP') ORDER BY PhaseBegin""" +else: + query = """SELECT PhaseName, phases.ID, PhaseBegin, PhaseEnd FROM phases INNER JOIN transactions ON phases.transact=transactions.ID + WHERE (TBank=:bank OR PhaseName IN ('PRE_ALL', 'SREF', 'PDNP, 'PDNA', 'REFA')) AND PhaseName NOT IN ('REQ','RESP') ORDER BY PhaseBegin""" for bankNumber in range(dramconfig.numberOfBanks): cursor.execute(query, {"bank": bankNumber}) lastRow = cursor.fetchone() @@ -391,15 +397,24 @@ def row_buffer_is_used_correctly(connection): cursor = connection.cursor() - # REFA and PRE_ALL are stored to bank0 for all the other banks we have also to grep this commands: - # (PhaseNAME = "REFA" AND TBank=0) OR (PhaseNAME = "PRE_ALL" AND TBank=0)) - query = """SELECT - PhaseName, phases.ID - FROM - phases INNER JOIN transactions ON phases.transact=transactions.ID - WHERE - ((TBank=:bank) OR (PhaseNAME = "REFA" AND TBank=0) OR (PhaseNAME = "PRE_ALL" AND TBank=0)) - AND PhaseName NOT IN ('REQ','RESP') ORDER BY PhaseBegin""" + if dramconfig.bankwiseLogic: + query = """SELECT + PhaseName, phases.ID + FROM + phases INNER JOIN transactions ON phases.transact=transactions.ID + WHERE + ((TBank=:bank) OR (PhaseNAME = "REFA" AND TBank=0) OR (PhaseNAME = "PRE_ALL" AND TBank=0)) + AND PhaseName NOT IN ('REQ','RESP') ORDER BY PhaseBegin""" + else: + # REFA, PRE_ALL, PDNA, PDNP and SREF are stored to bank0 for all the other banks we have also to grep this command: + # PhaseName IN ('PRE_ALL', 'SREF', 'PDNP, 'PDNA', 'REFA') + query = """SELECT + PhaseName, phases.ID + FROM + phases INNER JOIN transactions ON phases.transact=transactions.ID + WHERE + ((TBank=:bank) OR PhaseName IN ('PRE_ALL', 'SREF', 'PDNP, 'PDNA', 'REFA')) + AND PhaseName NOT IN ('REQ','RESP') ORDER BY PhaseBegin""" # phases that precharge the bank and close the rowbuffer prechargingPhases = set(['PRE', 'PRE_ALL', 'RDA', 'WRA']) @@ -440,7 +455,7 @@ def no_commands_during_refresh(connection): test_query = """SELECT PhaseName FROM phases INNER JOIN transactions ON phases.transact=transactions.ID WHERE ((PhaseBegin >= ? and PhaseEnd <= ?) or (PhaseBegin <= ? and PhaseEnd > ?) or (PhaseBegin < ? and PhaseEnd >= ?)) and PhaseName NOT IN ('REQ','RESP','REFB') and TBank = ?""" else: query = """SELECT PhaseBegin, PhaseEnd FROM phases WHERE PhaseName = 'REFA' """ - test_query = """SELECT PhaseName FROM phases WHERE ((PhaseBegin >= ? and PhaseEnd <= ?) or (PhaseBegin <= ? and PhaseEnd > ?) or (PhaseBegin < ? and PhaseEnd >= ?)) and PhaseName NOT IN ('REQ','RESP', 'REFA')""" + test_query = """SELECT PhaseName FROM phases WHERE ((PhaseBegin >= ? and PhaseEnd <= ?) or (PhaseBegin <= ? and PhaseEnd > ?) or (PhaseBegin < ? and PhaseEnd >= ?)) and PhaseName NOT IN ('REQ', 'RESP', 'REFA')""" cursor.execute(query); result = cursor.fetchall();