dram_ctrl.hh (10286:e95a0ab1d368) | dram_ctrl.hh (10287:4966471a1ba1) |
---|---|
1/* 2 * Copyright (c) 2012-2014 ARM Limited 3 * All rights reserved 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 48 unchanged lines hidden (view full) --- 57#include "enums/MemSched.hh" 58#include "enums/PageManage.hh" 59#include "mem/abstract_mem.hh" 60#include "mem/qport.hh" 61#include "params/DRAMCtrl.hh" 62#include "sim/eventq.hh" 63 64/** | 1/* 2 * Copyright (c) 2012-2014 ARM Limited 3 * All rights reserved 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 48 unchanged lines hidden (view full) --- 57#include "enums/MemSched.hh" 58#include "enums/PageManage.hh" 59#include "mem/abstract_mem.hh" 60#include "mem/qport.hh" 61#include "params/DRAMCtrl.hh" 62#include "sim/eventq.hh" 63 64/** |
65 * The DRAM controller is a basic single-channel memory controller 66 * aiming to mimic a high-level DRAM controller and the most important 67 * timing constraints associated with the DRAM. The focus is really on 68 * modelling the impact on the system rather than the DRAM itself, 69 * hence the focus is on the controller model and not on the 70 * memory. By adhering to the correct timing constraints, ultimately 71 * there is no need for a memory model in addition to the controller 72 * model. | 65 * The DRAM controller is a single-channel memory controller capturing 66 * the most important timing constraints associated with a 67 * contemporary DRAM. For multi-channel memory systems, the controller 68 * is combined with a crossbar model, with the channel address 69 * interleaving taking part in the crossbar. |
73 * | 70 * |
74 * As a basic design principle, this controller is not cycle callable, 75 * but instead uses events to decide when new decisions can be made, 76 * when resources become available, when things are to be considered 77 * done, and when to send things back. Through these simple 78 * principles, we achieve a performant model that is not 79 * cycle-accurate, but enables us to evaluate the system impact of a 80 * wide range of memory technologies, and also collect statistics 81 * about the use of the memory. | 71 * As a basic design principle, this controller 72 * model is not cycle callable, but instead uses events to: 1) decide 73 * when new decisions can be made, 2) when resources become available, 74 * 3) when things are to be considered done, and 4) when to send 75 * things back. Through these simple principles, the model delivers 76 * high performance, and lots of flexibility, allowing users to 77 * evaluate the system impact of a wide range of memory technologies, 78 * such as DDR3/4, LPDDR2/3/4, WideIO1/2, HBM and HMC. 79 * 80 * For more details, please see Hansson et al, "Simulating DRAM 81 * controllers for future system architecture exploration", 82 * Proc. ISPASS, 2014. If you use this model as part of your research 83 * please cite the paper. |
82 */ 83class DRAMCtrl : public AbstractMemory 84{ 85 86 private: 87 88 // For now, make use of a queued slave port to avoid dealing with 89 // flow control for the responses being sent back --- 604 unchanged lines hidden --- | 84 */ 85class DRAMCtrl : public AbstractMemory 86{ 87 88 private: 89 90 // For now, make use of a queued slave port to avoid dealing with 91 // flow control for the responses being sent back --- 604 unchanged lines hidden --- |