This commit is contained in:
Janik Schlemminger
2014-04-11 12:26:43 +02:00
32 changed files with 513 additions and 240 deletions

View File

@@ -1,4 +1,24 @@
dram
====
de.uni-kl.ems.dram.vp.system
============================
Generic DRAM controller
#Setup with Eclipse
1. Start Eclipse ($eclipse)
2. -> Import
-> Git
-> Projects from Git
-> Existing Local Repository
-> Add Path to $dram.vp.system
-> Import Existing Projects
-> Finish
3. Configure Eclipse:
-> Run Configurations
-> Environment
-> Variable: LD_LIBRARY_PATH = /opt/systemc/lib-linux64/:/opt/gcc/lib64

View File

@@ -1 +0,0 @@
Jonny Schlemminger,jonny,ubuntu,08.04.2014 14:51,file:///home/jonny/.config/libreoffice/4;

View File

@@ -1,168 +1,27 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
<storageModule moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="cdt.managedbuild.config.gnu.exe.debug.513647443">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.debug.513647443" moduleId="org.eclipse.cdt.core.settings" name="build-simulation">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.debug.513647443" name="build-simulation" parent="cdt.managedbuild.config.gnu.exe.debug">
<folderInfo id="cdt.managedbuild.config.gnu.exe.debug.513647443." name="/" resourcePath="">
<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.784929216" name="Linux GCC" nonInternalBuilderId="cdt.managedbuild.target.gnu.builder.exe.debug" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.debug.2061818651" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/>
<builder autoBuildTarget="all" buildPath="${workspace_loc:/dram}/build-simulation" cleanBuildTarget="clean" enableAutoBuild="false" id="org.eclipse.cdt.build.core.internal.builder.1698165306" incrementalBuildTarget="all" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="CDT Internal Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="org.eclipse.cdt.build.core.internal.builder"/>
<tool id="cdt.managedbuild.tool.gnu.archiver.base.1509734096" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.789860529" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
<option id="gnu.cpp.compiler.exe.debug.option.optimization.level.2041174282" name="Optimization Level" superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
<option id="gnu.cpp.compiler.exe.debug.option.debugging.level.2092267417" name="Debug Level" superClass="gnu.cpp.compiler.exe.debug.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
<option id="gnu.cpp.compiler.option.include.paths.1823643375" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
<listOptionValue builtIn="false" value="/opt/systemc-2.3.0/include"/>
<listOptionValue builtIn="false" value="/opt/gmock-1.7.0/include"/>
</option>
<option id="gnu.cpp.compiler.option.preprocessor.def.2096973106" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
<listOptionValue builtIn="false" value="SC_INCLUDE_DYNAMIC_PROCESSES"/>
<listOptionValue builtIn="false" value="TIXML_USE_STL"/>
</option>
<option id="gnu.cpp.compiler.option.other.other.1339801369" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0 -std=c++11 -fprofile-arcs -ftest-coverage" valueType="string"/>
<option id="gnu.cpp.compiler.option.debugging.prof.523954048" name="Generate prof information (-p)" superClass="gnu.cpp.compiler.option.debugging.prof" value="false" valueType="boolean"/>
<option id="gnu.cpp.compiler.option.debugging.gprof.1932984572" name="Generate gprof information (-pg)" superClass="gnu.cpp.compiler.option.debugging.gprof" value="false" valueType="boolean"/>
<option id="gnu.cpp.compiler.option.dialect.std.739859284" name="Language standard" superClass="gnu.cpp.compiler.option.dialect.std" value="gnu.cpp.compiler.dialect.default" valueType="enumerated"/>
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1847876781" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.151665950" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug">
<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.exe.debug.option.optimization.level.1290346028" name="Optimization Level" superClass="gnu.c.compiler.exe.debug.option.optimization.level" valueType="enumerated"/>
<option id="gnu.c.compiler.exe.debug.option.debugging.level.1471334523" name="Debug Level" superClass="gnu.c.compiler.exe.debug.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
<option id="gnu.c.compiler.option.include.paths.1530954752" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
<listOptionValue builtIn="false" value="/opt/systemc-2.3.0/include"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/dram/dram/src}&quot;"/>
<listOptionValue builtIn="false" value="/opt/gmock-1.7.0/include"/>
<listOptionValue builtIn="false" value="../dram/dram/src"/>
</option>
<option id="gnu.c.compiler.option.preprocessor.def.symbols.886802157" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
<listOptionValue builtIn="false" value="SC_INCLUDE_DYNAMIC_PROCESSES"/>
<listOptionValue builtIn="false" value="TIXML_USE_STL"/>
</option>
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1721222219" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.699525857" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug"/>
<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.403667757" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug">
<option id="gnu.cpp.link.option.libs.1753762098" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" valueType="libs">
<listOptionValue builtIn="false" value="systemc"/>
<listOptionValue builtIn="false" value="sqlite3"/>
<listOptionValue builtIn="false" value="gcov"/>
<listOptionValue builtIn="false" value="pthread"/>
</option>
<option id="gnu.cpp.link.option.paths.1916142213" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
<listOptionValue builtIn="false" value="/opt/systemc-2.3.0/lib-linux64"/>
</option>
<option id="gnu.cpp.link.option.debugging.prof.631946268" name="Generate prof information (-p)" superClass="gnu.cpp.link.option.debugging.prof" value="false" valueType="boolean"/>
<option id="gnu.cpp.link.option.debugging.gprof.1817867753" name="Generate gprof information (-pg)" superClass="gnu.cpp.link.option.debugging.gprof" value="false" valueType="boolean"/>
<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1335058803" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
</inputType>
</tool>
<tool id="cdt.managedbuild.tool.gnu.assembler.exe.debug.876145438" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug">
<option id="gnu.both.asm.option.include.paths.1893217579" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
<listOptionValue builtIn="false" value="/opt/systemc-2.3.0/include"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/dram/dram/src}&quot;"/>
<listOptionValue builtIn="false" value="/opt/gmock-1.7.0/include"/>
<listOptionValue builtIn="false" value="../dram/dram/src"/>
</option>
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.207521263" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
</tool>
</toolChain>
</folderInfo>
<sourceEntries>
<entry excluding="testing|src" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src/common"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src/core"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src/scheduler"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src/simulation"/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="DRAM.cdt.managedbuild.target.gnu.exe.355512678" name="Executable" projectType="cdt.managedbuild.target.gnu.exe"/>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
<storageModule moduleId="refreshScope" versionNumber="2">
<configuration configurationName="Release">
<resource resourceType="PROJECT" workspacePath="/DRAM-Model"/>
</configuration>
<configuration configurationName="unit_test"/>
<configuration configurationName="platformArchitect">
<resource resourceType="PROJECT" workspacePath="/DRAM"/>
</configuration>
<configuration configurationName="build-simulation"/>
<configuration configurationName="testing"/>
<configuration configurationName="Debug">
<resource resourceType="PROJECT" workspacePath="/DRAM-Model"/>
</configuration>
<configuration configurationName="simulation-build">
<resource resourceType="PROJECT" workspacePath="/dram"/>
</configuration>
<configuration configurationName="standalone"/>
<configuration configurationName="build-testing"/>
<configuration configurationName="simulation"/>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings">
<doc-comment-owner id="org.eclipse.cdt.internal.ui.text.doctools.NullDocCommentOwner">
<path value=""/>
</doc-comment-owner>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
<buildTargets>
<target name="standalone" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>make</buildCommand>
<buildArguments/>
<buildTarget>standalone</buildTarget>
<stopOnError>true</stopOnError>
<useDefaultCommand>true</useDefaultCommand>
<runAllBuilders>true</runAllBuilders>
</target>
</buildTargets>
</storageModule>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1370040858;cdt.managedbuild.config.gnu.exe.debug.1370040858.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1266973934;cdt.managedbuild.tool.gnu.cpp.compiler.input.643453324">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1370040858.2044251296.868838098;cdt.managedbuild.config.gnu.exe.debug.1370040858.2044251296.868838098.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.2055122253;cdt.managedbuild.tool.gnu.c.compiler.input.1427026929">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1370040858;cdt.managedbuild.config.gnu.exe.debug.1370040858.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.1190872096;cdt.managedbuild.tool.gnu.c.compiler.input.953626288">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.1948932292;cdt.managedbuild.config.gnu.exe.release.1948932292.;cdt.managedbuild.tool.gnu.c.compiler.exe.release.1398731634;cdt.managedbuild.tool.gnu.c.compiler.input.1992326299">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1370040858.2044251296;cdt.managedbuild.config.gnu.exe.debug.1370040858.2044251296.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.440486336;cdt.managedbuild.tool.gnu.c.compiler.input.940566522">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.513647443;cdt.managedbuild.config.gnu.exe.debug.513647443.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.789860529;cdt.managedbuild.tool.gnu.cpp.compiler.input.1847876781">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.1948932292;cdt.managedbuild.config.gnu.exe.release.1948932292.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.1633668164;cdt.managedbuild.tool.gnu.cpp.compiler.input.1777926483">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1370040858.2044251296.868838098;cdt.managedbuild.config.gnu.exe.debug.1370040858.2044251296.868838098.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.192908432;cdt.managedbuild.tool.gnu.cpp.compiler.input.830919281">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.513647443;cdt.managedbuild.config.gnu.exe.debug.513647443.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.151665950;cdt.managedbuild.tool.gnu.c.compiler.input.1721222219">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1370040858.2044251296;cdt.managedbuild.config.gnu.exe.debug.1370040858.2044251296.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.743207946;cdt.managedbuild.tool.gnu.cpp.compiler.input.1014131258">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
</storageModule>
</cproject>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>dram</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<triggers>clean,full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.cdt.core.ccnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
</natures>
</projectDescription>

View File

@@ -4,7 +4,7 @@
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-2055719358" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" parameter="${COMMAND} -E -P -v -dD &quot;${INPUTS}&quot; -std=c++11">
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="1219188953996516293" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" parameter="${COMMAND} -E -P -v -dD &quot;${INPUTS}&quot; -std=c++11">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>

View File

@@ -0,0 +1 @@
memconfig.xml

View File

@@ -0,0 +1,11 @@
<memspec>
<memconfig>
<parameter id="bankwiseLogic" type="bool" value="0" />
<parameter id="openPagePolicy" type="bool" value="1" />
<parameter id="adaptiveOpenPagePolicy" type="bool" value="0" />
<parameter id="refreshAwareScheduling" type="bool" value="0" />
<parameter id="maxNrOfTransactionsInDram" type="uint" value="50" />
<parameter id="scheduler" type="string" value="FIFO" />
<parameter id="capsize" type="uint" value="5" />
</memconfig>
</memspec>

View File

@@ -0,0 +1,11 @@
<memspec>
<memconfig>
<parameter id="bankwiseLogic" type="bool" value="0" />
<parameter id="openPagePolicy" type="bool" value="1" />
<parameter id="adaptiveOpenPagePolicy" type="bool" value="0" />
<parameter id="refreshAwareScheduling" type="bool" value="1" />
<parameter id="maxNrOfTransactionsInDram" type="uint" value="50" />
<parameter id="scheduler" type="string" value="FR_FCFS" />
<parameter id="capsize" type="uint" value="5" />
</memconfig>
</memspec>

View File

@@ -0,0 +1,11 @@
<memspec>
<memconfig>
<parameter id="bankwiseLogic" type="bool" value="0" />
<parameter id="openPagePolicy" type="bool" value="1" />
<parameter id="adaptiveOpenPagePolicy" type="bool" value="0" />
<parameter id="refreshAwareScheduling" type="bool" value="0" />
<parameter id="maxNrOfTransactionsInDram" type="uint" value="50" />
<parameter id="scheduler" type="string" value="FR_FCFS" />
<parameter id="capsize" type="uint" value="5" />
</memconfig>
</memspec>

View File

@@ -0,0 +1,11 @@
<memspec>
<memconfig>
<parameter id="bankwiseLogic" type="bool" value="0" />
<parameter id="openPagePolicy" type="bool" value="1" />
<parameter id="adaptiveOpenPagePolicy" type="bool" value="0" />
<parameter id="refreshAwareScheduling" type="bool" value="1" />
<parameter id="maxNrOfTransactionsInDram" type="uint" value="50" />
<parameter id="scheduler" type="string" value="PAR_BS" />
<parameter id="capsize" type="uint" value="5" />
</memconfig>
</memspec>

View File

@@ -0,0 +1,11 @@
<memspec>
<memconfig>
<parameter id="bankwiseLogic" type="bool" value="0" />
<parameter id="openPagePolicy" type="bool" value="1" />
<parameter id="adaptiveOpenPagePolicy" type="bool" value="0" />
<parameter id="refreshAwareScheduling" type="bool" value="0" />
<parameter id="maxNrOfTransactionsInDram" type="uint" value="50" />
<parameter id="scheduler" type="string" value="PAR_BS" />
<parameter id="capsize" type="uint" value="5" />
</memconfig>
</memspec>

View File

@@ -28,7 +28,7 @@
<!--<parameter id="XPDLL" type="uint" value="2" />-->
<parameter id="XS" type="uint" value="2" /><!--tRFC+2clk-->
<!--<parameter id="XSDLL" type="uint" value="20" />-->
<parameter id="REFI" type="uint" value="300" />
<parameter id="REFI" type="uint" value="1300" />
<!--<parameter id="CL" type="uint" value="3" />-->
<parameter id="TAW" type="uint" value="10" />
<parameter id="RRD" type="uint" value="2" />

View File

@@ -17,9 +17,11 @@ CREATE TABLE GeneralInfo(
NumberOfTransactions INTEGER,
TraceEnd INTEGER,
NumberOfBanks INTEGER,
Description TEXT,
clk INTEGER,
UnitOfTime TEXT
UnitOfTime TEXT,
Memconfig TEXT,
Memspec TEXT,
Traces TEXt
);
@@ -47,6 +49,7 @@ CREATE TABLE Transactions(
TThread INTEGER,
TChannel INTEGER,
TBank INTEGER,
TBankgroup INTEGER,
TRow INTEGER,
TColumn INTEGER,
Command TEXT,

View File

@@ -35,7 +35,7 @@ def getTraceLength(connection):
@metric
def average_response_latency_in_ns(connection):
cursor = connection.cursor()
cursor.execute("""SELECT avg(ranges.end-ranges.begin)/1000 FROM transactions INNER JOIN ranges
cursor.execute("""SELECT avg(transactions.DataStrobeEnd-ranges.begin)/1000 FROM transactions INNER JOIN ranges
ON transactions.range = ranges.ID where TThread != 0""")
result = cursor.fetchone()
@@ -44,7 +44,7 @@ def average_response_latency_in_ns(connection):
@threadMetric
def average_response_latency_in_ns(connection, thread):
cursor = connection.cursor()
query = """SELECT avg(ranges.end-ranges.begin)/1000 FROM transactions INNER JOIN ranges
query = """SELECT avg(transactions.DataStrobeEnd-ranges.begin)/1000 FROM transactions INNER JOIN ranges
ON transactions.range = ranges.ID where TThread = :Thread """
cursor.execute(query, {"Thread": thread})

View File

@@ -23,7 +23,7 @@ void DebugManager::printDebugMessage(string sender, string message)
cout << " at " << sc_time_stamp() << "\t in " << sender << "\t: " << message << endl;
if (writeToFile)
debugFile << " at " << sc_time_stamp().to_default_time_units() << " in " << sender << "\t: " << message << "\n";
debugFile << " at " << sc_time_stamp() << " in " << sender << "\t: " << message << "\n";
}
}

View File

@@ -41,8 +41,6 @@ void TlmRecorder::recordPhase(tlm::tlm_generic_payload& trans, tlm::tlm_phase ph
if (currentTransactionsInSystem.count(&trans) == 0)
introduceNewTransactionToSystem(time, trans);
unsigned int id = currentTransactionsInSystem[&trans];
string phaseName = phaseNameToString(phase);
string phaseBeginPrefix = "BEGIN_";
string phaseEndPrefix = "END_";
@@ -73,7 +71,7 @@ void TlmRecorder::recordDebugMessage(std::string message, sc_time time)
void TlmRecorder::createTables(string pathToURI)
{
string initial = getFileContents(pathToURI);
string initial = loadTextFileContents(pathToURI);
executeSqlCommand(initial);
}
@@ -89,7 +87,7 @@ void TlmRecorder::setUpTransactionTerminatingPhases()
void TlmRecorder::prepareSqlStatements()
{
insertTransactionString =
"INSERT INTO Transactions VALUES (:id,:rangeID,:address,:burstlength,:thread,:channel,:bank,:row,:column,:command,:dataStrobeBegin,:dataStrobeEnd)";
"INSERT INTO Transactions VALUES (:id,:rangeID,:address,:burstlength,:thread,:channel,:bank,:bankgroup,:row,:column,:command,:dataStrobeBegin,:dataStrobeEnd)";
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";
@@ -99,7 +97,8 @@ void TlmRecorder::prepareSqlStatements()
updatePhaseString =
"UPDATE Phases SET PhaseEnd = :end WHERE Transact = :trans AND PhaseName = :name";
insertGeneralInfoString =
"INSERT INTO GeneralInfo (NumberOfTransactions,TraceEnd,NumberOfBanks,description,clk,UnitOfTime) Values (:numberOfTransactions,:end,:numberOfBanks,:description,:clk,:unitOfTime)";
"INSERT INTO GeneralInfo (NumberOfTransactions,TraceEnd,NumberOfBanks,clk,UnitOfTime,Memconfig,Memspec,Traces) Values "
"(:numberOfTransactions,:end,:numberOfBanks,:clk,:unitOfTime,:memconfig,:memspec,:traces)";
insertDebugMessageString = "INSERT INTO DebugMessages (Time,Message) Values (:time,:message)";
sqlite3_prepare(db, insertTransactionString.c_str(), -1, &insertTransactionStatement, 0);
@@ -134,9 +133,11 @@ void TlmRecorder::insertGeneralInfo()
sqlite3_bind_int64(insertGeneralInfoStatement, 2, recordingEndTime.value());
sqlite3_bind_int(insertGeneralInfoStatement, 3,
core::Configuration::getInstance().NumberOfBanks);
sqlite3_bind_text(insertGeneralInfoStatement, 4, "", 0, NULL);
sqlite3_bind_int(insertGeneralInfoStatement, 5, core::Configuration::getInstance().Timings.clk.value());
sqlite3_bind_text(insertGeneralInfoStatement, 6, "PS", 2, NULL);
sqlite3_bind_int(insertGeneralInfoStatement, 4, core::Configuration::getInstance().Timings.clk.value());
sqlite3_bind_text(insertGeneralInfoStatement, 5, "PS", 2, NULL);
sqlite3_bind_text(insertGeneralInfoStatement, 6, memconfig.c_str(), memconfig.length(), NULL);
sqlite3_bind_text(insertGeneralInfoStatement, 7, memspec.c_str(), memspec.length(), NULL);
sqlite3_bind_text(insertGeneralInfoStatement, 8, traces.c_str(), traces.length(), NULL);
executeSqlStatement(insertGeneralInfoStatement);
}
void TlmRecorder::insertTransactionInDB(unsigned int id, tlm::tlm_generic_payload& trans)
@@ -145,17 +146,17 @@ void TlmRecorder::insertTransactionInDB(unsigned int id, tlm::tlm_generic_payloa
sqlite3_bind_int(insertTransactionStatement, 2, id);
sqlite3_bind_int(insertTransactionStatement, 3, trans.get_address());
sqlite3_bind_int(insertTransactionStatement, 4, trans.get_streaming_width());
sqlite3_bind_text(insertTransactionStatement, 10,
trans.get_command() == tlm::TLM_READ_COMMAND ? "R" : "W", 1, 0);
const DramExtension& extension = DramExtension::getExtension(trans);
sqlite3_bind_int(insertTransactionStatement, 5, extension.getThread().ID());
sqlite3_bind_int(insertTransactionStatement, 6, extension.getChannel().ID());
sqlite3_bind_int(insertTransactionStatement, 7, extension.getBank().ID());
sqlite3_bind_int(insertTransactionStatement, 8, extension.getRow().ID());
sqlite3_bind_int(insertTransactionStatement, 9, extension.getColumn().ID());
sqlite3_bind_int(insertTransactionStatement, 10, 0);
sqlite3_bind_int(insertTransactionStatement, 8, extension.getBankGroup().ID());
sqlite3_bind_int(insertTransactionStatement, 9, extension.getRow().ID());
sqlite3_bind_int(insertTransactionStatement, 10, extension.getColumn().ID());
sqlite3_bind_int(insertTransactionStatement, 11, 0);
sqlite3_bind_int(insertTransactionStatement, 12, 0);
executeSqlStatement(insertTransactionStatement);
}
@@ -244,25 +245,7 @@ void TlmRecorder::executeSqlCommand(string command)
printDebugMessage("Database created successfully");
}
string TlmRecorder::getFileContents(string filename)
{
ifstream in(filename.c_str(), ios::in | ios::binary);
if (in)
{
string contents;
in.seekg(0, ios::end);
contents.resize(in.tellg());
in.seekg(0, ios::beg);
in.read(&contents[0], contents.size());
in.close();
return (contents);
}
else
{
reportFatal("Error in TraceRecorder", "Could not load sql script from " + filename);
return "";
}
}
void TlmRecorder::printDebugMessage(std::string message)
{

View File

@@ -30,12 +30,14 @@ public:
void recordDebugMessage(std::string message, sc_time time);
void updateDataStrobe(const sc_time& begin, const sc_time& end, tlm::tlm_generic_payload& trans);
void closeConnection();
void recordMemconfig(string memconfig){this->memconfig = memconfig;}
void recordMemspec(string memspec){this->memspec = memspec;}
void recordTracenames(string traces){this->traces = traces;}
private:
std::string memconfig,memspec,traces;
TlmRecorder();
~TlmRecorder();
std::string getFileContents(std::string filename);
void executeSqlCommand(std::string command);
void executeSqlStatement(sqlite3_stmt* statement);
@@ -59,6 +61,7 @@ private:
map<tlm::tlm_generic_payload*, unsigned int> currentTransactionsInSystem;
unsigned int transactionIDCounter;
sc_time recordingEndTime;
std::vector<tlm::tlm_phase> transactionTerminatingPhases;
sqlite3 *db;
sqlite3_stmt *insertTransactionStatement, *insertRangeStatement, *updateRangeStatement,

View File

@@ -1,6 +1,7 @@
#include "Utils.h"
#include <string>
#include <tlm.h>
#include <fstream>
using namespace std;
using namespace tinyxml2;
@@ -10,7 +11,6 @@ void reportFatal(std::string sender, std::string message)
SC_REPORT_FATAL(sender.c_str(), message.c_str());
}
std::string phaseNameToString(tlm::tlm_phase phase)
{
std::ostringstream oss;
@@ -19,7 +19,8 @@ std::string phaseNameToString(tlm::tlm_phase phase)
return str;
}
unsigned int queryUIntParameter(XMLElement* node, string name) {
unsigned int queryUIntParameter(XMLElement* node, string name)
{
int result;
XMLElement* element;
for (element = node->FirstChildElement("parameter"); element != NULL;
@@ -34,7 +35,7 @@ unsigned int queryUIntParameter(XMLElement* node, string name) {
}
}
reportFatal("Query XML","Parameter '" + name +"' does not exist.");
reportFatal("Query XML", "Parameter '" + name + "' does not exist.");
return 0;
}
@@ -52,7 +53,8 @@ bool parameterExists(tinyxml2::XMLElement* node, std::string name)
return false;
}
double queryDoubleParameter(XMLElement* node, string name) {
double queryDoubleParameter(XMLElement* node, string name)
{
double result;
XMLElement* element;
for (element = node->FirstChildElement("parameter"); element != NULL;
@@ -67,11 +69,12 @@ double queryDoubleParameter(XMLElement* node, string name) {
}
}
reportFatal("Query XML","Parameter '" + name +"' does not exist.");
reportFatal("Query XML", "Parameter '" + name + "' does not exist.");
return 0;
}
bool queryBoolParameter(XMLElement* node, string name) {
bool queryBoolParameter(XMLElement* node, string name)
{
bool result;
XMLElement* element;
for (element = node->FirstChildElement("parameter"); element != NULL;
@@ -86,11 +89,12 @@ bool queryBoolParameter(XMLElement* node, string name) {
}
}
reportFatal("Query XML","Parameter '" + name +"' does not exist.");
reportFatal("Query XML", "Parameter '" + name + "' does not exist.");
return 0;
}
string queryStringParameter(XMLElement* node, string name) {
string queryStringParameter(XMLElement* node, string name)
{
XMLElement* element;
for (element = node->FirstChildElement("parameter"); element != NULL;
element = element->NextSiblingElement("parameter"))
@@ -101,7 +105,7 @@ string queryStringParameter(XMLElement* node, string name) {
}
}
reportFatal("Query XML","Parameter '" + name +"' does not exist.");
reportFatal("Query XML", "Parameter '" + name + "' does not exist.");
return 0;
}
@@ -109,8 +113,29 @@ void loadXML(string uri, XMLDocument& doc)
{
XMLError error = doc.LoadFile(uri.c_str());
if (error) {
if (error)
{
reportFatal("Configuration", "Error loading xml from: " + uri);
}
}
string loadTextFileContents(string filename)
{
ifstream in(filename.c_str(), ios::in | ios::binary);
if (in)
{
string contents;
in.seekg(0, ios::end);
contents.resize(in.tellg());
in.seekg(0, ios::beg);
in.read(&contents[0], contents.size());
in.close();
return (contents);
}
else
{
reportFatal("Error loading file", "Could not load textfile from " + filename);
return "";
}
}

View File

@@ -41,6 +41,7 @@ bool isIn(const T& value, const std::vector<T>& collection)
void reportFatal(std::string sender, std::string message);
std::string phaseNameToString(tlm::tlm_phase phase);
std::string loadTextFileContents(std::string filename);
void loadXML(std::string uri, tinyxml2::XMLDocument& doc);
bool parameterExists(tinyxml2::XMLElement* node, std::string name);

View File

@@ -29,6 +29,12 @@ bool operator !=(const Thread& lhs, const Thread& rhs)
return !(lhs == rhs);
}
bool operator <(const Thread& lhs, const Thread& rhs)
{
return lhs.ID() < rhs.ID();
}
bool operator ==(const Channel& lhs, const Channel& rhs)
{
return lhs.ID() == rhs.ID();
@@ -88,3 +94,4 @@ bool operator !=(const Column& lhs, const Column& rhs)
{
return !(lhs == rhs);
}

View File

@@ -115,6 +115,7 @@ private:
bool operator==(const Thread &lhs, const Thread &rhs);
bool operator!=(const Thread &lhs, const Thread &rhs);
bool operator<(const Thread &lhs, const Thread &rhs);
bool operator==(const Channel &lhs, const Channel &rhs);
bool operator!=(const Channel &lhs, const Channel &rhs);

View File

@@ -67,7 +67,7 @@ BankGroup getBankGroup(Bank bank)
for (unsigned int bank = 0; bank < Configuration::getInstance().NumberOfBanks; bank++)
{
unsigned int group = bank / Configuration::getInstance().NumberOfBankGroups;
unsigned int group = bank % Configuration::getInstance().NumberOfBankGroups;
bankgroups.insert(std::pair<Bank, BankGroup>(Bank(bank), BankGroup(group)));
}
}

View File

@@ -29,7 +29,8 @@ gp* Fifo::getTransactionForBank(Bank bank)
void Fifo::popTransactionForBank(Bank bank, gp* payload)
{
sc_assert(hasTransactionForBank(bank));
sc_assert(DramExtension::getExtension(payload).getBank() == bank);
buffer[bank].pop_front();
}

View File

@@ -8,8 +8,8 @@ using namespace core;
namespace scheduler {
FR_FCFS::FR_FCFS(core::ControllerCore& controller, bool refreshAware, bool adaptiveOpenPage) :
controllerBankstates(controller.state.bankStates), refreshAware(refreshAware), adaptiveOpenPage(
FR_FCFS::FR_FCFS(const core::BankStates& bankstates, bool useExternalStates, bool adaptiveOpenPage) :
externalBankstates(bankstates), useExternalStates(useExternalStates), adaptiveOpenPage(
adaptiveOpenPage)
{
}
@@ -23,16 +23,34 @@ bool FR_FCFS::hasTransactionForBank(Bank bank)
return !buffer[bank].empty();
}
bool FR_FCFS::isEmpty()
{
for(unsigned int i = 0; i < Configuration::getInstance().NumberOfBanks;++i)
{
if(!buffer[Bank(i)].empty())
return false;
}
return true;
}
void FR_FCFS::schedule(gp* payload)
{
buffer[DramExtension::getExtension(payload).getBank()].emplace_back(payload);
}
void FR_FCFS::schedule(std::vector<gp*> payloads)
{
for(gp* payload: payloads)
schedule(payload);
}
gp* FR_FCFS::getTransactionForBank(Bank bank)
{
sc_assert(hasTransactionForBank(bank));
Row openRowOnBank = (refreshAware) ? controllerBankstates.getRowInRowBuffer(bank) : internalBankstates.getRowInRowBuffer(bank);
Row openRowOnBank = (useExternalStates) ? externalBankstates.getRowInRowBuffer(bank) : internalBankstates.getRowInRowBuffer(bank);
auto rowHits = findRowHits(bank, openRowOnBank);
gp* result = rowHits.empty() ? buffer[bank].front() : rowHits.front();
@@ -65,6 +83,15 @@ gp* FR_FCFS::getTransactionForBank(Bank bank)
}
}
gp* FR_FCFS::popOldest(Bank bank)
{
assert(hasTransactionForBank(bank));
gp* result = buffer[bank].front();
buffer[bank].pop_front();
return result;
}
std::vector<gp*> FR_FCFS::findRowHits(Bank bank, Row row)
{
vector<gp*> found;
@@ -78,11 +105,11 @@ std::vector<gp*> FR_FCFS::findRowHits(Bank bank, Row row)
void FR_FCFS::popTransactionForBank(Bank bank, gp* payload)
{
sc_assert(
hasTransactionForBank(bank) && bank == DramExtension::getExtension(payload).getBank());
sc_assert(DramExtension::getExtension(payload).getBank() == bank);
buffer[bank].remove(payload);
if (!refreshAware)
if (!useExternalStates)
{
internalBankstates.openRowInRowBuffer(bank, DramExtension::getExtension(payload).getRow());
}

View File

@@ -5,13 +5,14 @@
#include "../core/ControllerCore.h"
#include <list>
#include <map>
#include <vector>
namespace scheduler {
class FR_FCFS : public Scheduler
{
public:
FR_FCFS(core::ControllerCore& controller,bool refreshAware, bool adaptiveOpenPage);
FR_FCFS(const core::BankStates& bankstates, bool refreshAware, bool adaptiveOpenPage);
virtual ~FR_FCFS();
virtual bool hasTransactionForBank(Bank bank) override;
@@ -19,12 +20,17 @@ public:
virtual gp* getTransactionForBank(Bank bank) override;
virtual void popTransactionForBank(Bank bank, gp* payload) override;
//used by PAR_BS
void schedule (std::vector<gp*> payloads);
gp* popOldest(Bank bank);
bool isEmpty();
private:
std::vector<gp*> findRowHits(Bank bank, Row row);
std::map<Bank,std::list<gp*>> buffer;
const core::BankStates& controllerBankstates;
const core::BankStates& externalBankstates;
core::BankStates internalBankstates;
bool refreshAware;
bool useExternalStates;
bool adaptiveOpenPage;
};

View File

@@ -0,0 +1,113 @@
/*
* PARBS.cpp
*
* Created on: Apr 9, 2014
* Author: robert
*/
#include "PARBS.h"
#include "../core/configuration/Configuration.h"
#include "../common/dramExtension.h"
#include "map"
#include "ThreadLoad.h"
#include <algorithm>
namespace scheduler {
using namespace std;
using namespace core;
PAR_BS::PAR_BS(const core::BankStates& bankstates, bool useExternalBankstates, unsigned int capsize) :
externalBankstates(bankstates), useExternalBankstates(useExternalBankstates), capsize(capsize)
{
if (useExternalBankstates)
{
batch = new FR_FCFS(externalBankstates, true, false);
buffer = new FR_FCFS(externalBankstates, true, false);
}
else
{
batch = new FR_FCFS(internalBankstates, true, false);
buffer = new FR_FCFS(internalBankstates, true, false);
}
}
PAR_BS::~PAR_BS()
{
}
bool PAR_BS::hasTransactionForBank(Bank bank)
{
return batch->hasTransactionForBank(bank) || buffer->hasTransactionForBank(bank);
}
void PAR_BS::schedule(gp* payload)
{
buffer->schedule(payload);
}
gp* PAR_BS::getTransactionForBank(Bank bank)
{
assert(hasTransactionForBank(bank));
if (batch->isEmpty())
{
formBatch();
sc_assert(!batch->isEmpty());
}
//prioritize batch first
if (batch->hasTransactionForBank(bank))
{
return batch->getTransactionForBank(bank);
}
else
{
return buffer->getTransactionForBank(bank);
}
}
void PAR_BS::popTransactionForBank(Bank bank, gp* payload)
{
sc_assert(DramExtension::getExtension(payload).getBank() == bank);
buffer->popTransactionForBank(bank, payload);
batch->popTransactionForBank(bank, payload);
if (!useExternalBankstates)
{
internalBankstates.openRowInRowBuffer(bank, DramExtension::getExtension(payload).getRow());
}
}
void PAR_BS::formBatch()
{
map<Thread, ThreadLoad> loads;
for (unsigned int b = 0; b < Configuration::getInstance().NumberOfBanks; ++b)
{
Bank bank(b);
for (unsigned int i = 0; i < capsize && buffer->hasTransactionForBank(bank); i++)
{
gp* payload = buffer->popOldest(bank);
loads[DramExtension::getExtension(payload).getThread()].addTransaction(payload);
}
}
vector<ThreadLoad*> sortedLoads;
for (auto& threadLoadPair : loads)
{
sortedLoads.push_back(&threadLoadPair.second);
}
sort(sortedLoads.begin(), sortedLoads.end(), LoadPointerComparer());
for (auto& load : sortedLoads)
{
batch->schedule(load->getTransactions());
}
}
} /* namespace core */

View File

@@ -0,0 +1,38 @@
/*
* PARBS.h
*
* Created on: Apr 9, 2014
* Author: robert
*/
#ifndef PARBS_H_
#define PARBS_H_
#include "Scheduler.h"
#include "../core/ControllerCore.h"
#include "Fr_Fcfs.h"
namespace scheduler {
class PAR_BS : public Scheduler
{
public:
PAR_BS(const core::BankStates& bankstates, bool useExternalBankstates, unsigned int capsize);
virtual ~PAR_BS();
virtual bool hasTransactionForBank(Bank bank) override;
virtual void schedule(gp* payload) override;
virtual gp* getTransactionForBank(Bank bank) override;
virtual void popTransactionForBank(Bank bank, gp* payload) override;
private:
void formBatch();
bool useExternalBankstates;
const core::BankStates& externalBankstates;
core::BankStates internalBankstates;
FR_FCFS *batch;
FR_FCFS *buffer;
unsigned int capsize;
};
} /* scheduler core */
#endif /* PARBS_H_ */

View File

@@ -0,0 +1,71 @@
/*
* ThreadLoad.cpp
*
* Created on: Apr 9, 2014
* Author: robert
*/
#include "ThreadLoad.h"
namespace scheduler {
using namespace std;
ThreadLoad::ThreadLoad()
{
// TODO Auto-generated constructor stub
}
ThreadLoad::~ThreadLoad()
{
// TODO Auto-generated destructor stub
}
unsigned int ThreadLoad::getMaxBankLoad() const
{
unsigned int maxLoad = 0;
for (auto& bankVectorPair : load)
{
if (bankVectorPair.second.size() > maxLoad)
maxLoad = bankVectorPair.second.size();
}
return maxLoad;
}
unsigned int ThreadLoad::getTotalLoad() const
{
unsigned int totalLoad = 0;
for (auto& bankVectorPair : load)
{
totalLoad += bankVectorPair.second.size();
}
return totalLoad;
}
void ThreadLoad::addTransaction(gp* payload)
{
load[DramExtension::getExtension(payload).getBank()].push_back(payload);
}
bool operator<(const ThreadLoad& lhs, const ThreadLoad& rhs)
{
if (lhs.getMaxBankLoad() < rhs.getMaxBankLoad())
return true;
else if (lhs.getMaxBankLoad() == rhs.getMaxBankLoad())
return lhs.getTotalLoad() < rhs.getTotalLoad();
else
return false;
}
vector<gp*> ThreadLoad::getTransactions()
{
vector<gp*> result;
for (auto& bankVectorPair : load)
{
result.insert(result.end(), bankVectorPair.second.begin(), bankVectorPair.second.end());
}
return result;
}
} /* namespace scheduler */

View File

@@ -0,0 +1,44 @@
/*
* ThreadLoad.h
*
* Created on: Apr 9, 2014
* Author: robert
*/
#ifndef THREADLOAD_H_
#define THREADLOAD_H_
#include <map>
#include <tlm.h>
#include "../common/dramExtension.h"
namespace scheduler {
typedef tlm::tlm_generic_payload gp;
class ThreadLoad
{
public:
ThreadLoad();
virtual ~ThreadLoad();
unsigned int getMaxBankLoad() const;
unsigned int getTotalLoad() const;
void addTransaction(gp* payload);
std::vector<gp*> getTransactions();
private:
std::map<Bank,std::vector<gp*>> load;
};
bool operator< (const ThreadLoad &lhs, const ThreadLoad &rhs);
struct LoadPointerComparer {
bool operator()(const ThreadLoad* l, const ThreadLoad* r) {
return *l < *r;
}
};
} /* namespace scheduler */
#endif /* THREADLOAD_H_ */

View File

@@ -26,6 +26,7 @@
#include "../scheduler/Scheduler.h"
#include "../scheduler/Fifo.h"
#include "../scheduler/Fr_Fcfs.h"
#include "../scheduler/PARBS.h"
using namespace std;
using namespace tlm;
@@ -61,10 +62,24 @@ public:
void buildScheduler()
{
string selectedScheduler = Configuration::getInstance().Scheduler;
if (selectedScheduler == "FR_FCFS")
scheduler = new FR_FCFS(*controller,
{
if(Configuration::getInstance().RefreshAwareScheduling)
cout << "Building refresh aware scheduler" << std::endl;
else
cout << "Building refresh un-aware scheduler" << std::endl;
scheduler = new FR_FCFS(controller->state.bankStates,
Configuration::getInstance().RefreshAwareScheduling,
Configuration::getInstance().AdaptiveOpenPagePolicy);
}
else if (selectedScheduler == "PAR_BS")
{
scheduler = new PAR_BS(controller->state.bankStates,
Configuration::getInstance().RefreshAwareScheduling,
Configuration::getInstance().Capsize);
}
else if (selectedScheduler == "FIFO")
scheduler = new Fifo();
else
@@ -90,7 +105,7 @@ public:
{
case Command::Read:
rec.recordPhase(payload, BEGIN_RD, command.getStart());
dataStrobe = command.getIntervalOnDataStrobe();
dataStrobe = command.getIntervalOnDataStrobe();
rec.updateDataStrobe(dataStrobe.start, dataStrobe.end, payload);
rec.recordPhase(payload, END_RD, command.getEnd());
@@ -99,7 +114,7 @@ public:
break;
case Command::ReadA:
rec.recordPhase(payload, BEGIN_RDA, command.getStart());
dataStrobe = command.getIntervalOnDataStrobe();
dataStrobe = command.getIntervalOnDataStrobe();
rec.updateDataStrobe(dataStrobe.start, dataStrobe.end, payload);
rec.recordPhase(payload, END_RDA, command.getEnd());
@@ -108,7 +123,7 @@ public:
break;
case Command::Write:
rec.recordPhase(payload, BEGIN_WR, command.getStart());
dataStrobe = command.getIntervalOnDataStrobe();
dataStrobe = command.getIntervalOnDataStrobe();
rec.updateDataStrobe(dataStrobe.start, dataStrobe.end, payload);
rec.recordPhase(payload, END_WR, command.getEnd());
@@ -117,7 +132,7 @@ public:
break;
case Command::WriteA:
rec.recordPhase(payload, BEGIN_WRA, command.getStart());
dataStrobe = command.getIntervalOnDataStrobe();
dataStrobe = command.getIntervalOnDataStrobe();
rec.updateDataStrobe(dataStrobe.start, dataStrobe.end, payload);
rec.recordPhase(payload, END_WRA, command.getEnd());

View File

@@ -39,7 +39,7 @@ Simulation::Simulation(sc_module_name name, string pathToResources, string trace
for (auto& d : devices)
{
if (d.burstLength == 0)
d.burstLength = 8;
d.burstLength = Configuration::getInstance().BurstLength;
}
player1 = new TracePlayer<>("player1", pathToResources + string("traces/") + devices[0].trace,

View File

@@ -29,7 +29,7 @@ struct DramSetup
struct Device
{
Device():trace("empty.stl"), burstLength(0){}
Device(std::string trace, unsigned int burstLength = 0) : trace(trace), burstLength(burstLength)
Device(std::string trace, unsigned int burstLength = 4) : trace(trace), burstLength(burstLength)
{
}
std::string trace;

View File

@@ -73,6 +73,7 @@ bool batchSetups(pair<string, string> tracePair, vector<DramSetup> setups)
int sc_main(int argc, char **argv)
{
sc_set_time_resolution(1, SC_PS);
resources = pathOfFile(argv[0]) + string("/../resources/");