dram_ctrl.hh (10889:c4c13fced000) dram_ctrl.hh (10890:bac38d2a4acb)
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
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 switched_cmd_type Command type is changing
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 */
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, bool switched_cmd_type);
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
582
583 /**
584 * For FR-FCFS policy reorder the read/write queue depending on row buffer
585 * hits and earliest banks available in DRAM
586 * Prioritizes accesses to the same rank as previous burst unless
587 * controller is switching command type.
585 * hits and earliest bursts available in DRAM
588 *
589 * @param queue Queued requests to consider
586 *
587 * @param queue Queued requests to consider
590 * @param switched_cmd_type Command type is changing
588 * @param extra_col_delay Any extra delay due to a read/write switch
591 * @return true if a packet is scheduled to a rank which is available else
592 * false
593 */
589 * @return true if a packet is scheduled to a rank which is available else
590 * false
591 */
594 bool reorderQueue(std::deque<DRAMPacket*>& queue, bool switched_cmd_type);
592 bool reorderQueue(std::deque<DRAMPacket*>& queue, Tick extra_col_delay);
595
596 /**
597 * Find which are the earliest banks ready to issue an activate
598 * for the enqueued requests. Assumes maximum of 64 banks per DIMM
599 * Also checks if the bank is already prepped.
600 *
601 * @param queue Queued requests to consider
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
602 * @param switched_cmd_type Command type is changing
600 * @param time of seamless burst command
603 * @return One-hot encoded mask of bank indices
601 * @return One-hot encoded mask of bank indices
602 * @return boolean indicating burst can issue seamlessly, with no gaps
604 */
603 */
605 uint64_t minBankPrep(const std::deque<DRAMPacket*>& queue,
606 bool switched_cmd_type) const;
604 std::pair<uint64_t, bool> minBankPrep(const std::deque<DRAMPacket*>& queue,
605 Tick min_col_at) const;
607
608 /**
609 * Keep track of when row activations happen, in order to enforce
610 * the maximum number of activations in the activation window. The
611 * method updates the time that the banks become available based
612 * on the current limits.
613 *
614 * @param rank_ref Reference to the rank

--- 285 unchanged lines hidden ---
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 ---