trace analyzer repaired

This commit is contained in:
Matthias Jung
2015-09-16 13:34:02 +02:00
parent 7bfeac429b
commit 9f8627be77
3 changed files with 30 additions and 27 deletions

View File

@@ -46,7 +46,11 @@
using namespace std;
PythonCaller::PythonCaller() :
testModuleName("tests"), testFunctionName("runTests"), metricModuleName("metrics"), metricFunctionName("calculateMetrics"), pathToScripts(QApplication::applicationDirPath().toStdString() +"/scripts")
testModuleName("tests"),
testFunctionName("runTests"),
metricModuleName("metrics"),
metricFunctionName("calculateMetrics"),
pathToScripts(QApplication::applicationDirPath().toStdString() + "/../../DRAMSys/analyzer/scripts/")
{
Py_Initialize();
PyObject *sysPath = PySys_GetObject((char*)"path");
@@ -55,6 +59,7 @@ PythonCaller::PythonCaller() :
Py_DECREF(path);
qDebug() << testModuleName.c_str() << testFunctionName.c_str();
qDebug() << "XXX: " << pathToScripts.c_str();
pRunTestsFunction = loadFunctionFromModule(testModuleName, testFunctionName);
pCalculateMetricsFunction = loadFunctionFromModule(metricModuleName, metricFunctionName);
@@ -105,7 +110,7 @@ PyObject* PythonCaller::callFunctionWithStringArgument(PyObject* function, QStri
if(!pResult)
{
PyErr_Print();
throw runtime_error(string("Error in calling " + testFunctionName + "in module " + testModuleName));
throw runtime_error(string("Error in calling " + testFunctionName + " in module " + testModuleName));
}
return pResult;

View File

@@ -210,7 +210,7 @@ def commandbus_slots_are_used_once(connection):
if dramconfig.bankwiseLogic:
excludedPhases = "('REQ','RESP','PRE_ALL')"
else:
excludedPhases = "('REQ','RESP','PRE_ALL','PDNA','PDNP','SREF','AUTO_REFRESH')"
excludedPhases = "('REQ','RESP','PRE_ALL','PDNA','PDNP','SREF','REFA')"
query = """SELECT PhaseBegin,count FROM (SELECT phaseBegin,count(phasebegin) AS count
FROM Phases WHERE PhaseName NOT IN """ + excludedPhases + """ AND phasebegin>0 GROUP BY phaseBegin) WHERE count>1"""
@@ -229,35 +229,35 @@ def phase_transitions_are_valid(connection):
cursor = connection.cursor()
validTransitions = {}
if(dramconfig.bankwiseLogic):
validTransitions['PRE'] = set(['ACT', 'AUTO_REFRESH'])
if(dramconfig.bankwiseLogic == 1):
validTransitions['PRE'] = set(['ACT', 'REFA'])
validTransitions['ACT'] = set(['RD', 'RDA', 'WR', 'WRA', 'PRE', 'PRE_ALL'])
validTransitions['RD'] = set(['PRE','RD','RDA', 'WR', 'WRA', 'PDNA'])
validTransitions['WR'] = set(['PRE', 'RD','RDA', 'WR', 'WRA', 'PDNA'])
validTransitions['RDA'] = set(['ACT', 'AUTO_REFRESH', 'PDNP'])
validTransitions['WRA'] = set(['ACT', 'AUTO_REFRESH', 'PDNP'])
validTransitions['RDA'] = set(['ACT', 'REFA', 'PDNP'])
validTransitions['WRA'] = set(['ACT', 'REFA', 'PDNP'])
validTransitions['AUTO_REFRESH'] = set(['ACT', 'PDNP', 'SREF'])
validTransitions['REFA'] = set(['ACT', 'PDNP', 'SREF'])
validTransitions['PDNA'] = set(['PRE', 'RD','RDA', 'WR', 'WRA', 'AUTO_REFRESH'])
validTransitions['PDNP'] = set(['ACT', 'AUTO_REFRESH'])
validTransitions['PDNA'] = set(['PRE', 'RD','RDA', 'WR', 'WRA', 'REFA'])
validTransitions['PDNP'] = set(['ACT', 'REFA'])
validTransitions['SREF'] = set(['ACT'])
else:
validTransitions['PRE'] = set(['ACT'])
validTransitions['PRE_ALL'] = set(['AUTO_REFRESH'])
validTransitions['ACT'] = set(['RD', 'RDA', 'WR', 'WRA', 'PRE_ALl'])
validTransitions['PRE_ALL'] = set(['REFA'])
validTransitions['ACT'] = set(['RD', 'RDA', 'WR', 'WRA', 'PRE_ALL'])
validTransitions['RD'] = set(['PRE', 'PRE_ALL','RD','RDA', 'WR', 'WRA', 'PDNA'])
validTransitions['WR'] = set(['PRE', 'PRE_ALL','RD','RDA', 'WR', 'WRA', 'PDNA'])
validTransitions['RDA'] = set(['PRE_ALL', 'ACT', 'AUTO_REFRESH', 'PDNA', 'PDNP'])
validTransitions['WRA'] = set(['PRE_ALL', 'ACT', 'AUTO_REFRESH', 'PDNA', 'PDNP'])
validTransitions['RDA'] = set(['PRE_ALL', 'ACT', 'REFA', 'PDNA', 'PDNP'])
validTransitions['WRA'] = set(['PRE_ALL', 'ACT', 'REFA', 'PDNA', 'PDNP'])
validTransitions['AUTO_REFRESH'] = set(['PRE_ALL', 'ACT','AUTO_REFRESH', 'PDNA', 'PDNP', 'SREF'])
validTransitions['REFA'] = set(['PRE_ALL', 'ACT','REFA', 'PDNA', 'PDNP', 'SREF'])
validTransitions['PDNA'] = set(['PRE','PRE_ALL','ACT', 'RD', 'RDA', 'WR', 'WRA', 'AUTO_REFRESH', 'PDNA', 'PDNP'])
validTransitions['PDNP'] = set(['PRE_ALL', 'ACT', 'AUTO_REFRESH', 'PDNA', 'PDNP'])
validTransitions['SREF'] = set(['PRE_ALL', 'ACT', 'AUTO_REFRESH', 'PDNA', 'PDNP'])
validTransitions['PDNA'] = set(['PRE','PRE_ALL','ACT', 'RD', 'RDA', 'WR', 'WRA', 'REFA', 'PDNA', 'PDNP'])
validTransitions['PDNP'] = set(['PRE_ALL', 'ACT', 'REFA', 'PDNA', 'PDNP'])
validTransitions['SREF'] = set(['PRE_ALL', 'ACT', 'REFA', 'PDNA', 'PDNP'])
query = """SELECT PhaseName, phases.ID FROM phases INNER JOIN transactions ON phases.transact=transactions.ID WHERE TBank=:bank
@@ -269,6 +269,7 @@ def phase_transitions_are_valid(connection):
for currentRow in cursor:
currentPhase = currentRow[0]
lastPhase = lastRow[0]
if(currentPhase not in validTransitions[lastPhase]):
return TestFailed("Phase {0}({1}) is not allowed to follow phase {2}({3})".format(currentRow[1],currentPhase,lastRow[1],lastPhase))
lastRow = currentRow
@@ -305,18 +306,18 @@ def timing_constraint(FirstPhase, SecondPhase):
return max(dramconfig.tCCD_L, burstlength/dramconfig.dataRate)
elif(FirstPhaseName == "RDA"):
if(SecondPhaseName in ["ACT", "PRE_ALL", "AUTO_REFRESH"]):
if(SecondPhaseName in ["ACT", "PRE_ALL", "REFA"]):
return dramconfig.tRTP + dramconfig.tRP
elif(SecondPhaseName in ["PDNA","PDNP"]):
return dramconfig.tRL + getReadAccessTime() + dramconfig.clk
elif(FirstPhaseName == "WRA"):
if(SecondPhaseName in ["ACT", "PRE_ALL", "AUTO_REFRESH"]):
if(SecondPhaseName in ["ACT", "PRE_ALL", "REFA"]):
return dramconfig.tWL + getWriteAccessTime() + dramconfig.tWR + dramconfig.tRP
elif(SecondPhaseName in ["PDNA","PDNP"]):
return dramconfig.tWL + dramconfig.getWriteAccessTime() + dramconfig.tWR + dramconfig.clk
elif(FirstPhaseName == "AUTO_REFRESH"):
elif(FirstPhaseName == "REFA"):
return dramconfig.tRFC
elif(FirstPhaseName in ["PDNA","PDNP"]):
@@ -364,7 +365,7 @@ def row_buffer_is_used_correctly(connection):
accessingPhases = set(['RD','RDA', 'WR', 'WRA', 'PRE'])
#phases that require the bank to be in precharged state and the robuffer to be closed
idlePhases = set(['ACT', 'PDNP', 'AUTO_REFRESH', 'SREF'])
idlePhases = set(['ACT', 'PDNP', 'REFA', 'SREF'])
for bankNumber in range(dramconfig.numberOfBanks):
cursor.execute(query,{"bank": bankNumber})
@@ -528,7 +529,7 @@ def write_to_read_and_read_to_write_hold(connection):
return TestSuceeded()
# TODO: Check if this test still is correct!
@test
def read_holds_dll_constraint_after_sref(connection):
"""Checks that all read operations are delayed long enough after the end of the self refresh powerdown state"""
@@ -537,7 +538,6 @@ def read_holds_dll_constraint_after_sref(connection):
query = """SELECT Phases.ID,PhaseBegin,PhaseName,TBankGroup from Phases INNER JOIN Transactions ON Phases.Transact = Transactions.ID AND TBank = :bank
WHERE PhaseName IN ('RD', 'RDA', 'SREF') ORDER BY PhaseBegin"""
for bankNumber in range(dramconfig.numberOfBanks):
cursor.execute(query,{"bank": bankNumber})
lastRow = cursor.fetchone()
@@ -547,7 +547,7 @@ def read_holds_dll_constraint_after_sref(connection):
if(srefEndToRead < dramconfig.tXSRDLL ):
return TestFailed("Read {0} starts {1} after end of sref {2}. Minimum time is {3}".
format(currentRow[0],formatTime(srefEndToRead),lastRow[0], formatTime(dramconfig.tXSRDLL)))
lastRow = currentRow
lastRow = currentRow
return TestSuceeded()
@test

View File

@@ -99,8 +99,6 @@ FORMS += \
OTHER_FILES += \
common/static/createTraceDB.sql \
tests.py \
metrics.py \
scripts/metrics.py \
scripts/tests.py