Adapt readme to previous changes.
This commit is contained in:
@@ -155,7 +155,11 @@ TraceSetup::TraceSetup(const std::string &uri,
|
||||
if (!value["minAddress"].empty())
|
||||
{
|
||||
if (value["minAddress"].is_number_unsigned())
|
||||
{
|
||||
minAddress = value["minAddress"];
|
||||
if (minAddress > Configuration::getInstance().memSpec->getSimMemSizeInBytes() - 1)
|
||||
SC_REPORT_FATAL("TraceSetup", "minAddress is out of range.");
|
||||
}
|
||||
else
|
||||
SC_REPORT_FATAL("TraceSetup", "minAddress is not an unsigned number.");
|
||||
}
|
||||
@@ -164,7 +168,11 @@ TraceSetup::TraceSetup(const std::string &uri,
|
||||
if (!value["maxAddress"].empty())
|
||||
{
|
||||
if (value["maxAddress"].is_number_unsigned())
|
||||
{
|
||||
maxAddress = value["maxAddress"];
|
||||
if (maxAddress > Configuration::getInstance().memSpec->getSimMemSizeInBytes() - 1)
|
||||
SC_REPORT_FATAL("TraceSetup", "maxAddress is out of range.");
|
||||
}
|
||||
else
|
||||
SC_REPORT_FATAL("TraceSetup", "maxAddress is not an unsigned number.");
|
||||
}
|
||||
|
||||
25
README.md
25
README.md
@@ -134,7 +134,16 @@ The JSON code below shows an example configuration:
|
||||
"addressDistribution": "random",
|
||||
"seed": 123456,
|
||||
"maxPendingReadRequests": 8,
|
||||
"maxPendingWriteRequests": 8
|
||||
"maxPendingWriteRequests": 8,
|
||||
"minAddress": 16384,
|
||||
"maxAddress": 32767
|
||||
},
|
||||
{
|
||||
"clkMhz": 1000,
|
||||
"type": "hammer",
|
||||
"name": "ham0",
|
||||
"numRequests": 4000,
|
||||
"rowIncrement": 2097152
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -149,12 +158,13 @@ Fields Description:
|
||||
- "mcconfig": memory controller configuration file
|
||||
- "tracesetup": The trace setup is only used in standalone mode. In library mode or gem5 mode the trace setup is ignored. Each device should be added as a json object inside the "tracesetup" array.
|
||||
|
||||
Each **trace setup** device configuration can either be a **trace player** or a **traffic generator**. By not specifing the **type** parameter, the device will act as a **trace player**.
|
||||
All device configurations must define a **clkMhz** (operation frequency of the **traffic initiator**) and a trace file **name** (in case of a trace player this specifies the **trace file** to play; in case of a traffic generator this field is only for identification purposes).
|
||||
Each **trace setup** device configuration can be a **trace player** ("type": "player"), a **traffic generator** ("type": "generator") or a **row hammer generator** ("type": "hammer"). By not specifing the **type** parameter, the device will act as a **trace player**.
|
||||
All device configurations must define a **clkMhz** (operation frequency of the **traffic initiator**) and a **name** (in case of a trace player this specifies the **trace file** to play; in case of a generator this field is only for identification purposes).
|
||||
The **maxPendingReadRequests** and **maxPendingWriteRequests** parameters define the maximum number of outstanding read/write requests. The current implementation delays all memory accesses when one limit is reached. The default value (0) disables the limit.
|
||||
|
||||
A **traffic generator** can be configured to generate **numRequests** requests in total, of which the **rwRatio** field defines the probability of one request being a read request. The **seed** parameter can be used to produce same results for all simulations.
|
||||
The parameter **addressDistribution** can either be set to **"random"** or **"sequential"**. In case of **"sequential"** the additional **addressIncrement** field must be specified, defining the address increments after each request.
|
||||
A **traffic generator** can be configured to generate **numRequests** requests in total, of which the **rwRatio** field defines the probability of one request being a read request. The **seed** parameter can be used to produce identical results for all simulations. **minAddress** and **maxAddress** specify the address range, by default the whole address range is used. The parameter **addressDistribution** can either be set to **"random"** or **"sequential"**. In case of **"sequential"** the additional **addressIncrement** field must be specified, defining the address increment after each request.
|
||||
|
||||
The **row hammer generator** is a special traffic generator that mimics a row hammer attack. It generates **numRequests** alternating read requests to two different addresses. The first address is 0x0, the second address is specified by the **rowIncrement** parameter and should decode to a different row in the same bank. Since only one outstanding request is allowed, the controller cannot perform any reordering, forcing a row switch (precharge and activate) for each access. That way the number of activations on the target rows are maximized.
|
||||
|
||||
Most configuration fields reference other JSON files which contain more specialized chunks of the configuration like a memory specification, an address mapping and a memory controller configuration.
|
||||
|
||||
@@ -335,7 +345,8 @@ An example follows.
|
||||
"RefreshMaxPulledin": 8,
|
||||
"PowerDownPolicy": "NoPowerDown",
|
||||
"Arbiter": "Fifo",
|
||||
"MaxActiveTransactions": 128
|
||||
"MaxActiveTransactions": 128,
|
||||
"RefreshManagement": true
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -380,6 +391,8 @@ An example follows.
|
||||
- "Reorder": based on "Fifo", in addition, the original request order is restored for outgoing responses (separately for each initiator and globally to all channels)
|
||||
- *MaxActiveTransactions* (unsigned int)
|
||||
- maximum number of active transactions per initiator (only applies to "Fifo" and "Reorder" arbiter policy)
|
||||
- *RefreshManagement* (boolean)
|
||||
- enable the sending of refresh management commands when the number of activates to one bank exceeds a certain management threshold (only supported in DDR5 and LPDDR5)
|
||||
|
||||
## DRAMSys with Thermal Simulation
|
||||
|
||||
|
||||
Reference in New Issue
Block a user