trace analyzer repaired
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -99,8 +99,6 @@ FORMS += \
|
||||
|
||||
OTHER_FILES += \
|
||||
common/static/createTraceDB.sql \
|
||||
tests.py \
|
||||
metrics.py \
|
||||
scripts/metrics.py \
|
||||
scripts/tests.py
|
||||
|
||||
|
||||
Reference in New Issue
Block a user