44#include "debug/TrafficGen.hh"
45#include "enums/AddrMap.hh"
52 Addr start_addr_dram,
Addr end_addr_dram,
54 Addr start_addr_nvm,
Addr end_addr_nvm,
58 uint8_t read_percent,
Addr data_limit,
59 unsigned int num_seq_pkts_dram,
unsigned int page_size_dram,
60 unsigned int nbr_of_banks_dram,
61 unsigned int nbr_of_banks_util_dram,
62 unsigned int num_seq_pkts_nvm,
unsigned int buffer_size_nvm,
63 unsigned int nbr_of_banks_nvm,
64 unsigned int nbr_of_banks_util_nvm,
65 enums::AddrMap addr_mapping,
66 unsigned int nbr_of_ranks_dram,
67 unsigned int nbr_of_ranks_nvm,
69 :
BaseGen(obj, requestor_id, _duration),
70 startAddrDram(start_addr_dram),
71 endAddrDram(end_addr_dram),
72 blocksizeDram(blocksize_dram),
73 startAddrNvm(start_addr_nvm),
74 endAddrNvm(end_addr_nvm),
75 blocksizeNvm(blocksize_nvm),
76 cacheLineSize(cacheline_size),
77 minPeriod(min_period), maxPeriod(max_period),
78 readPercent(read_percent), dataLimit(data_limit),
79 numSeqPktsDram(num_seq_pkts_dram),
80 numSeqPktsNvm(num_seq_pkts_nvm),
81 countNumSeqPkts(0),
addr(0),
82 pageSizeDram(page_size_dram),
83 pageBitsDram(
floorLog2(pageSizeDram / blocksizeDram)),
84 bankBitsDram(
floorLog2(nbr_of_banks_dram)),
86 nbrOfBanksDram(nbr_of_banks_dram),
87 nbrOfBanksUtilDram(nbr_of_banks_util_dram),
88 bufferSizeNvm(buffer_size_nvm),
89 pageBitsNvm(
floorLog2(bufferSizeNvm / blocksizeNvm)),
92 nbrOfBanksNvm(nbr_of_banks_nvm),
93 nbrOfBanksUtilNvm(nbr_of_banks_util_nvm),
94 addrMapping(addr_mapping),
95 nbrOfRanksDram(nbr_of_ranks_dram),
97 nbrOfRanksNvm(nbr_of_ranks_nvm),
99 nvmPercent(nvm_percent),
105 fatal(
"TrafficGen %s Dram block size (%d) is larger than "
106 "cache line size (%d)\n",
name(),
110 fatal(
"TrafficGen %s Nvm block size (%d) is larger than "
111 "cache line size (%d)\n",
name(),
115 fatal(
"%s cannot have more than 100% reads",
name());
118 fatal(
"%s cannot have min_period > max_period",
name());
121 fatal(
"Attempting to use more Dram banks (%d) than "
122 "what is available (%d)\n",
126 fatal(
"Attempting to use more Nvm banks (%d) than "
127 "what is available (%d)\n",
188 unsigned int new_bank =
192 unsigned int new_rank =
220 "size %d, countNumSeqPkts: %d, numSeqPkts: %d\n",
261 unsigned int new_col =
Base class for all generators, with the shared functionality and virtual functions for entering,...
PacketPtr getPacket(Addr addr, unsigned size, const MemCmd &cmd, Request::FlagsType flags=0)
Generate a new request and associated packet.
std::string name() const
Get the name, useful for DPRINTFs.
Tick nextPacketTick(bool elastic, Tick delay) const
Determine the tick when the next packet is available.
const unsigned int bankBitsNvm
Number of bank bits in NVM address.
const Addr startAddrDram
Start of DRAM address range.
unsigned int countNumSeqPkts
Track number of sequential packets generated for a request
unsigned int pageSize
Page size of DRAM.
const Addr dataLimit
Maximum amount of data to manipulate.
unsigned int nbrOfRanks
Number of ranks to be utilized for a given configuration.
const uint8_t readPercent
Percent of generated transactions that should be reads.
void enter()
Enter this generator state.
const unsigned int nbrOfBanksUtilNvm
Number of banks to be utilized for a given configuration.
HybridGen(SimObject &obj, RequestorID requestor_id, Tick _duration, Addr start_addr_dram, Addr end_addr_dram, Addr blocksize_dram, Addr start_addr_nvm, Addr end_addr_nvm, Addr blocksize_nvm, Addr cacheline_size, Tick min_period, Tick max_period, uint8_t read_percent, Addr data_limit, unsigned int num_seq_pkts_dram, unsigned int page_size_dram, unsigned int nbr_of_banks_dram, unsigned int nbr_of_banks_util_dram, unsigned int num_seq_pkts_nvm, unsigned int buffer_size_nvm, unsigned int nbr_of_banks_nvm, unsigned int nbr_of_banks_util_nvm, enums::AddrMap addr_mapping, unsigned int nbr_of_ranks_dram, unsigned int nbr_of_ranks_nvm, uint8_t nvm_percent)
Create a hybrid DRAM + NVM address sequence generator.
Addr dataManipulated
Counter to determine the amount of data manipulated.
const Addr startAddrNvm
Start of DRAM address range.
const Addr blocksizeNvm
Blocksize and address increment for DRAM.
const unsigned int blockBitsDram
Number of block bits in DRAM address.
PacketPtr getNextPacket()
Get the next generated packet.
const unsigned int pageBitsNvm
Number of buffer bits in NVM address.
const uint8_t nvmPercent
Percent of generated transactions that should go to NVM.
const unsigned int numSeqPktsNvm
const Addr blocksizeDram
Blocksize and address increment for DRAM.
unsigned int numSeqPkts
Number of sequential DRAM packets to be generated per cpu request.
const Addr endAddrDram
End of DRAM address range.
const unsigned int nbrOfBanksNvm
Number of banks in NVM.
Addr startAddr
Start of address range.
const unsigned int bankBitsDram
Number of bank bits in DRAM address.
Addr endAddr
End of address range.
const unsigned int nbrOfBanksUtilDram
Number of banks to be utilized for a given configuration.
const Addr cacheLineSize
Cache line size in the simulated system.
const unsigned int nbrOfBanksDram
Number of banks in DRAM.
const unsigned int rankBitsNvm
Number of rank bits in DRAM address.
const unsigned int rankBitsDram
Number of rank bits in DRAM address.
const Addr endAddrNvm
End of DRAM address range.
const unsigned int nbrOfRanksNvm
Number of ranks to be utilized for a given configuration.
unsigned int bankBits
Number of bank bits in DRAM address.
unsigned int nbrOfBanks
Number of banks in DRAM.
bool isRead
Remember type of requests to be generated in series.
enums::AddrMap addrMapping
Address mapping to be used.
Addr blocksize
Blocksize and address increment.
Addr addr
Address of request.
const unsigned int blockBitsNvm
Number of block bits in NVM address.
unsigned int pageBits
Number of page bits in DRAM address.
const unsigned int pageSizeDram
Page size of DRAM.
const unsigned int nbrOfRanksDram
Number of ranks to be utilized for a given configuration.
const unsigned int bufferSizeNvm
Buffer size of NVM.
void genStartAddr(unsigned int new_bank, unsigned int new_rank)
Insert bank, rank, and column bits into packed address to create address for 1st command in a series.
const Tick minPeriod
Request generation period.
unsigned int blockBits
Number of block bits in DRAM address.
const unsigned int numSeqPktsDram
Number of sequential packets to be generated per cpu request.
const unsigned int pageBitsDram
Number of page bits in DRAM address.
bool isNvm
Remember the interface to be generated in series.
unsigned int nbrOfBanksUtil
Number of banks to be utilized for a given configuration.
unsigned int rankBits
Number of rank bits in DRAM address.
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Abstract superclass for simulation objects.
The traffic generator is a module that generates stimuli for the memory system, based on a collection...
static constexpr std::enable_if_t< std::is_integral_v< T >, int > floorLog2(T x)
std::enable_if_t< std::is_integral_v< T >, T > random()
Use the SFINAE idiom to choose an implementation based on whether the type is integral or floating po...
constexpr void replaceBits(T &val, unsigned first, unsigned last, B bit_val)
A convenience function to replace bits first to last of val with bit_val in place.
#define fatal(...)
This implements a cprintf based fatal() function.
Declaration of the NVM generator for issuing variable buffer hit length requests and bank utilisation...
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
Tick curTick()
The universal simulation clock.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
uint64_t Tick
Tick count type.