mem: Fix DRAM controller to operate on its own address space
Typically, a memory controller is assigned an address range of the form [start, end). This address range might be interleaved and therefore only a non-continuous subset of the addresses in the address range is handed by this controller. Prior to this patch, the DRAM controller was unaware of the interleaving and as a result the address range could affect the mapping of addresses to DRAM ranks, rows and columns. This patch changes the DRAM controller, to transform the input address to a continuous range of the form [0, size). As a result the DRAM controller always operates on a dense and continuous address range regardlesss of the system configuration. Change-Id: I7d273a630928421d1854658c9bb0ab34e9360851 Signed-off-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19328 Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br> Reviewed-by: Wendy Elsasser <wendy.elsasser@arm.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -818,6 +818,20 @@ class DRAMCtrl : public QoS::MemCtrl
|
||||
DRAMPacket* decodeAddr(const PacketPtr pkt, Addr dramPktAddr,
|
||||
unsigned int size, bool isRead) const;
|
||||
|
||||
/**
|
||||
* Get an address in a dense range which starts from 0. The input
|
||||
* address is the physical address of the request in an address
|
||||
* space that contains other SimObjects apart from this
|
||||
* controller.
|
||||
*
|
||||
* @param addr The intput address which should be in the addrRange
|
||||
* @return An address in the continues range [0, max)
|
||||
*/
|
||||
Addr getCtrlAddr(Addr addr)
|
||||
{
|
||||
return range.getOffset(addr);
|
||||
}
|
||||
|
||||
/**
|
||||
* The memory schduler/arbiter - picks which request needs to
|
||||
* go next, based on the specified policy such as FCFS or FR-FCFS
|
||||
@@ -946,7 +960,6 @@ class DRAMCtrl : public QoS::MemCtrl
|
||||
const uint32_t bankGroupsPerRank;
|
||||
const bool bankGroupArch;
|
||||
const uint32_t banksPerRank;
|
||||
const uint32_t channels;
|
||||
uint32_t rowsPerBank;
|
||||
const uint32_t readBufferSize;
|
||||
const uint32_t writeBufferSize;
|
||||
|
||||
Reference in New Issue
Block a user