From 79cb57a672c0bd1ed78e73a6a689ae93a4338c22 Mon Sep 17 00:00:00 2001 From: Lukas Steiner Date: Wed, 26 Aug 2020 10:20:45 +0200 Subject: [PATCH] Add number of bankgroups and REFSB command length to trace analyzer. --- .../resources/scripts/createTraceDB.sql | 2 + DRAMSys/library/src/common/TlmRecorder.cpp | 95 ++++++++++--------- .../businessObjects/commandlengths.h | 8 +- .../businessObjects/generalinfo.h | 9 +- .../businessObjects/phases/phase.h | 16 +++- .../businessObjects/phases/phasefactory.cpp | 5 +- DRAMSys/traceAnalyzer/data/tracedb.cpp | 38 ++++---- .../presentation/tracedrawingproperties.h | 7 +- .../traceAnalyzer/presentation/traceplot.cpp | 1 + .../presentation/tracescroller.cpp | 1 + 10 files changed, 105 insertions(+), 77 deletions(-) diff --git a/DRAMSys/library/resources/scripts/createTraceDB.sql b/DRAMSys/library/resources/scripts/createTraceDB.sql index 7a127fac..a8fa60a8 100644 --- a/DRAMSys/library/resources/scripts/createTraceDB.sql +++ b/DRAMSys/library/resources/scripts/createTraceDB.sql @@ -19,6 +19,7 @@ CREATE TABLE GeneralInfo( NumberOfTransactions INTEGER, TraceEnd INTEGER, NumberOfRanks INTEGER, + NumberOfBankgroups INTEGER, NumberOfBanks INTEGER, clk INTEGER, UnitOfTime TEXT, @@ -41,6 +42,7 @@ CREATE TABLE CommandLengths( WRA INTEGER, REFA INTEGER, REFB INTEGER, + REFSB INTEGER, PDEA INTEGER, PDXA INTEGER, PDEP INTEGER, diff --git a/DRAMSys/library/src/common/TlmRecorder.cpp b/DRAMSys/library/src/common/TlmRecorder.cpp index 59805638..24701cb5 100644 --- a/DRAMSys/library/src/common/TlmRecorder.cpp +++ b/DRAMSys/library/src/common/TlmRecorder.cpp @@ -275,86 +275,86 @@ void TlmRecorder::prepareSqlStatements() insertTransactionString = "INSERT INTO Transactions VALUES (:id,:rangeID,:address,:burstlength,:thread,:channel,:rank," ":bankgroup,:bank,:row,:column,:dataStrobeBegin,:dataStrobeEnd, :timeOfGeneration,:command)"; + insertRangeString = "INSERT INTO Ranges VALUES (:id,:begin,:end)"; + updateRangeString = "UPDATE Ranges SET End = :end WHERE ID = :id"; + updateDataStrobeString = "UPDATE Transactions SET DataStrobeBegin = :begin, DataStrobeEnd = :end WHERE ID = :id"; insertPhaseString = "INSERT INTO Phases (PhaseName,PhaseBegin,PhaseEnd,Transact) VALUES (:name,:begin,:end,:transaction)"; + updatePhaseString = "UPDATE Phases SET PhaseEnd = :end WHERE Transact = :trans AND PhaseName = :name"; + insertGeneralInfoString = "INSERT INTO GeneralInfo VALUES" - "(:numberOfTransactions,:end,:numberOfRanks,:numberOfBanks,:clk,:unitOfTime,:mcconfig,:memspec," + "(:numberOfTransactions,:end,:numberOfRanks,:numberOfBankgroups,:numberOfBanks,:clk,:unitOfTime,:mcconfig,:memspec," ":traces,:windowSize, :flexibleRefresh, :maxRefBurst, :controllerThread)"; + insertCommandLengthsString = "INSERT INTO CommandLengths VALUES" - "(:ACT, :PRE, :PREA, :RD, :RDA, :WR, :WRA, :REFA, :REFB, :PDEA, :PDXA, :PDEP, :PDXP, :SREFEN, :SREFEX)"; + "(:ACT, :PRE, :PREA, :RD, :RDA, :WR, :WRA, :REFA, :REFB, :REFSB, :PDEA, :PDXA, :PDEP, :PDXP, :SREFEN, :SREFEX)"; + insertDebugMessageString = "INSERT INTO DebugMessages (Time,Message) Values (:time,:message)"; + insertPowerString = "INSERT INTO Power VALUES (:time,:averagePower)"; - sqlite3_prepare_v2(db, insertTransactionString.c_str(), -1, - &insertTransactionStatement, 0); + sqlite3_prepare_v2(db, insertTransactionString.c_str(), -1, &insertTransactionStatement, 0); sqlite3_prepare_v2(db, insertRangeString.c_str(), -1, &insertRangeStatement, 0); sqlite3_prepare_v2(db, updateRangeString.c_str(), -1, &updateRangeStatement, 0); sqlite3_prepare_v2(db, insertPhaseString.c_str(), -1, &insertPhaseStatement, 0); sqlite3_prepare_v2(db, updatePhaseString.c_str(), -1, &updatePhaseStatement, 0); - sqlite3_prepare_v2(db, updateDataStrobeString.c_str(), -1, - &updateDataStrobeStatement, 0); - sqlite3_prepare_v2(db, insertGeneralInfoString.c_str(), -1, - &insertGeneralInfoStatement, 0); - sqlite3_prepare_v2(db, insertCommandLengthsString.c_str(), -1, - &insertCommandLengthsStatement, 0); - sqlite3_prepare_v2(db, insertDebugMessageString.c_str(), -1, - &insertDebugMessageStatement, 0); + sqlite3_prepare_v2(db, updateDataStrobeString.c_str(), -1, &updateDataStrobeStatement, 0); + sqlite3_prepare_v2(db, insertGeneralInfoString.c_str(), -1, &insertGeneralInfoStatement, 0); + sqlite3_prepare_v2(db, insertCommandLengthsString.c_str(), -1, &insertCommandLengthsStatement, 0); + sqlite3_prepare_v2(db, insertDebugMessageString.c_str(), -1, &insertDebugMessageStatement, 0); sqlite3_prepare_v2(db, insertPowerString.c_str(), -1, &insertPowerStatement, 0); } void TlmRecorder::insertDebugMessageInDB(std::string message, const sc_time &time) { sqlite3_bind_int64(insertDebugMessageStatement, 1, time.value()); - sqlite3_bind_text(insertDebugMessageStatement, 2, message.c_str(), - message.length(), 0); + sqlite3_bind_text(insertDebugMessageStatement, 2, message.c_str(), message.length(), 0); executeSqlStatement(insertDebugMessageStatement); } void TlmRecorder::insertGeneralInfo() { sqlite3_bind_int64(insertGeneralInfoStatement, 1, totalNumTransactions - 1); - sqlite3_bind_int64(insertGeneralInfoStatement, 2, - simulationTimeCoveredByRecording.value()); - sqlite3_bind_int(insertGeneralInfoStatement, 3, - Configuration::getInstance().memSpec->numberOfRanks); - sqlite3_bind_int(insertGeneralInfoStatement, 4, - Configuration::getInstance().memSpec->numberOfBanks); - sqlite3_bind_int(insertGeneralInfoStatement, 5, - Configuration::getInstance().memSpec->tCK.value()); - sqlite3_bind_text(insertGeneralInfoStatement, 6, "PS", 2, NULL); - sqlite3_bind_text(insertGeneralInfoStatement, 7, mcconfig.c_str(), - mcconfig.length(), NULL); - sqlite3_bind_text(insertGeneralInfoStatement, 8, memspec.c_str(), - memspec.length(), NULL); - sqlite3_bind_text(insertGeneralInfoStatement, 9, traces.c_str(), - traces.length(), NULL); + sqlite3_bind_int64(insertGeneralInfoStatement, 2, simulationTimeCoveredByRecording.value()); + sqlite3_bind_int(insertGeneralInfoStatement, 3, Configuration::getInstance().memSpec->numberOfRanks); + sqlite3_bind_int(insertGeneralInfoStatement, 4, Configuration::getInstance().memSpec->numberOfBankGroups); + sqlite3_bind_int(insertGeneralInfoStatement, 5, Configuration::getInstance().memSpec->numberOfBanks); + sqlite3_bind_int(insertGeneralInfoStatement, 6, Configuration::getInstance().memSpec->tCK.value()); + sqlite3_bind_text(insertGeneralInfoStatement, 7, "PS", 2, NULL); + sqlite3_bind_text(insertGeneralInfoStatement, 8, mcconfig.c_str(), mcconfig.length(), NULL); + sqlite3_bind_text(insertGeneralInfoStatement, 9, memspec.c_str(), memspec.length(), NULL); + sqlite3_bind_text(insertGeneralInfoStatement, 10, traces.c_str(), traces.length(), NULL); if (!Configuration::getInstance().enableWindowing) - sqlite3_bind_int64(insertGeneralInfoStatement, 10, 0); + sqlite3_bind_int64(insertGeneralInfoStatement, 11, 0); else - sqlite3_bind_int64(insertGeneralInfoStatement, 10, - (Configuration::getInstance().memSpec->tCK * - Configuration::getInstance().windowSize).value()); + sqlite3_bind_int64(insertGeneralInfoStatement, 11, + (Configuration::getInstance().memSpec->tCK * + Configuration::getInstance().windowSize).value()); + if ((Configuration::getInstance().refreshMaxPostponed > 0) - || (Configuration::getInstance().refreshMaxPulledin > 0)) { - sqlite3_bind_int(insertGeneralInfoStatement, 11, 1); - sqlite3_bind_int(insertGeneralInfoStatement, 12, - std::max(Configuration::getInstance().refreshMaxPostponed, - Configuration::getInstance().refreshMaxPulledin)); - } else { - sqlite3_bind_int(insertGeneralInfoStatement, 11, 0); + || (Configuration::getInstance().refreshMaxPulledin > 0)) + { + sqlite3_bind_int(insertGeneralInfoStatement, 12, 1); + sqlite3_bind_int(insertGeneralInfoStatement, 13, + std::max(Configuration::getInstance().refreshMaxPostponed, + Configuration::getInstance().refreshMaxPulledin)); + } + else + { sqlite3_bind_int(insertGeneralInfoStatement, 12, 0); + sqlite3_bind_int(insertGeneralInfoStatement, 13, 0); } - sqlite3_bind_int(insertGeneralInfoStatement, 13, UINT_MAX); + sqlite3_bind_int(insertGeneralInfoStatement, 14, UINT_MAX); executeSqlStatement(insertGeneralInfoStatement); } @@ -371,12 +371,13 @@ void TlmRecorder::insertCommandLengths() sqlite3_bind_int(insertCommandLengthsStatement, 7, memSpec->getCommandLength(Command::WRA) / memSpec->tCK); sqlite3_bind_int(insertCommandLengthsStatement, 8, memSpec->getCommandLength(Command::REFA) / memSpec->tCK); sqlite3_bind_int(insertCommandLengthsStatement, 9, memSpec->getCommandLength(Command::REFB) / memSpec->tCK); - sqlite3_bind_int(insertCommandLengthsStatement, 10, memSpec->getCommandLength(Command::PDEA) / memSpec->tCK); - sqlite3_bind_int(insertCommandLengthsStatement, 11, memSpec->getCommandLength(Command::PDXA) / memSpec->tCK); - sqlite3_bind_int(insertCommandLengthsStatement, 12, memSpec->getCommandLength(Command::PDEP) / memSpec->tCK); - sqlite3_bind_int(insertCommandLengthsStatement, 13, memSpec->getCommandLength(Command::PDXP) / memSpec->tCK); - sqlite3_bind_int(insertCommandLengthsStatement, 14, memSpec->getCommandLength(Command::SREFEN) / memSpec->tCK); - sqlite3_bind_int(insertCommandLengthsStatement, 15, memSpec->getCommandLength(Command::SREFEX) / memSpec->tCK); + sqlite3_bind_int(insertCommandLengthsStatement, 10, 1); + sqlite3_bind_int(insertCommandLengthsStatement, 11, memSpec->getCommandLength(Command::PDEA) / memSpec->tCK); + sqlite3_bind_int(insertCommandLengthsStatement, 12, memSpec->getCommandLength(Command::PDXA) / memSpec->tCK); + sqlite3_bind_int(insertCommandLengthsStatement, 13, memSpec->getCommandLength(Command::PDEP) / memSpec->tCK); + sqlite3_bind_int(insertCommandLengthsStatement, 14, memSpec->getCommandLength(Command::PDXP) / memSpec->tCK); + sqlite3_bind_int(insertCommandLengthsStatement, 15, memSpec->getCommandLength(Command::SREFEN) / memSpec->tCK); + sqlite3_bind_int(insertCommandLengthsStatement, 16, memSpec->getCommandLength(Command::SREFEX) / memSpec->tCK); executeSqlStatement(insertCommandLengthsStatement); } diff --git a/DRAMSys/traceAnalyzer/businessObjects/commandlengths.h b/DRAMSys/traceAnalyzer/businessObjects/commandlengths.h index fad3eff2..07b1b2a7 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/commandlengths.h +++ b/DRAMSys/traceAnalyzer/businessObjects/commandlengths.h @@ -47,6 +47,7 @@ struct CommandLengths unsigned WRA; unsigned REFA; unsigned REFB; + unsigned REFSB; unsigned PDEA; unsigned PDXA; unsigned PDEP; @@ -56,10 +57,11 @@ struct CommandLengths CommandLengths(unsigned ACT, unsigned PRE, unsigned PREA, unsigned RD, unsigned RDA, unsigned WR, unsigned WRA, - unsigned REFA, unsigned REFB, unsigned PDEA, unsigned PDXA, - unsigned PDEP, unsigned PDXP, unsigned SREFEN, unsigned SREFEX) : + unsigned REFA, unsigned REFB, unsigned REFSB, + unsigned PDEA, unsigned PDXA, unsigned PDEP, unsigned PDXP, + unsigned SREFEN, unsigned SREFEX) : ACT(ACT), PRE(PRE), PREA(PREA), RD(RD), RDA(RDA), WR(WR), WRA(WRA), - REFA(REFA), REFB(REFB), PDEA(PDEA), PDXA(PDXA), + REFA(REFA), REFB(REFB), REFSB(REFSB), PDEA(PDEA), PDXA(PDXA), PDEP(PDEP), PDXP(PDXP), SREFEN(SREFEN), SREFEX(SREFEX) {} CommandLengths() {} diff --git a/DRAMSys/traceAnalyzer/businessObjects/generalinfo.h b/DRAMSys/traceAnalyzer/businessObjects/generalinfo.h index a86b8d62..8eaa9fd4 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/generalinfo.h +++ b/DRAMSys/traceAnalyzer/businessObjects/generalinfo.h @@ -45,6 +45,7 @@ struct GeneralInfo { unsigned int numberOfPhases; Timespan span; unsigned int numberOfRanks; + unsigned int numberOfBankgroups; unsigned int numberOfBanks; QString description; QString unitOfTime; @@ -53,12 +54,12 @@ struct GeneralInfo { unsigned int controllerThread; public: - GeneralInfo(unsigned int numberOfTransactions, unsigned int numberOfPhases, - Timespan span, unsigned int numberOfRanks, unsigned int numberOfBanks, + GeneralInfo(unsigned int numberOfTransactions, unsigned int numberOfPhases, Timespan span, + unsigned int numberOfRanks, unsigned int numberOfBankgroups, unsigned int numberOfBanks, const QString &description, QString unitOfTime, unsigned int clkPeriod, unsigned int windowSize, unsigned int controllerThread) : - numberOfTransactions(numberOfTransactions) , numberOfPhases(numberOfPhases), - span(span), numberOfRanks(numberOfRanks), numberOfBanks(numberOfBanks), + numberOfTransactions(numberOfTransactions) , numberOfPhases(numberOfPhases), span(span), + numberOfRanks(numberOfRanks), numberOfBankgroups(numberOfBankgroups), numberOfBanks(numberOfBanks), description(description), unitOfTime(unitOfTime), clkPeriod(clkPeriod), windowSize(windowSize), controllerThread(controllerThread) {} diff --git a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h b/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h index ae5cbc3c..eb269c3f 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h +++ b/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h @@ -314,8 +314,22 @@ protected: } }; +class REFSB : public AUTO_REFRESH +{ +public: + using AUTO_REFRESH::AUTO_REFRESH; +protected: + virtual QString Name() const override + { + return "REFSB"; + } + virtual bool isBankwise() const override + { + return false; + } +}; -class PRECHARGE_ALL : public Phase +class PREA : public Phase { public: using Phase::Phase; diff --git a/DRAMSys/traceAnalyzer/businessObjects/phases/phasefactory.cpp b/DRAMSys/traceAnalyzer/businessObjects/phases/phasefactory.cpp index 9156a5d8..862bf687 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/phases/phasefactory.cpp +++ b/DRAMSys/traceAnalyzer/businessObjects/phases/phasefactory.cpp @@ -68,7 +68,7 @@ shared_ptr PhaseFactory::CreatePhase(ID id, const QString &dbPhaseName, return shared_ptr(new ACT(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.ACT)}, std::shared_ptr())); else if (dbPhaseName == "PREA") - return shared_ptr(new PRECHARGE_ALL(id, span, trans, + return shared_ptr(new PREA(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PREA)}, std::shared_ptr())); else if (dbPhaseName == "REFA") return shared_ptr(new REFA(id, span, trans, @@ -76,6 +76,9 @@ shared_ptr PhaseFactory::CreatePhase(ID id, const QString &dbPhaseName, else if (dbPhaseName == "REFB") return shared_ptr(new REFB(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.REFB)}, std::shared_ptr())); + else if (dbPhaseName == "REFSB") + return shared_ptr(new REFSB(id, span, trans, + {Timespan(span.Begin(), span.Begin() + clk * cl.REFSB)}, std::shared_ptr())); else if (dbPhaseName == "RD") return shared_ptr(new RD(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RD)}, std::shared_ptr(new Timespan(trans->SpanOnDataStrobe())))); diff --git a/DRAMSys/traceAnalyzer/data/tracedb.cpp b/DRAMSys/traceAnalyzer/data/tracedb.cpp index d8f177ca..4471ce35 100644 --- a/DRAMSys/traceAnalyzer/data/tracedb.cpp +++ b/DRAMSys/traceAnalyzer/data/tracedb.cpp @@ -238,7 +238,7 @@ ID TraceDB::getTransactionIDFromPhaseID(ID phaseID) GeneralInfo TraceDB::getGeneralInfoFromDB() { QSqlQuery query(database); - query.prepare("SELECT NumberOfTransactions, TraceEnd, NumberOfRanks, NumberOfBanks, Clk, " + query.prepare("SELECT NumberOfTransactions, TraceEnd, NumberOfRanks, NumberOfBankgroups, NumberOfBanks, Clk, " "UnitOfTime, Traces, Memspec, MCconfig, WindowSize, ControllerThread FROM GeneralInfo"); executeQuery(query); @@ -246,16 +246,17 @@ GeneralInfo TraceDB::getGeneralInfoFromDB() unsigned int numberOfTransactions = query.value(0).toInt(); traceTime traceEnd = query.value(1).toLongLong(); unsigned int numberOfRanks = query.value(2).toInt(); - unsigned int numberOfBanks = query.value(3).toInt(); - unsigned int clkPeriod = query.value(4).toInt(); - QString unitOfTime = query.value(5).toString(); + unsigned int numberOfBankgroups = query.value(3).toInt(); + unsigned int numberOfBanks = query.value(4).toInt(); + unsigned int clkPeriod = query.value(5).toInt(); + QString unitOfTime = query.value(6).toString(); unsigned int numberOfPhases = getNumberOfPhases(); - QString traces = "Traces: " + query.value(6).toString(); - QString memspec = "Memspec: " + query.value(7).toString(); - QString mcconfig = "MCconfig: " + query.value(8).toString(); - unsigned int windowSize = query.value(9).toInt(); - unsigned int controllerThread = query.value(10).toUInt(); + QString traces = "Traces: " + query.value(7).toString(); + QString memspec = "Memspec: " + query.value(8).toString(); + QString mcconfig = "MCconfig: " + query.value(9).toString(); + unsigned int windowSize = query.value(10).toInt(); + unsigned int controllerThread = query.value(11).toUInt(); QString description = (traces + "\n"); description += mcconfig + "\n"; @@ -268,8 +269,8 @@ GeneralInfo TraceDB::getGeneralInfoFromDB() description += "Window size:" + QString::number(windowSize) + "\n"; return GeneralInfo(numberOfTransactions, numberOfPhases, Timespan(0, traceEnd), - numberOfRanks, numberOfBanks, description, unitOfTime, - clkPeriod, windowSize, controllerThread); + numberOfRanks, numberOfBankgroups, numberOfBanks, + description, unitOfTime, clkPeriod, windowSize, controllerThread); } else { throw sqlException("Tracefile corrupted. No general info table", this->pathToDB.toStdString()); @@ -293,14 +294,15 @@ CommandLengths TraceDB::getCommandLengthsFromDB() unsigned WRA = query.value(6).toInt(); unsigned REFA = query.value(7).toInt(); unsigned REFB = query.value(8).toInt(); - unsigned PDEA = query.value(9).toInt(); - unsigned PDXA = query.value(10).toInt(); - unsigned PDEP = query.value(11).toInt(); - unsigned PDXP = query.value(12).toInt(); - unsigned SREFEN = query.value(13).toInt(); - unsigned SREFEX = query.value(14).toInt(); + unsigned REFSB = query.value(9).toInt(); + unsigned PDEA = query.value(10).toInt(); + unsigned PDXA = query.value(11).toInt(); + unsigned PDEP = query.value(12).toInt(); + unsigned PDXP = query.value(13).toInt(); + unsigned SREFEN = query.value(14).toInt(); + unsigned SREFEX = query.value(15).toInt(); - return CommandLengths(ACT, PRE, PREA, RD, RDA, WR, WRA, REFA, REFB, + return CommandLengths(ACT, PRE, PREA, RD, RDA, WR, WRA, REFA, REFB, REFSB, PDEA, PDXA, PDEP, PDXP, SREFEN, SREFEX); } else diff --git a/DRAMSys/traceAnalyzer/presentation/tracedrawingproperties.h b/DRAMSys/traceAnalyzer/presentation/tracedrawingproperties.h index 7f5f7abc..1a763554 100644 --- a/DRAMSys/traceAnalyzer/presentation/tracedrawingproperties.h +++ b/DRAMSys/traceAnalyzer/presentation/tracedrawingproperties.h @@ -54,6 +54,7 @@ struct TraceDrawingProperties { int yValCommandBus; int yValDataBus; unsigned int numberOfRanks; + unsigned int numberOfBankgroups; unsigned int numberOfBanks; unsigned int banksPerRank; @@ -68,8 +69,8 @@ struct TraceDrawingProperties { drawText(drawText), drawBorder(drawBorder), colorGrouping(colorGrouping), yValResponse(yValResponse), yValRequest(yValRequest), yValCommandBus(yValCommandBus), yValDataBus(yValDataBus), - numberOfRanks(numberOfRanks), numberOfBanks(numberOfBanks), - banksPerRank(numberOfBanks / numberOfRanks) {} + numberOfRanks(numberOfRanks), numberOfBankgroups(numberOfBankgroups), + numberOfBanks(numberOfBanks), banksPerRank(numberOfBanks / numberOfRanks) {} QHash getLabels() const { @@ -78,7 +79,7 @@ struct TraceDrawingProperties { result[i] = QString("Bank ") + QString::number(i); } - result[yValCommandBus] = "Cmd Bus"; + result[yValCommandBus] = "Command Bus"; result[yValResponse] = "RESP"; result[yValRequest] = "REQ"; result[yValDataBus] = "Data Bus"; diff --git a/DRAMSys/traceAnalyzer/presentation/traceplot.cpp b/DRAMSys/traceAnalyzer/presentation/traceplot.cpp index 351477ee..fa518ac2 100644 --- a/DRAMSys/traceAnalyzer/presentation/traceplot.cpp +++ b/DRAMSys/traceAnalyzer/presentation/traceplot.cpp @@ -206,6 +206,7 @@ void TracePlot::connectNavigatorQ_SIGNALS() void TracePlot::setUpDrawingProperties() { drawingProperties.numberOfRanks = navigator->GeneralTraceInfo().numberOfRanks; + drawingProperties.numberOfBankgroups = navigator->GeneralTraceInfo().numberOfBankgroups; drawingProperties.numberOfBanks = navigator->GeneralTraceInfo().numberOfBanks; drawingProperties.banksPerRank = drawingProperties.numberOfBanks / drawingProperties.numberOfRanks; drawingProperties.yValResponse = drawingProperties.numberOfBanks; diff --git a/DRAMSys/traceAnalyzer/presentation/tracescroller.cpp b/DRAMSys/traceAnalyzer/presentation/tracescroller.cpp index ddccf75a..5bf8d301 100644 --- a/DRAMSys/traceAnalyzer/presentation/tracescroller.cpp +++ b/DRAMSys/traceAnalyzer/presentation/tracescroller.cpp @@ -87,6 +87,7 @@ void TraceScroller::setUpTracePlotItem() void TraceScroller::setUpDrawingProperties() { drawingProperties.numberOfRanks = navigator->GeneralTraceInfo().numberOfRanks; + drawingProperties.numberOfBankgroups = navigator->GeneralTraceInfo().numberOfBankgroups; drawingProperties.numberOfBanks = navigator->GeneralTraceInfo().numberOfBanks; drawingProperties.banksPerRank = drawingProperties.numberOfBanks / drawingProperties.numberOfRanks; drawingProperties.yValResponse = drawingProperties.numberOfBanks;