17 #ifdef CHAMPSIM_MODULE
18 #define SET_ASIDE_CHAMPSIM_MODULE
19 #undef CHAMPSIM_MODULE
36 #include "champsim_constants.h"
42 #include <type_traits>
92 std::array<uint8_t, 2>
asid = {std::numeric_limits<uint8_t>::max(), std::numeric_limits<uint8_t>::max()};
98 LSQ_ENTRY(uint64_t
id, uint64_t addr, uint64_t
ip, std::array<uint8_t, 2>
asid);
99 void finish(std::deque<ooo_model_instr>::iterator begin, std::deque<ooo_model_instr>::iterator end)
const;
139 std::deque<ooo_model_instr>
ROB;
141 std::vector<std::optional<LSQ_ENTRY>>
LQ;
142 std::deque<LSQ_ENTRY>
SQ;
144 std::array<std::vector<std::reference_wrapper<ooo_model_instr>>, std::numeric_limits<uint8_t>::max() + 1>
reg_producers;
203 #include "ooo_cpu_module_decl.inc"
217 template <
unsigned long long B_FLAG,
unsigned long long T_FLAG>
250 template <
unsigned long long B_FLAG = 0,
unsigned long long T_FLAG = 0>
288 template <
unsigned long long OTHER_B,
unsigned long long OTHER_T>
450 template <
unsigned long long B>
455 template <
unsigned long long T>
462 template <
unsigned long long B_FLAG,
unsigned long long T_FLAG>
470 L1I_bus(b.m_cpu, b.m_fetch_queues),
L1D_bus(b.m_cpu, b.m_data_queues),
l1i(b.m_l1i),
module_pimpl(std::make_unique<module_model<B_FLAG, T_FLAG>>(
this))
475 #include "ooo_cpu_module_def.inc"
479 #ifdef SET_ASIDE_CHAMPSIM_MODULE
480 #undef SET_ASIDE_CHAMPSIM_MODULE
481 #define CHAMPSIM_MODULE
typename channel_type::response_type response_type
Definition: ooo_cpu.h:51
bool issue_read(request_type packet)
Definition: ooo_cpu.cc:738
CacheBus(uint32_t cpu_idx, champsim::channel *ll)
Definition: ooo_cpu.h:59
typename channel_type::request_type request_type
Definition: ooo_cpu.h:50
channel_type * lower_level
Definition: ooo_cpu.h:53
uint32_t cpu
Definition: ooo_cpu.h:54
bool issue_write(request_type packet)
Definition: ooo_cpu.cc:748
Definition: ooo_cpu.h:252
self_type & l1d_bandwidth(long int l1d_bw_)
Definition: ooo_cpu.h:434
self_type & data_queues(champsim::channel *data_queues_)
Definition: ooo_cpu.h:444
champsim::channel * m_data_queues
Definition: ooo_cpu.h:284
self_type & dib_window(std::size_t dib_window_)
Definition: ooo_cpu.h:324
self_type & sq_size(std::size_t sq_size_)
Definition: ooo_cpu.h:354
self_type & schedule_latency(unsigned schedule_latency_)
Definition: ooo_cpu.h:414
std::size_t m_dib_way
Definition: ooo_cpu.h:258
self_type & lq_width(unsigned lq_width_)
Definition: ooo_cpu.h:384
unsigned m_fetch_width
Definition: ooo_cpu.h:266
self_type & ifetch_buffer_size(std::size_t ifetch_buffer_size_)
Definition: ooo_cpu.h:329
self_type & l1i(CACHE *l1i_)
Definition: ooo_cpu.h:424
unsigned m_sq_width
Definition: ooo_cpu.h:272
self_type & rob_size(std::size_t rob_size_)
Definition: ooo_cpu.h:344
unsigned m_dispatch_width
Definition: ooo_cpu.h:268
self_type & mispredict_penalty(unsigned mispredict_penalty_)
Definition: ooo_cpu.h:399
self_type & dib_way(std::size_t dib_way_)
Definition: ooo_cpu.h:319
std::size_t m_decode_buffer_size
Definition: ooo_cpu.h:261
self_type & l1i_bandwidth(long int l1i_bw_)
Definition: ooo_cpu.h:429
self_type & index(uint32_t cpu_)
Definition: ooo_cpu.h:304
unsigned m_schedule_latency
Definition: ooo_cpu.h:277
std::size_t m_dib_window
Definition: ooo_cpu.h:259
self_type & dib_set(std::size_t dib_set_)
Definition: ooo_cpu.h:314
std::size_t m_sq_size
Definition: ooo_cpu.h:265
self_type & dispatch_buffer_size(std::size_t dispatch_buffer_size_)
Definition: ooo_cpu.h:339
std::size_t m_dib_set
Definition: ooo_cpu.h:257
long int m_l1i_bw
Definition: ooo_cpu.h:281
unsigned m_mispredict_penalty
Definition: ooo_cpu.h:274
self_type & frequency(double freq_scale_)
Definition: ooo_cpu.h:309
unsigned m_decode_latency
Definition: ooo_cpu.h:275
self_type & execute_width(unsigned execute_width_)
Definition: ooo_cpu.h:379
self_type & decode_width(unsigned decode_width_)
Definition: ooo_cpu.h:364
double m_freq_scale
Definition: ooo_cpu.h:256
self_type & retire_width(unsigned retire_width_)
Definition: ooo_cpu.h:394
unsigned m_lq_width
Definition: ooo_cpu.h:271
unsigned m_retire_width
Definition: ooo_cpu.h:273
self_type & schedule_width(unsigned schedule_width_)
Definition: ooo_cpu.h:374
unsigned m_execute_latency
Definition: ooo_cpu.h:278
CACHE * m_l1i
Definition: ooo_cpu.h:280
self_type & fetch_queues(champsim::channel *fetch_queues_)
Definition: ooo_cpu.h:439
std::size_t m_lq_size
Definition: ooo_cpu.h:264
unsigned m_schedule_width
Definition: ooo_cpu.h:269
std::size_t m_ifetch_buffer_size
Definition: ooo_cpu.h:260
Builder< B_FLAG, T > btb()
Definition: ooo_cpu.h:456
self_type & fetch_width(unsigned fetch_width_)
Definition: ooo_cpu.h:359
Builder< B, T_FLAG > branch_predictor()
Definition: ooo_cpu.h:451
self_type & decode_latency(unsigned decode_latency_)
Definition: ooo_cpu.h:404
long int m_l1d_bw
Definition: ooo_cpu.h:282
unsigned m_dispatch_latency
Definition: ooo_cpu.h:276
unsigned m_decode_width
Definition: ooo_cpu.h:267
self_type & sq_width(unsigned sq_width_)
Definition: ooo_cpu.h:389
uint32_t m_cpu
Definition: ooo_cpu.h:255
std::size_t m_dispatch_buffer_size
Definition: ooo_cpu.h:262
self_type & dispatch_width(unsigned dispatch_width_)
Definition: ooo_cpu.h:369
Builder(builder_conversion_tag, const Builder< OTHER_B, OTHER_T > &other)
Definition: ooo_cpu.h:289
self_type & decode_buffer_size(std::size_t decode_buffer_size_)
Definition: ooo_cpu.h:334
self_type & execute_latency(unsigned execute_latency_)
Definition: ooo_cpu.h:419
self_type & dispatch_latency(unsigned dispatch_latency_)
Definition: ooo_cpu.h:409
self_type & lq_size(std::size_t lq_size_)
Definition: ooo_cpu.h:349
unsigned m_execute_width
Definition: ooo_cpu.h:270
champsim::channel * m_fetch_queues
Definition: ooo_cpu.h:283
std::size_t m_rob_size
Definition: ooo_cpu.h:263
Definition: ooo_cpu.h:248
Definition: ooo_cpu.h:104
long check_dib()
Definition: ooo_cpu.cc:242
const long int LQ_WIDTH
Definition: ooo_cpu.h:149
const long int DECODE_WIDTH
Definition: ooo_cpu.h:148
std::deque< ooo_model_instr > IFETCH_BUFFER
Definition: ooo_cpu.h:136
const long int SCHEDULER_SIZE
Definition: ooo_cpu.h:148
uint8_t impl_predict_branch(uint64_t ip)
Definition: ooo_cpu.h:238
uint64_t last_heartbeat_instr
Definition: ooo_cpu.h:114
long dispatch_instruction()
Definition: ooo_cpu.cc:367
uint64_t sim_cycle() const
Definition: ooo_cpu.h:199
stats_type roi_stats
Definition: ooo_cpu.h:125
const std::size_t DISPATCH_BUFFER_SIZE
Definition: ooo_cpu.h:147
bool do_fetch_instruction(std::deque< ooo_model_instr >::iterator begin, std::deque< ooo_model_instr >::iterator end)
Definition: ooo_cpu.cc:301
uint64_t num_base_update_uops
Definition: ooo_cpu.h:119
std::deque< ooo_model_instr > input_queue
Definition: ooo_cpu.h:158
const unsigned SCHEDULING_LATENCY
Definition: ooo_cpu.h:151
uint64_t begin_phase_cycle
Definition: ooo_cpu.h:109
const std::size_t ROB_SIZE
Definition: ooo_cpu.h:147
bool do_predict_branch(ooo_model_instr &instr)
Definition: ooo_cpu.cc:150
stats_type sim_stats
Definition: ooo_cpu.h:125
uint64_t finish_phase_cycle
Definition: ooo_cpu.h:111
long fetch_instruction()
Definition: ooo_cpu.cc:268
bool show_heartbeat
Definition: ooo_cpu.h:121
void initialize() override final
Definition: ooo_cpu.cc:73
void impl_update_btb(uint64_t ip, uint64_t predicted_target, uint8_t taken, uint8_t branch_type)
Definition: ooo_cpu.h:241
const unsigned BRANCH_MISPREDICT_PENALTY
Definition: ooo_cpu.h:151
bool execute_load(const LSQ_ENTRY &lq_entry)
Definition: ooo_cpu.cc:567
dib_type DIB
Definition: ooo_cpu.h:133
void end_phase(unsigned cpu) override final
Definition: ooo_cpu.cc:94
std::deque< ooo_model_instr > DECODE_BUFFER
Definition: ooo_cpu.h:138
uint64_t finish_phase_instr
Definition: ooo_cpu.h:112
const unsigned DISPATCH_LATENCY
Definition: ooo_cpu.h:151
const long int FETCH_WIDTH
Definition: ooo_cpu.h:148
bool do_complete_store(const LSQ_ENTRY &sq_entry)
Definition: ooo_cpu.cc:553
long complete_inflight_instruction()
Definition: ooo_cpu.cc:605
long decode_instruction()
Definition: ooo_cpu.cc:332
long operate_lsq()
Definition: ooo_cpu.cc:500
const long int L1I_BANDWIDTH
Definition: ooo_cpu.h:152
bool do_init_instruction(ooo_model_instr &instr)
Definition: ooo_cpu.cc:230
long handle_memory_return()
Definition: ooo_cpu.cc:619
CacheBus L1I_bus
Definition: ooo_cpu.h:160
void do_check_dib(ooo_model_instr &instr)
Definition: ooo_cpu.cc:251
const long IN_QUEUE_SIZE
Definition: ooo_cpu.h:157
std::array< std::vector< std::reference_wrapper< ooo_model_instr > >, std::numeric_limits< uint8_t >::max()+1 > reg_producers
Definition: ooo_cpu.h:144
std::pair< uint64_t, uint8_t > impl_btb_prediction(uint64_t ip)
Definition: ooo_cpu.h:245
const std::size_t DECODE_BUFFER_SIZE
Definition: ooo_cpu.h:147
const long int DISPATCH_WIDTH
Definition: ooo_cpu.h:148
void do_complete_execution(ooo_model_instr &instr)
Definition: ooo_cpu.cc:581
void begin_phase() override final
Definition: ooo_cpu.cc:80
void initialize_instruction()
Definition: ooo_cpu.cc:109
void print_deadlock() override final
Definition: ooo_cpu.cc:683
const unsigned DECODE_LATENCY
Definition: ooo_cpu.h:151
uint64_t last_heartbeat_cycle
Definition: ooo_cpu.h:113
void do_memory_scheduling(ooo_model_instr &instr)
Definition: ooo_cpu.cc:460
void do_dib_update(const ooo_model_instr &instr)
Definition: ooo_cpu.cc:365
uint32_t cpu
Definition: ooo_cpu.h:106
std::deque< ooo_model_instr > DISPATCH_BUFFER
Definition: ooo_cpu.h:137
void do_finish_store(const LSQ_ENTRY &sq_entry)
Definition: ooo_cpu.cc:539
uint64_t roi_instr() const
Definition: ooo_cpu.h:196
long promote_to_decode()
Definition: ooo_cpu.cc:317
void impl_initialize_btb()
Definition: ooo_cpu.h:240
uint64_t sim_instr() const
Definition: ooo_cpu.h:198
std::unique_ptr< module_concept > module_pimpl
Definition: ooo_cpu.h:231
std::vector< std::optional< LSQ_ENTRY > > LQ
Definition: ooo_cpu.h:141
void do_sq_forward_to_lq(LSQ_ENTRY &sq_entry, LSQ_ENTRY &lq_entry)
std::deque< LSQ_ENTRY > SQ
Definition: ooo_cpu.h:142
uint64_t begin_phase_instr
Definition: ooo_cpu.h:110
CacheBus L1D_bus
Definition: ooo_cpu.h:160
uint64_t roi_cycle() const
Definition: ooo_cpu.h:197
uint64_t next_print_instruction
Definition: ooo_cpu.h:115
long operate() override final
Definition: ooo_cpu.cc:35
long execute_instruction()
Definition: ooo_cpu.cc:427
void impl_initialize_branch_predictor()
Definition: ooo_cpu.h:233
void impl_last_branch_result(uint64_t ip, uint64_t target, uint8_t taken, uint8_t branch_type)
Definition: ooo_cpu.h:234
const std::size_t IFETCH_BUFFER_SIZE
Definition: ooo_cpu.h:147
const long int RETIRE_WIDTH
Definition: ooo_cpu.h:150
const long int L1D_BANDWIDTH
Definition: ooo_cpu.h:152
uint64_t fetch_resume_cycle
Definition: ooo_cpu.h:155
O3_CPU(Builder< B_FLAG, T_FLAG > b)
Definition: ooo_cpu.h:463
const long int EXEC_WIDTH
Definition: ooo_cpu.h:148
long retire_rob()
Definition: ooo_cpu.cc:664
uint64_t num_retired
Definition: ooo_cpu.h:118
void do_scheduling(ooo_model_instr &instr)
Definition: ooo_cpu.cc:403
std::deque< ooo_model_instr > ROB
Definition: ooo_cpu.h:139
CACHE * l1i
Definition: ooo_cpu.h:161
void do_execution(ooo_model_instr &rob_it)
Definition: ooo_cpu.cc:440
const std::size_t SQ_SIZE
Definition: ooo_cpu.h:147
const long int SQ_WIDTH
Definition: ooo_cpu.h:149
const unsigned EXEC_LATENCY
Definition: ooo_cpu.h:151
long schedule_instruction()
Definition: ooo_cpu.cc:386
response response_type
Definition: channel.h:109
request request_type
Definition: channel.h:110
Definition: lru_table.h:46
Definition: operable.h:24
uint64_t current_cycle
Definition: operable.h:29
operable(double scale)
Definition: operable.h:32
branch_type
Definition: instruction.h:30
constexpr unsigned lg2(uint64_t n)
Definition: bits.h:25
Definition: champsim.h:24
STATUS
Definition: ooo_cpu.h:44
@ INFLIGHT
Definition: ooo_cpu.h:44
@ COMPLETED
Definition: ooo_cpu.h:44
uint64_t ip
Definition: ooo_cpu.h:89
std::array< uint8_t, 2 > asid
Definition: ooo_cpu.h:92
void finish(std::deque< ooo_model_instr >::iterator begin, std::deque< ooo_model_instr >::iterator end) const
Definition: ooo_cpu.cc:723
bool fetch_issued
Definition: ooo_cpu.h:93
std::vector< std::reference_wrapper< std::optional< LSQ_ENTRY > > > lq_depend_on_me
Definition: ooo_cpu.h:96
uint64_t instr_id
Definition: ooo_cpu.h:87
uint64_t event_cycle
Definition: ooo_cpu.h:90
uint64_t virtual_address
Definition: ooo_cpu.h:88
LSQ_ENTRY(uint64_t id, uint64_t addr, uint64_t ip, std::array< uint8_t, 2 > asid)
Definition: ooo_cpu.cc:718
uint64_t producer_id
Definition: ooo_cpu.h:95
Definition: ooo_cpu.h:128
auto operator()(uint64_t val) const
Definition: ooo_cpu.h:130
std::size_t shamt
Definition: ooo_cpu.h:129
Definition: ooo_cpu.h:205
virtual uint8_t impl_predict_branch(uint64_t ip)=0
virtual void impl_last_branch_result(uint64_t ip, uint64_t target, uint8_t taken, uint8_t branch_type)=0
virtual std::pair< uint64_t, uint8_t > impl_btb_prediction(uint64_t ip)=0
virtual void impl_initialize_btb()=0
virtual void impl_initialize_branch_predictor()=0
virtual ~module_concept()=default
virtual void impl_update_btb(uint64_t ip, uint64_t predicted_target, uint8_t taken, uint8_t branch_type)=0
Definition: ooo_cpu.h:218
void impl_last_branch_result(uint64_t ip, uint64_t target, uint8_t taken, uint8_t branch_type)
std::pair< uint64_t, uint8_t > impl_btb_prediction(uint64_t ip)
uint8_t impl_predict_branch(uint64_t ip)
module_model(O3_CPU *core)
Definition: ooo_cpu.h:220
void impl_initialize_btb()
void impl_update_btb(uint64_t ip, uint64_t predicted_target, uint8_t taken, uint8_t branch_type)
void impl_initialize_branch_predictor()
O3_CPU * intern_
Definition: ooo_cpu.h:219
uint64_t instrs() const
Definition: ooo_cpu.h:73
uint64_t end_instrs
Definition: ooo_cpu.h:67
uint64_t begin_cycles
Definition: ooo_cpu.h:66
uint64_t direction_prediction_miss
Definition: ooo_cpu.h:77
uint64_t total_rob_occupancy_at_branch_mispredict
Definition: ooo_cpu.h:68
std::string name
Definition: ooo_cpu.h:65
uint64_t target_prediction_miss_general_not_in_btb
Definition: ooo_cpu.h:82
uint64_t target_prediction_miss_return_wrong_target
Definition: ooo_cpu.h:79
uint64_t end_base_update_uops
Definition: ooo_cpu.h:67
uint64_t target_prediction_miss_return_not_in_btb
Definition: ooo_cpu.h:78
uint64_t target_prediction_miss_indirect_wrong_target
Definition: ooo_cpu.h:81
uint64_t end_cycles
Definition: ooo_cpu.h:67
uint64_t begin_instrs
Definition: ooo_cpu.h:66
uint64_t begin_base_update_uops
Definition: ooo_cpu.h:66
std::array< long long, 8 > branch_type_misses
Definition: ooo_cpu.h:71
uint64_t cycles() const
Definition: ooo_cpu.h:75
uint64_t target_prediction_miss_indirect_not_in_btb
Definition: ooo_cpu.h:80
uint64_t base_update_uops() const
Definition: ooo_cpu.h:74
uint64_t target_prediction_miss_general_wrong_target
Definition: ooo_cpu.h:83
std::array< long long, 8 > total_branch_types
Definition: ooo_cpu.h:70
Definition: instruction.h:41