I'm currently working on simulating non-volatile memory architectures using
NVMain, with a focus on the energy characteristics of ReRAM.

While tracing the energy calculation logic in SubArray.cpp, I came across
behavior that I found somewhat confusing and wanted to confirm whether my
understanding is correct - or if I’m overlooking a subtle detail in the
implementation.

---

Scenario:

I’m examining a standard write operation with the following configuration:

- WriteAllBits = true
- UniformWrites = true
- MLCLevels = 1
- Ewr: Defined in the config as the total energy for writing a word (e.g.,
512 bits), presumably including both cell-level and peripheral energy.

---

My Observation:

It appears that write energy may be added twice during a write operation in
this setup.

1. In SubArray::Write()

The following line adds Ewr to subArrayEnergy, with a minor rebate if any
bits remain unchanged:

// SubArray.cpp
subArrayEnergy += p->Ewr - p->Ewrpb * numUnchangedBits;

Since WriteAllBits = true, numUnchangedBits is zero, so this effectively
contributes the full Ewr.

My understanding is that Ewr is the total word-level write energy, which
already includes cell programming and peripheral switching.

2. In SubArray::WriteCellData()

Later, when Write() calls WriteCellData() (mainly to get timing), the
following lines are executed:

// SubArray.cpp
subArrayEnergy += p->Ereset * writeCount0;
subArrayEnergy += p->Eset * writeCount1;

These lines add energy based on the number of bits being written to 0 or 1,
i.e., cell-level SET/RESET energy - which seems redundant if Ewr already
includes those.

---

My Question:

Is this behavior intentional?

It seems that under EnergyModel = energy, and UniformWrites = true, the
model:

- Adds Ewr (total write energy)
- Then also adds Eset and Ereset for each bit

This would lead to double-counting cell-level energy.

Should WriteCellData() be modifying energy stats if the flat model (Ewr) is
already being applied in Write()?

Any clarification or correction would be greatly appreciated. Thank you!

Source: https://github.com/SEAL-UCSB/NVmain/blob/master/src/SubArray.cpp
_______________________________________________
gem5-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to