1/* 2 * Copyright (c) 2012-2015 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 --- 560 unchanged lines hidden (view full) --- 569 /** 570 * The memory schduler/arbiter - picks which request needs to 571 * go next, based on the specified policy such as FCFS or FR-FCFS 572 * and moves it to the head of the queue. 573 * Prioritizes accesses to the same rank as previous burst unless 574 * controller is switching command type. 575 * 576 * @param queue Queued requests to consider |
577 * @param extra_col_delay Any extra delay due to a read/write switch |
578 * @return true if a packet is scheduled to a rank which is available else 579 * false 580 */ |
581 bool chooseNext(std::deque<DRAMPacket*>& queue, Tick extra_col_delay); |
582 583 /** 584 * For FR-FCFS policy reorder the read/write queue depending on row buffer |
585 * hits and earliest bursts available in DRAM |
586 * 587 * @param queue Queued requests to consider |
588 * @param extra_col_delay Any extra delay due to a read/write switch |
589 * @return true if a packet is scheduled to a rank which is available else 590 * false 591 */ |
592 bool reorderQueue(std::deque<DRAMPacket*>& queue, Tick extra_col_delay); |
593 594 /** 595 * Find which are the earliest banks ready to issue an activate 596 * for the enqueued requests. Assumes maximum of 64 banks per DIMM 597 * Also checks if the bank is already prepped. 598 * 599 * @param queue Queued requests to consider |
600 * @param time of seamless burst command |
601 * @return One-hot encoded mask of bank indices |
602 * @return boolean indicating burst can issue seamlessly, with no gaps |
603 */ |
604 std::pair<uint64_t, bool> minBankPrep(const std::deque<DRAMPacket*>& queue, 605 Tick min_col_at) const; |
606 607 /** 608 * Keep track of when row activations happen, in order to enforce 609 * the maximum number of activations in the activation window. The 610 * method updates the time that the banks become available based 611 * on the current limits. 612 * 613 * @param rank_ref Reference to the rank --- 285 unchanged lines hidden --- |