More improvements

This commit is contained in:
Felipe S. Prado
2016-10-12 18:11:00 +02:00
parent 6a8bee9dcf
commit abde229de8

View File

@@ -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();