m_transitions_per_cycle(p->transitions_per_cycle),
m_buffer_size(p->buffer_size), m_recycle_latency(p->recycle_latency),
memoryPort(csprintf("%s.memory", name()), this, ""),
- m_responseFromMemory_ptr(new MessageBuffer())
+ m_responseFromMemory_ptr(new MessageBuffer()),
+ m_rubySystem(p->ruby_system)
{
// Set the sender pointer of the response message buffer from the
// memory controller.
SenderState *s = new SenderState(id);
pkt->pushSenderState(s);
+ // Use functional rather than timing accesses during warmup
+ if (m_rubySystem->m_warmup_enabled) {
+ memoryPort.sendFunctional(pkt);
+ recvTimingResp(pkt);
+ return;
+ }
+
memoryPort.schedTimingReq(pkt, clockEdge(latency));
}
SenderState *s = new SenderState(id);
pkt->pushSenderState(s);
+ // Use functional rather than timing accesses during warmup
+ if (m_rubySystem->m_warmup_enabled) {
+ memoryPort.sendFunctional(pkt);
+ recvTimingResp(pkt);
+ return;
+ }
+
// Create a block and copy data from the block.
memoryPort.schedTimingReq(pkt, clockEdge(latency));
}
// memory controller.
MessageBuffer *m_responseFromMemory_ptr;
+ // Needed so we know if we are warming up
+ RubySystem *m_rubySystem;
+
// State that is stored in packets sent to the memory controller.
struct SenderState : public Packet::SenderState
{