diff --git a/README.md b/README.md index bac9ac77..990ebf1f 100644 --- a/README.md +++ b/README.md @@ -1,54 +1,53 @@ de.uni-kl.ems.dram.vp.system ============================ -Generic DRAM controller simulator and debug tools related to it. +Generic DRAM controller simulator **DRAMSys** [1] and related tools. -# Basic Setup +## Basic Setup In a terminal window execute the commands that follow. Go to your home directory. -``` +``` bash $ cd ``` Create a directory for your projects. -``` +``` bash $ mkdir projects ``` Clone the repository. -It is possible that you will work with a **fork** of the official codebase. A -fork is a copy of a repository. In that case, after pushing changes into your -copy you should create a **pull request** in order to your supervisor check -and possibly bring your changes to the official codebase. - -In case of doubts about which repository you should clone ask your supervisor. - -``` -$ git clone https://@git.rhrk.uni-kl.de//dram.vp.system.git +``` bash +$ git clone --recursive https://@git.rhrk.uni-kl.de/EIT-Wehn/dram.vp.system.git ``` -Go to the project directory. +The *--recursive* flag tells git to initialize all submodules within the +repository. **DRAMPower** [2] and **tinyxml** are examples third party +repositories that were embedded within the source tree as submodules. +It is possible to work with a copy of the official codebase. The copy is +called **fork**. In that case, after pushing changes into your fork you should +create a **pull request** in order to your supervisor check and possibly bring +your changes to the official codebase. + +``` bash +$ git clone --recursive https://@git.rhrk.uni-kl.de//dram.vp.system.git ``` + +After cloning go to the project directory. + +``` bash $ cd dram.vp.system ``` -Execute the script below. - -``` -$ ./install_prerequisites.sh -``` - - -## With QTCreator +### With QTCreator Execute the *QTCreator*. -``` +``` bash $ qtcreator & ``` @@ -63,13 +62,25 @@ Repeat the procedure above and build the trace analyser project. **File -> Open Project -> dram.vp.sys/analyser/analyser/traceAnalizer.pro** +To speedup the building process one can use the additional **make** option +**-j[jobs]**. The command line below returns a good number to be passed to +make as the number of jobs that can run simultaneously to improve the building +time. -## Without QTCreator +``` bash +$ cat /proc/cpuinfo | grep processor | wc -l +``` + +In the left bar go to **Projects -> Build & Run -> Build Steps -> Make**. +Click in **Details** then **Make arguments** and add **-j** followed by the +number you got. + +### Without QTCreator In case you prefer a command line interface to the QTCreator GUI you can also use **qmake** to generate a Makefile and then compile the project. -``` +``` bash $ cd dram $ mkdir build $ cd build @@ -83,130 +94,175 @@ The **dramSys** executable supports one argument which is a XML file that contains configurable aspects of the desired simulation. If no argument is passed through the command line a default configuration file will be loaded. -The XML code below shows a typical simulation configuration: +The XML code below shows a typic configuration: -``` +``` xml - - - - - - - - - - - - - - - - - voco2.stl - - + + + + + + + + + + + + + + + + + + + + + voco2.stl + + + ``` Some configuration fields reference other XML files which contain more -specialized chunks of the configuration, e.g. memory specification and address -mapping. +specialized chunks of the configuration like memory specification, address +mapping and memory configurations. The XML configuration files are parsed by the program and the configuration details extracted are assigned to the correspondent attributes of the internal configuration structure. - #### Configuration File Sections The main configuration file is divided into self-contained sections, each of these sections is a set of logically related configuration aspects for the simulation. -The list below, which is not intended to be exhaustive, present the -configuration sections and possible configuration fields. +Below are listed the configuration sections and configuration fields. -- Simulator configuration - - Database recording - - Power analysis - - Debug mode +- **Simulator configuration** + - *Debug* (boolean) + - "1": enables debug output on console + - "0": disables debug output + - *DatabaseRecording* (boolean) + - "1": enables trace file recording for the trace analyser tool + - "0": disables trace file recording + - *PowerAnalysis* (boolean) + - "1": enables live power analysis with the DRAMPower tool + - "0": disables power analysis -- Memory specification - - Memory ID: JEDEC_256Mb_WIDEIO_SDR-200_128bit, - MICRON_4Gb_DDR4-2400_8bit_A, ... - - Memory type: WIDEIO_SD, DDR4, ... +- **Memory specification** -- Memory Architecture Specification - - Width - - Number of Banks - - Number of Ranks - - Number of Columns - - Number of Rows - - Data Rate - - Burst Length + A file with memory specifications. This information comes from datasheet and + usually does not change. -- Memory Timing Specification (memory dependent) - - Clock in MHz - - RC - - RCD - - RL - - RP - - RFC - - RAS - - WL - - AL - - DQSCK - - RTP - - WR - - XP - - XPDLL - - XS - - XSDLL - - REFI - - CL - - TAW - - RRD - - CCD - - WTR - - CKE - - CKESR +- **Address Mapping** -- Memory Power Specification + XML files describe the address mapping to be used in the simulation. -- Address Mapping - - Length: address length in bits - - Row: bits used for the row - - Bank: bits used for the bank - - Column: bits used for the column + The file [am_wideio.xml](dram/resources/configs/amconfigs/am_wideio.xml) is + a good example. -- Memory Configuration - - Bankwise Logic - - Open Page Policy - - Maximum Number of Transactions - - Scheduler - - Capacitor size - - Powerdown Mode - - Powerdown Timeout - - Chip seed - - CSV file - - Storage Mode value + ``` xml + + + + + + + + ``` + ![Address Mapping Sample 1](docs/images/am_sample1.png) + + ``` xml + + + + + + + + ``` + + ![Address Mapping Sample 2](docs/images/am_sample2.png) + +- **Memory Configuration** + + The content of [fifo.xml](dram/resources/configs/memconfigs/fifo.xml) is + presented below as an example. + + ``` xml + + + + + + + + + + + + + + ``` + + - *BankwiseLogic* (boolean) + - "1": perform bankwise-refresh [3] and bankwise-powerdown [4] + - "0": do not perform bankwise operations + - *OpenPagePolicy* (boolean) + - "1": use open page precharge policy + - "0": do not use open page precharge policy + - *MaxNrOfTransactions* (unsigned int) + - Maximum number of transactions. + - *Scheduler* (string) + - "FIFO": first in, first out + - "FIFO_STRICT": out-of-order treatment of queue elements not allowed + - "FR_FCFS": first-come, first-served + - *Capsize* (unsigned int) + - Capacitor cell size. + - *PowerDownMode* (enum EPowerDownMode) + - "NoPowerDown": no power down mode (active idle) + - "Staggered": staggered power down policy [5] + - "TimeoutPDN": precharge idle + - "TimeoutSREF": self refresh + - *Buswidth* (unsigned int) + - Bus width in bits. + - *ReadWriteGrouping* (boolean) + - "1": enable read writing grouping + - "0": disable read writing grouping + - *ReorderBuffer* (boolean) + - "1": use reordering buffer + - "0": do not use reordering buffer + - *ErrorChipSeed* (unsigned int) + - Seed to initialize the random error generator. + - *ErrorCSVFile* (string) + - CSV file with error injection information. + - *ErrorStoreMode* (enum ErrorStorageMode) + - "NoStorage": no storage + - "Store": store data without error model + - "ErrorModel": store data with error model [6] + +- **Trace setups** + - *id* + - trace setup id + - *clkMhz* + - speed of the trace player Some attributes are self-explanatory while others require some previous knowhow of memory technologies or some knowledge of the simulator source code. -## DRAMSys Resources +Resources of the simulator are available in the **resources** directory its +sub-directories. -Some resources of the simulator are available in the **resources** directory -its sub-directories. - -``` +``` bash $ cd /projects/dram.vp.system/dram/resources ``` -A short description of the content each directory follows. +A description of the content each directory follows. - **resources** - **configs**: XML files used for configure specific details of the simulation. @@ -220,3 +276,27 @@ A short description of the content each directory follows. - **traces**: trace files for simulations. They contain accesses to memory in certain known scenarios. +#### References + +[1] TLM Modelling of 3D Stacked Wide I/O DRAM Subsystems, A Virtual Platform for Memory Controller Design Space Exploration +M. Jung, C. Weis, N. Wehn, K. Chandrasekar. International Conference on High-Performance and Embedded Architectures and Compilers 2013 (HiPEAC), Workshop on: Rapid Simulation and Performance Evaluation: Methods and Tools (RAPIDO), January, 2013, Berlin. + +[2] DRAMPower: Open-source DRAM Power & Energy Estimation Tool +Karthik Chandrasekar, Christian Weis, Yonghui Li, Sven Goossens, Matthias Jung, Omar Naji, Benny Akesson, Norbert Wehn, and Kees Goossens +URL: http://www.drampower.info + +[3] Energy Optimization in 3D MPSoCs with Wide-I/O DRAM +M. Sadri, M. Jung, C. Weis, N. Wehn, L. Benini. Conference Design, Automation and Test in Europe (DATE), March, 2014, Dresden, Germany. + +[4] DRAMSys: A flexible DRAM Subsystem Design Space Exploration Framework +M. Jung, C. Weis, N. Wehn. Accepted for publication, IPSJ Transactions on System LSI Design Methodology (T-SLDM), October, 2015. + +[5] Optimized Active and Power-Down Mode Refresh Control in 3D-DRAMs +M. Jung, M. Sadri, C. Weis, N. Wehn, L. Benini., VLSI-SoC, October, 2014, Playa del Carmen, Mexico. + +[6] Retention Time Measurements and Modelling of Bit Error Rates of WIDE-I/O DRAM in MPSoCs +C. Weis, M. Jung, P. Ehses, C. Santos, P. Vivet, S. Goossens, M. Koedam, N. Wehn. Accepted for publication, IEEE Conference Design, Automation and Test in Europe (DATE), March, 2015, Grenoble, France + +[7] http://www.uni-kl.de/3d-dram/publications/ + + diff --git a/analyzer/analyzer/businessObjects/timespan.h b/analyzer/analyzer/businessObjects/timespan.h index 52595666..c54f99b0 100644 --- a/analyzer/analyzer/businessObjects/timespan.h +++ b/analyzer/analyzer/businessObjects/timespan.h @@ -39,7 +39,6 @@ #define TIMESPAN_H #include #include "tracetime.h" -#include "thirdParty/eng_format.h" class Timespan { diff --git a/analyzer/analyzer/businessObjects/tracetime.h b/analyzer/analyzer/businessObjects/tracetime.h index b0f3171f..27fc880b 100644 --- a/analyzer/analyzer/businessObjects/tracetime.h +++ b/analyzer/analyzer/businessObjects/tracetime.h @@ -38,7 +38,6 @@ #ifndef TRACETIME_H #define TRACETIME_H #include -#include "thirdParty/eng_format.h" //time in nanoseconds typedef long long traceTime; diff --git a/analyzer/analyzer/presentation/util/engineeringScaleDraw.h b/analyzer/analyzer/presentation/util/engineeringScaleDraw.h index 2affe781..31416ffd 100644 --- a/analyzer/analyzer/presentation/util/engineeringScaleDraw.h +++ b/analyzer/analyzer/presentation/util/engineeringScaleDraw.h @@ -39,7 +39,6 @@ #define ENGINEERINGSCALEDRAW_H #include #include -#include "thirdParty/eng_format.h" #include "businessObjects/tracetime.h" class EngineeringScaleDraw : public QwtScaleDraw diff --git a/analyzer/analyzer/thirdParty/eng_formant.cpp b/analyzer/analyzer/thirdParty/eng_formant.cpp deleted file mode 100644 index eba663b8..00000000 --- a/analyzer/analyzer/thirdParty/eng_formant.cpp +++ /dev/null @@ -1,262 +0,0 @@ -// Copyright (C) 2005-2009 by Jukka Korpela -// Copyright (C) 2009-2013 by David Hoerl -// Copyright (C) 2013 by Martin Moene -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#include "eng_format.h" - -#include -#include -#include - -#include -#include -#include - -/* - * Note: using fabs() and other math functions in global namespace for - * best compiler coverage. - */ - -/* - * Note: micro, µ, may not work everywhere, so you can define a glyph yourself: - */ -#ifndef ENG_FORMAT_MICRO_GLYPH -# define ENG_FORMAT_MICRO_GLYPH "µ" -#endif - -/* - * Note: if not using signed at the computation of prefix_end below, - * VC2010 -Wall issues a warning about unsigned and addition overflow. - * Hence the cast to signed int here. - */ -#define ENG_FORMAT_DIMENSION_OF(a) ( static_cast( sizeof(a) / sizeof(0[a]) ) ) - -eng_prefixed_t eng_prefixed; -eng_exponential_t eng_exponential; - -namespace -{ - -char const * const prefixes[/*exp*/][2][9] = -{ - { - { "", "m", ENG_FORMAT_MICRO_GLYPH - , "n", "p", "f", "a", "z", "y", }, - { "", "k", "M", "G", "T", "P", "E", "Z", "Y", }, - }, - { - { "e0", "e-3", "e-6", "e-9", "e-12", "e-15", "e-18", "e-21", "e-24", }, - { "e0", "e3", "e6", "e9", "e12", "e15", "e18", "e21", "e24", }, - }, -}; - -const int prefix_count = ENG_FORMAT_DIMENSION_OF( prefixes[false][false] ); - -#if defined( _MSC_VER ) - -template -long lrint( T const x ) -{ - return static_cast( x ); -} - -#endif - -int sign( int const value ) -{ - return value == 0 ? +1 : value / abs( value ); -} - -bool is_zero( double const value ) -{ -#if __cplusplus >= 201103L - return FP_ZERO == fpclassify( value ); -#else - // deliberately compare literally: - return 0.0 == value; -#endif -} - -bool is_nan( double const value ) -{ -#if __cplusplus >= 201103L - return isnan( value ); -#else - // deliberately return false for now: - return false; -#endif -} - -bool is_inf( double const value ) -{ -#if __cplusplus >= 201103L - return isinf( value ); -#else - // deliberately return false for now: - return false; -#endif -} - -long degree_of( double const value ) -{ - return is_zero( value ) ? 0 : lrint( floor( log10( fabs( value ) ) / 3) ); -} - -int precision( double const scaled, int const digits ) -{ - // MSVC6 requires -2 * DBL_EPSILON; - // g++ 4.8.1: ok with -1 * DBL_EPSILON - - return is_zero( scaled ) ? digits - 1 : digits - log10( fabs( scaled ) ) - 2 * DBL_EPSILON; -} - -std::string prefix_or_exponent( bool const exponential, int const degree ) -{ - return std::string( exponential || 0 == degree ? "" : " " ) + prefixes[ exponential ][ sign(degree) > 0 ][ abs( degree ) ]; -} - -std::string exponent( int const degree ) -{ - std::ostringstream os; - os << "e" << 3 * degree; - return os.str(); -} - -/* - * engineering to exponent notation conversion. - */ -std::string engineering_to_exponent( std::string text ); - -} // anonymous namespace - -/** - * convert real number to prefixed or exponential notation, optionally followed by a unit. - */ -std::string -to_engineering_string( double const value, int const digits, bool exponential, std::string const unit /*= ""*/ ) -{ - if ( is_nan( value ) ) return "NaN"; - else if ( is_inf( value ) ) return "INFINITE"; - - const int degree = degree_of( value ); - - std::string factor; - - if ( abs( degree ) < prefix_count ) - { - factor = prefix_or_exponent( exponential, degree ); - } - else - { - exponential = true; - factor = exponent( degree ); - } - - std::ostringstream os; - - const double scaled = value * pow( 1000.0, -degree ); - - const std::string space = ( 0 == degree || exponential ) && unit.length() ? " ":""; - - os << std::fixed << std::setprecision( precision( scaled, digits ) ) << scaled << factor << space << unit; - - return os.str(); -} - -/** - * convert the output of to_engineering_string() into a double. - */ -double from_engineering_string( std::string const text ) -{ - return strtod( engineering_to_exponent( text ).c_str(), NULL ); -} - -/** - * step a value by the smallest possible increment. - */ -std::string step_engineering_string( std::string const text, int digits, bool const exponential, bool const positive ) -{ - const double value = from_engineering_string( text ); - - if ( digits < 3 ) - { - digits = 3; - } - - // correctly round to desired precision - const int expof10 = is_zero(value) ? 0 : lrint( floor( log10( value ) ) ); - const int power = expof10 + 1 - digits; - - const double inc = pow( 10.0, power ) * ( positive ? +1 : -1 ); - const double ret = value + inc; - - return to_engineering_string( ret, digits, exponential ); -} - -namespace -{ - -/* - * "k" => "1e3" - */ -std::string prefix_to_exponent( std::string const pfx ) -{ - for ( int i = 0; i < 2; ++i ) - { - for( int k = 0; k < prefix_count; ++k ) - { - if ( pfx == prefixes[0][i][k] ) - { - return prefixes[1][i][k] ; - } - } - } - return ""; -} - -/* - * Convert engineering presentation to presentation with exponent. - * - * The engineering presentation should not contain a unit, as the first letter - * is interpreted as an SI prefix, e.g. "1 T" is 1e12, not 1 (Tesla). - * - * "1.23 M" => 1.23e+6 - * "1.23 kPa" => 1.23e+3 (ok, but not recommended) - * "1.23 Pa" => 1.23e+12 (not what's intended!) - */ -std::string engineering_to_exponent( std::string const text ) -{ - std::string::size_type pos = text.find( ' ' ); - - if ( std::string::npos == pos ) - { - return text; - } - - const std::string magnitude = text.substr( 0, pos ); - const std::string prefix = text.substr( pos + 1, 1 ); - - return magnitude + prefix_to_exponent( prefix ); -} - -} // anonymous namespace - -// end of file diff --git a/analyzer/analyzer/thirdParty/eng_format.h b/analyzer/analyzer/thirdParty/eng_format.h deleted file mode 100644 index 1e528057..00000000 --- a/analyzer/analyzer/thirdParty/eng_format.h +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright (C) 2005-2009 by Jukka Korpela -// Copyright (C) 2009-2013 by David Hoerl -// Copyright (C) 2013 by Martin Moene -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#ifndef ENG_FORMAT_H_INCLUDED -#define ENG_FORMAT_H_INCLUDED - -#include - -/** - * convert a double to the specified number of digits in SI (prefix) or - * exponential notation, optionally followed by a unit. - */ -std::string -to_engineering_string( double value, int digits, bool exponential, std::string unit = "" ); - -/** - * convert the output of to_engineering_string() into a double. - */ -double -from_engineering_string( std::string text ); - -/** - * step a value by the smallest possible increment. - */ -std::string -step_engineering_string( std::string text, int digits, bool exponential, bool increment ); - -// -// Extended interface: -// - -/** - * \var eng_prefixed - * \brief select SI (prefix) presentation: to_engineering_string(), step_engineering_string(). - */ - -/** - * \var eng_exponential - * \brief select exponential presentation: to_engineering_string(), step_engineering_string(). - */ - -extern struct eng_prefixed_t {} eng_prefixed; -extern struct eng_exponential_t {} eng_exponential; - -/** - * \var eng_increment - * \brief let step_engineering_string() make a postive step. - */ - -/** - * \var eng_decrement - * \brief let step_engineering_string() make a negative step. - */ - -const bool eng_increment = true; -const bool eng_decrement = false; - -/** - * convert a double to the specified number of digits in SI (prefix) notation, - * optionally followed by a unit. - */ -inline std::string -to_engineering_string( double value, int digits, eng_prefixed_t, std::string unit = "" ) -{ - return to_engineering_string( value, digits, false, unit ); -} - -/** - * convert a double to the specified number of digits in exponential notation, - * optionally followed by a unit. - */ -inline std::string -to_engineering_string( double value, int digits, eng_exponential_t, std::string unit = "" ) -{ - return to_engineering_string( value, digits, true, unit ); -} - -/** - * step a value by the smallest possible increment, using SI notation. - */ -inline std::string -step_engineering_string( std::string text, int digits, eng_prefixed_t, bool increment ) -{ - return step_engineering_string( text, digits, false, increment ); -} - -/** - * step a value by the smallest possible increment, using exponential notation. - */ -inline std::string -step_engineering_string( std::string text, int digits, eng_exponential_t, bool increment ) -{ - return step_engineering_string( text, digits, true, increment ); -} - -#endif // ENG_FORMAT_H_INCLUDED diff --git a/analyzer/analyzer/traceAnalyzer.pro b/analyzer/analyzer/traceAnalyzer.pro index bccb9571..3c5834d0 100644 --- a/analyzer/analyzer/traceAnalyzer.pro +++ b/analyzer/analyzer/traceAnalyzer.pro @@ -31,7 +31,6 @@ SOURCES += main.cpp\ presentation/traceplotitem.cpp \ gototimedialog.cpp \ presentation/traceplot.cpp \ - thirdParty/eng_formant.cpp \ tracefiletab.cpp \ presentation/pornotracescroller.cpp \ traceanalyzer.cpp \ @@ -63,7 +62,6 @@ HEADERS += businessObjects/transaction.h \ presentation/traceplotitem.h \ gototimedialog.h \ presentation/traceplot.h \ - thirdParty/eng_format.h \ tracefiletab.h \ presentation/pornotracescroller.h \ traceanalyzer.h \ diff --git a/docs/images/am_sample1.svg b/docs/images/am_sample1.svg new file mode 100644 index 00000000..781c3511 --- /dev/null +++ b/docs/images/am_sample1.svg @@ -0,0 +1,1809 @@ + + + +image/svg+xml + + + + +R12 + + +R11 + + +R10 + + +R9 + + +R8 + + +R7 + + +R6 + + +R5 + + +R4 + + +R3 + + +R2 + + +R1 + + +R0 + + +ch0 + + +C6 + + +C5 + + +C4 + + +C3 + + +C2 + + +C1 + + +C0 + + +B2 + + +B1 + + +B0 + + +b3 + + +b2 + + +b1 + + +b0 + + +ch1 + +Mapping + \ No newline at end of file diff --git a/docs/images/am_sample2.svg b/docs/images/am_sample2.svg new file mode 100644 index 00000000..610b1829 --- /dev/null +++ b/docs/images/am_sample2.svg @@ -0,0 +1,1868 @@ + + + +image/svg+xml + + + + + +R12 + + + +R11 + + + +R10 + + + +R9 + + + +R8 + + + +R7 + + + +R6 + + + +R5 + + + +R4 + + + +R3 + + + +R2 + + + +R1 + + + +R0 + + + +ch0 + + + +C6 + + + +C5 + + + +C4 + + + +C3 + + + +C2 + + + +C1 + + + +C0 + + + +B2 + + + +B1 + + + +B0 + + + +b3 + + + +b2 + + + +b1 + + + +b0 + + + +ch1 + + + +Mapping + \ No newline at end of file diff --git a/dram/resources/configs/memconfigs/fifo.xml b/dram/resources/configs/memconfigs/fifo.xml index 6d1fd110..4f43d08a 100644 --- a/dram/resources/configs/memconfigs/fifo.xml +++ b/dram/resources/configs/memconfigs/fifo.xml @@ -2,7 +2,7 @@ - + diff --git a/dram/src/controller/core/ControllerCore.cpp b/dram/src/controller/core/ControllerCore.cpp index 5b54ee7b..7c11943f 100644 --- a/dram/src/controller/core/ControllerCore.cpp +++ b/dram/src/controller/core/ControllerCore.cpp @@ -112,6 +112,7 @@ ControllerCore::~ControllerCore() { delete commandChecker[Command::Activate]; delete commandChecker[Command::Precharge]; + delete commandChecker[Command::PrechargeAll]; delete commandChecker[Command::Read]; delete commandChecker[Command::Write]; delete commandChecker[Command::AutoRefresh]; diff --git a/dram/src/controller/core/configuration/Configuration.cpp b/dram/src/controller/core/configuration/Configuration.cpp index 657a42ff..8b1d926f 100644 --- a/dram/src/controller/core/configuration/Configuration.cpp +++ b/dram/src/controller/core/configuration/Configuration.cpp @@ -106,11 +106,6 @@ void Configuration::setParameter(std::string name, std::string value) Buswidth = string2int(value); else if(name == "ReadWriteGrouping") ReadWriteGrouping = string2bool(value); - //removed because of Peters error model TODO clean up! - //else if(name == "ModelStorage") - // ModelStorage = string2bool(value); - //else if(name == "ModelErrorInjection") - // ModelErrorInjection = string2bool(value); else if(name == "ReorderBuffer") ReorderBuffer = string2bool(value); diff --git a/dram/src/controller/core/configuration/Configuration.h b/dram/src/controller/core/configuration/Configuration.h index dfdeeb7b..7023dfed 100644 --- a/dram/src/controller/core/configuration/Configuration.h +++ b/dram/src/controller/core/configuration/Configuration.h @@ -66,8 +66,6 @@ struct Configuration EPowerDownMode PowerDownMode = EPowerDownMode::Staggered; unsigned int Buswidth = 128; bool ReadWriteGrouping = false; - bool ModelStorage = false; - bool ModelErrorInjection = false; bool ReorderBuffer = false; //SimConfig