1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
use libc::{c_char, c_double, c_int};
use libc::c_char as c_bool;

#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct ParseXML;

extern "C" {
    pub fn new_ParseXML() -> *mut ParseXML;
    pub fn delete_ParseXML(this: *mut ParseXML);
    pub fn ParseXML_parse(this: *mut ParseXML, filename: *mut c_char);
    pub fn ParseXML_sys(this: *mut ParseXML) -> *mut root_system;
}

#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct predictor_systemcore {
    pub prediction_width: c_int,
    pub prediction_scheme: [c_char; 20],
    pub predictor_size: c_int,
    pub predictor_entries: c_int,
    pub local_predictor_size: [c_int; 20],
    pub local_predictor_entries: c_int,
    pub global_predictor_entries: c_int,
    pub global_predictor_bits: c_int,
    pub chooser_predictor_entries: c_int,
    pub chooser_predictor_bits: c_int,
    pub predictor_accesses: c_double,
}

#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct itlb_systemcore {
    pub number_entries: c_int,
    pub cache_policy: c_int,
    pub total_hits: c_double,
    pub total_accesses: c_double,
    pub total_misses: c_double,
    pub conflicts: c_double,
}

#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct icache_systemcore {
    pub icache_config: [c_double; 20],
    pub buffer_sizes: [c_int; 20],
    pub cache_policy: c_int,
    pub total_accesses: c_double,
    pub read_accesses: c_double,
    pub read_misses: c_double,
    pub replacements: c_double,
    pub read_hits: c_double,
    pub total_hits: c_double,
    pub total_misses: c_double,
    pub miss_buffer_access: c_double,
    pub fill_buffer_accesses: c_double,
    pub prefetch_buffer_accesses: c_double,
    pub prefetch_buffer_writes: c_double,
    pub prefetch_buffer_reads: c_double,
    pub prefetch_buffer_hits: c_double,
    pub conflicts: c_double,
}

#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct dtlb_systemcore {
    pub number_entries: c_int,
    pub cache_policy: c_int,
    pub total_accesses: c_double,
    pub read_accesses: c_double,
    pub write_accesses: c_double,
    pub write_hits: c_double,
    pub read_hits: c_double,
    pub read_misses: c_double,
    pub write_misses: c_double,
    pub total_hits: c_double,
    pub total_misses: c_double,
    pub conflicts: c_double,
}

#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct dcache_systemcore {
    pub dcache_config: [c_double; 20],
    pub buffer_sizes: [c_int; 20],
    pub cache_policy: c_int,
    pub total_accesses: c_double,
    pub read_accesses: c_double,
    pub write_accesses: c_double,
    pub total_hits: c_double,
    pub total_misses: c_double,
    pub read_hits: c_double,
    pub write_hits: c_double,
    pub read_misses: c_double,
    pub write_misses: c_double,
    pub replacements: c_double,
    pub write_backs: c_double,
    pub miss_buffer_access: c_double,
    pub fill_buffer_accesses: c_double,
    pub prefetch_buffer_accesses: c_double,
    pub prefetch_buffer_writes: c_double,
    pub prefetch_buffer_reads: c_double,
    pub prefetch_buffer_hits: c_double,
    pub wbb_writes: c_double,
    pub wbb_reads: c_double,
    pub conflicts: c_double,
}

#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct BTB_systemcore {
    pub BTB_config: [c_int; 20],
    pub total_accesses: c_double,
    pub read_accesses: c_double,
    pub write_accesses: c_double,
    pub total_hits: c_double,
    pub total_misses: c_double,
    pub read_hits: c_double,
    pub write_hits: c_double,
    pub read_misses: c_double,
    pub write_misses: c_double,
    pub replacements: c_double,
}

#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct system_core {
    pub clock_rate: c_int,
    pub opt_local: c_bool,
    pub x86: c_bool,
    pub machine_bits: c_int,
    pub virtual_address_width: c_int,
    pub physical_address_width: c_int,
    pub opcode_width: c_int,
    pub micro_opcode_width: c_int,
    pub instruction_length: c_int,
    pub machine_type: c_int,
    pub internal_datapath_width: c_int,
    pub number_hardware_threads: c_int,
    pub fetch_width: c_int,
    pub number_instruction_fetch_ports: c_int,
    pub decode_width: c_int,
    pub issue_width: c_int,
    pub peak_issue_width: c_int,
    pub commit_width: c_int,
    pub pipelines_per_core: [c_int; 20],
    pub pipeline_depth: [c_int; 20],
    pub FPU: [c_char; 20],
    pub divider_multiplier: [c_char; 20],
    pub ALU_per_core: c_int,
    pub FPU_per_core: c_double,
    pub MUL_per_core: c_int,
    pub instruction_buffer_size: c_int,
    pub decoded_stream_buffer_size: c_int,
    pub instruction_window_scheme: c_int,
    pub instruction_window_size: c_int,
    pub fp_instruction_window_size: c_int,
    pub ROB_size: c_int,
    pub archi_Regs_IRF_size: c_int,
    pub archi_Regs_FRF_size: c_int,
    pub phy_Regs_IRF_size: c_int,
    pub phy_Regs_FRF_size: c_int,
    pub rename_scheme: c_int,
    pub checkpoint_depth: c_int,
    pub register_windows_size: c_int,
    pub LSU_order: [c_char; 20],
    pub store_buffer_size: c_int,
    pub load_buffer_size: c_int,
    pub memory_ports: c_int,
    pub Dcache_dual_pump: [c_char; 20],
    pub RAS_size: c_int,
    pub fp_issue_width: c_int,
    pub prediction_width: c_int,
    pub number_of_BTB: c_int,
    pub number_of_BPT: c_int,
    pub total_instructions: c_double,
    pub int_instructions: c_double,
    pub fp_instructions: c_double,
    pub branch_instructions: c_double,
    pub branch_mispredictions: c_double,
    pub committed_instructions: c_double,
    pub committed_int_instructions: c_double,
    pub committed_fp_instructions: c_double,
    pub load_instructions: c_double,
    pub store_instructions: c_double,
    pub total_cycles: c_double,
    pub idle_cycles: c_double,
    pub busy_cycles: c_double,
    pub instruction_buffer_reads: c_double,
    pub instruction_buffer_write: c_double,
    pub ROB_reads: c_double,
    pub ROB_writes: c_double,
    pub rename_accesses: c_double,
    pub fp_rename_accesses: c_double,
    pub rename_reads: c_double,
    pub rename_writes: c_double,
    pub fp_rename_reads: c_double,
    pub fp_rename_writes: c_double,
    pub inst_window_reads: c_double,
    pub inst_window_writes: c_double,
    pub inst_window_wakeup_accesses: c_double,
    pub inst_window_selections: c_double,
    pub fp_inst_window_reads: c_double,
    pub fp_inst_window_writes: c_double,
    pub fp_inst_window_wakeup_accesses: c_double,
    pub fp_inst_window_selections: c_double,
    pub archi_int_regfile_reads: c_double,
    pub archi_float_regfile_reads: c_double,
    pub phy_int_regfile_reads: c_double,
    pub phy_float_regfile_reads: c_double,
    pub phy_int_regfile_writes: c_double,
    pub phy_float_regfile_writes: c_double,
    pub archi_int_regfile_writes: c_double,
    pub archi_float_regfile_writes: c_double,
    pub int_regfile_reads: c_double,
    pub float_regfile_reads: c_double,
    pub int_regfile_writes: c_double,
    pub float_regfile_writes: c_double,
    pub windowed_reg_accesses: c_double,
    pub windowed_reg_transports: c_double,
    pub function_calls: c_double,
    pub context_switches: c_double,
    pub ialu_accesses: c_double,
    pub fpu_accesses: c_double,
    pub mul_accesses: c_double,
    pub cdb_alu_accesses: c_double,
    pub cdb_mul_accesses: c_double,
    pub cdb_fpu_accesses: c_double,
    pub load_buffer_reads: c_double,
    pub load_buffer_writes: c_double,
    pub load_buffer_cams: c_double,
    pub store_buffer_reads: c_double,
    pub store_buffer_writes: c_double,
    pub store_buffer_cams: c_double,
    pub store_buffer_forwards: c_double,
    pub main_memory_access: c_double,
    pub main_memory_read: c_double,
    pub main_memory_write: c_double,
    pub pipeline_duty_cycle: c_double,
    pub IFU_duty_cycle : c_double,
    pub BR_duty_cycle : c_double,
    pub LSU_duty_cycle : c_double,
    pub MemManU_I_duty_cycle: c_double,
    pub MemManU_D_duty_cycle : c_double,
    pub ALU_duty_cycle : c_double,
    pub MUL_duty_cycle : c_double,
    pub FPU_duty_cycle : c_double,
    pub ALU_cdb_duty_cycle : c_double,
    pub MUL_cdb_duty_cycle : c_double,
    pub FPU_cdb_duty_cycle : c_double,
    pub vdd: c_double,
    pub power_gating_vcc: c_double,
    pub predictor: predictor_systemcore,
    pub itlb: itlb_systemcore,
    pub icache: icache_systemcore,
    pub dtlb: dtlb_systemcore,
    pub dcache: dcache_systemcore,
    pub BTB: BTB_systemcore,
}

#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct system_L1Directory {
    pub Directory_type: c_int,
    pub Dir_config: [c_double; 20],
    pub buffer_sizes: [c_int; 20],
    pub clockrate: c_int,
    pub ports: [c_int; 20],
    pub device_type: c_int,
    pub cache_policy: c_int,
    pub threeD_stack: [c_char; 20],
    pub vdd: c_double,
    pub power_gating_vcc: c_double,
    pub total_accesses: c_double,
    pub read_accesses: c_double,
    pub write_accesses: c_double,
    pub read_misses: c_double,
    pub write_misses: c_double,
    pub conflicts: c_double,
    pub duty_cycle: c_double,
}

#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct system_L2Directory {
    pub Directory_type: c_int,
    pub Dir_config: [c_double; 20],
    pub buffer_sizes: [c_int; 20],
    pub clockrate: c_int,
    pub ports: [c_int; 20],
    pub device_type: c_int,
    pub cache_policy: c_int,
    pub threeD_stack: [c_char; 20],
    pub vdd: c_double,
    pub power_gating_vcc: c_double,
    pub total_accesses: c_double,
    pub read_accesses: c_double,
    pub write_accesses: c_double,
    pub read_misses: c_double,
    pub write_misses: c_double,
    pub conflicts: c_double,
    pub duty_cycle: c_double,
}

#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct system_L2 {
    pub L2_config: [c_double; 20],
    pub clockrate: c_int,
    pub ports: [c_int; 20],
    pub device_type: c_int,
    pub cache_policy: c_int,
    pub threeD_stack: [c_char; 20],
    pub buffer_sizes: [c_int; 20],
    pub vdd: c_double,
    pub power_gating_vcc: c_double,
    pub total_accesses: c_double,
    pub read_accesses: c_double,
    pub write_accesses: c_double,
    pub total_hits: c_double,
    pub total_misses: c_double,
    pub read_hits: c_double,
    pub write_hits: c_double,
    pub read_misses: c_double,
    pub write_misses: c_double,
    pub replacements: c_double,
    pub write_backs: c_double,
    pub miss_buffer_accesses: c_double,
    pub fill_buffer_accesses: c_double,
    pub prefetch_buffer_accesses: c_double,
    pub prefetch_buffer_writes: c_double,
    pub prefetch_buffer_reads: c_double,
    pub prefetch_buffer_hits: c_double,
    pub wbb_writes: c_double,
    pub wbb_reads: c_double,
    pub conflicts: c_double,
    pub duty_cycle: c_double,
    pub merged_dir: c_bool,
    pub homenode_read_accesses: c_double,
    pub homenode_write_accesses: c_double,
    pub homenode_read_hits: c_double,
    pub homenode_write_hits: c_double,
    pub homenode_read_misses: c_double,
    pub homenode_write_misses: c_double,
    pub dir_duty_cycle: c_double,
}

#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct system_L3 {
    pub L3_config: [c_double; 20],
    pub clockrate: c_int,
    pub ports: [c_int; 20],
    pub device_type: c_int,
    pub cache_policy: c_int,
    pub threeD_stack: [c_char; 20],
    pub buffer_sizes: [c_int; 20],
    pub vdd: c_double,
    pub power_gating_vcc: c_double,
    pub total_accesses: c_double,
    pub read_accesses: c_double,
    pub write_accesses: c_double,
    pub total_hits: c_double,
    pub total_misses: c_double,
    pub read_hits: c_double,
    pub write_hits: c_double,
    pub read_misses: c_double,
    pub write_misses: c_double,
    pub replacements: c_double,
    pub write_backs: c_double,
    pub miss_buffer_accesses: c_double,
    pub fill_buffer_accesses: c_double,
    pub prefetch_buffer_accesses: c_double,
    pub prefetch_buffer_writes: c_double,
    pub prefetch_buffer_reads: c_double,
    pub prefetch_buffer_hits: c_double,
    pub wbb_writes: c_double,
    pub wbb_reads: c_double,
    pub conflicts: c_double,
    pub duty_cycle: c_double,
    pub merged_dir: c_bool,
    pub homenode_read_accesses: c_double,
    pub homenode_write_accesses: c_double,
    pub homenode_read_hits: c_double,
    pub homenode_write_hits: c_double,
    pub homenode_read_misses: c_double,
    pub homenode_write_misses: c_double,
    pub dir_duty_cycle: c_double,
}

#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct xbar0_systemNoC {
    pub number_of_inputs_of_crossbars: c_int,
    pub number_of_outputs_of_crossbars: c_int,
    pub flit_bits: c_int,
    pub input_buffer_entries_per_port: c_int,
    pub ports_of_input_buffer: [c_int; 20],
    pub crossbar_accesses: c_double,
}

#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct system_NoC {
    pub clockrate: c_int,
    pub kind: c_bool, // type
    pub has_global_link: c_bool,
    pub topology: [c_char; 20],
    pub horizontal_nodes: c_int,
    pub vertical_nodes: c_int,
    pub link_throughput: c_int,
    pub link_latency: c_int,
    pub input_ports: c_int,
    pub output_ports: c_int,
    pub virtual_channel_per_port: c_int,
    pub flit_bits: c_int,
    pub input_buffer_entries_per_vc: c_int,
    pub ports_of_input_buffer: [c_int; 20],
    pub dual_pump: c_int,
    pub number_of_crossbars: c_int,
    pub crossbar_type: [c_char; 20],
    pub crosspoint_type: [c_char; 20],
    pub xbar0: xbar0_systemNoC,
    pub arbiter_type: c_int,
    pub chip_coverage: c_double,
    pub vdd: c_double,
    pub power_gating_vcc: c_double,
    pub total_accesses: c_double,
    pub duty_cycle: c_double,
    pub route_over_perc: c_double,
}

#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct system_mem {
    pub mem_tech_node: c_int,
    pub device_clock: c_int,
    pub peak_transfer_rate: c_int,
    pub internal_prefetch_of_DRAM_chip: c_int,
    pub capacity_per_channel: c_int,
    pub number_ranks: c_int,
    pub num_banks_of_DRAM_chip: c_int,
    pub Block_width_of_DRAM_chip: c_int,
    pub output_width_of_DRAM_chip: c_int,
    pub page_size_of_DRAM_chip: c_int,
    pub burstlength_of_DRAM_chip: c_int,
    pub memory_accesses: c_double,
    pub memory_reads: c_double,
    pub memory_writes: c_double,
}

#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct system_mc {
    pub peak_transfer_rate: c_double,
    pub number_mcs: c_int,
    pub withPHY: c_bool,
    pub kind: c_int, // type
    pub duty_cycle: c_double,
    pub total_load_perc: c_double,
    pub mc_clock: c_int,
    pub llc_line_length: c_int,
    pub memory_channels_per_mc: c_int,
    pub number_ranks: c_int,
    pub req_window_size_per_channel: c_int,
    pub IO_buffer_size_per_channel: c_int,
    pub databus_width: c_int,
    pub addressbus_width: c_int,
    pub LVDS: c_bool,
    pub vdd: c_double,
    pub power_gating_vcc: c_double,
    pub memory_accesses: c_double,
    pub memory_reads: c_double,
    pub memory_writes: c_double,
}

#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct system_niu {
    pub clockrate: c_int,
    pub number_units: c_int,
    pub kind: c_int, // type
    pub vdd: c_double,
    pub power_gating_vcc: c_double,
    pub duty_cycle: c_double,
    pub total_load_perc: c_double,
}

#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct system_pcie {
    pub clockrate: c_int,
    pub number_units: c_int,
    pub num_channels: c_int,
    pub kind: c_int, // type
    pub withPHY: c_bool,
    pub vdd: c_double,
    pub power_gating_vcc: c_double,
    pub duty_cycle: c_double,
    pub total_load_perc: c_double,
}

#[repr(C)]
pub struct root_system {
    pub number_of_cores: c_int,
    pub number_of_L1Directories: c_int,
    pub number_of_L2Directories: c_int,
    pub number_of_L2s: c_int,
    pub Private_L2: c_bool,
    pub number_of_L3s: c_int,
    pub number_of_NoCs: c_int,
    pub number_of_dir_levels: c_int,
    pub domain_size: c_int,
    pub first_level_dir: c_int,
    pub homogeneous_cores: c_int,
    pub homogeneous_L1Directories: c_int,
    pub homogeneous_L2Directories: c_int,
    pub core_tech_node: c_double,
    pub target_core_clockrate: c_int,
    pub target_chip_area: c_int,
    pub temperature: c_int,
    pub number_cache_levels: c_int,
    pub L1_property: c_int,
    pub L2_property: c_int,
    pub homogeneous_L2s: c_int,
    pub L3_property: c_int,
    pub homogeneous_L3s: c_int,
    pub homogeneous_NoCs: c_int,
    pub homogeneous_ccs: c_int,
    pub Max_area_deviation: c_int,
    pub Max_power_deviation: c_int,
    pub device_type: c_int,
    pub longer_channel_device: c_bool,
    pub power_gating: c_bool,
    pub Embedded: c_bool,
    pub opt_dynamic_power: c_bool,
    pub opt_lakage_power: c_bool,
    pub opt_clockrate: c_bool,
    pub opt_area: c_bool,
    pub interconnect_projection_type: c_int,
    pub machine_bits: c_int,
    pub virtual_address_width: c_int,
    pub physical_address_width: c_int,
    pub virtual_memory_page_size: c_int,
    pub total_cycles: c_double,
    pub vdd: c_double,
    pub power_gating_vcc: c_double,
    pub core: [system_core; 64],
    pub L1Directory: [system_L1Directory; 64],
    pub L2Directory: [system_L2Directory; 64],
    pub L2: [system_L2; 64],
    pub L3: [system_L3; 64],
    pub NoC: [system_NoC; 64],
    pub mem: system_mem,
    pub mc: system_mc,
    pub flashc: system_mc,
    pub niu: system_niu,
    pub pcie: system_pcie,
}