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 --- |