Adapt readme to previous changes.

This commit is contained in:
Lukas Steiner
2021-09-30 15:44:05 +02:00
parent 98e6e2be2c
commit 2b43eafa60
2 changed files with 27 additions and 6 deletions

View File

@@ -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.");
}

View File

@@ -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