source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/src/Branch_Target_Buffer_Glue_genMealy_predict.cpp @ 78

Last change on this file since 78 was 78, checked in by rosiere, 16 years ago

Add :

  • Execute_loop (must be test systemC)
  • Prediction
    • Direction : predifined scheme
    • Branch Target Buffer
  • iFetch_unit
    • ifetch_queue
    • pc management
  • Decod_unit
    • coming soon : support for custom operation
  • Rename_unit
    • RAT
    • Free_list
    • Dependence RAW check
    • Load store unit pointer
  • New Environnement (hierarchy_memory will remove in a next version)


Modif :

  • Manage Custom Operation
  • All component in execute_loop to use the new statistics management

Not Finish :

  • Return Address Stack
  • Environnement
File size: 2.7 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id$
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/include/Branch_Target_Buffer_Glue.h"
10
11namespace morpheo {
12namespace behavioural {
13namespace core {
14namespace multi_front_end {
15namespace front_end {
16namespace prediction_unit {
17namespace branch_target_buffer {
18namespace branch_target_buffer_glue {
19
20#undef  FUNCTION
21#define FUNCTION "Branch_Target_Buffer_Glue::genMealy_predict"
22  void Branch_Target_Buffer_Glue::genMealy_predict (void)
23  {
24    log_printf(FUNC,Branch_Target_Buffer_Glue,FUNCTION,"Begin");
25
26    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
27      {
28        Tptr_t          index = (_param->_have_port_victim)?PORT_READ(in_PREDICT_SORT_INDEX [i]):0;
29        Tcontrol_t      hit   = PORT_READ(in_PREDICT_REGISTER_HIT         [i][index]);
30        Tgeneral_data_t addr  = PORT_READ(in_PREDICT_REGISTER_ADDRESS_SRC [i][index]);
31
32        // Multiplexor
33        PORT_WRITE(out_PREDICT_HIT          [i],hit);
34        PORT_WRITE(out_PREDICT_ADDRESS_SRC  [i],addr);
35        PORT_WRITE(out_PREDICT_ADDRESS_DEST [i],PORT_READ(in_PREDICT_REGISTER_ADDRESS_DEST  [i][index]));
36        PORT_WRITE(out_PREDICT_CONDITION    [i],PORT_READ(in_PREDICT_REGISTER_CONDITION     [i][index]));
37        PORT_WRITE(out_PREDICT_LAST_TAKE    [i],PORT_READ(in_PREDICT_REGISTER_LAST_TAKE     [i][index]));
38        PORT_WRITE(out_PREDICT_IS_ACCURATE  [i],PORT_READ(in_PREDICT_REGISTER_IS_ACCURATE   [i][index]));
39
40        Tcontrol_t val          = PORT_READ(in_PREDICT_VAL          [i]);
41        Tcontrol_t register_ack = PORT_READ(in_PREDICT_REGISTER_ACK [i]);
42        Tcontrol_t sort_val     = (_param->_have_port_victim)?PORT_READ(in_PREDICT_SORT_VAL   [i]):true;
43        Tcontrol_t victim_ack   = (_param->_have_port_victim)?PORT_READ(in_PREDICT_VICTIM_ACK [i]):true;
44       
45        PORT_WRITE(out_PREDICT_ACK            [i],         register_ack and sort_val and victim_ack);
46        PORT_WRITE(out_PREDICT_REGISTER_VAL   [i], val and                  sort_val and victim_ack);
47
48        if (_param->_have_port_victim)
49          {
50        PORT_WRITE(out_PREDICT_VICTIM_VAL     [i], val and register_ack and sort_val               );
51        PORT_WRITE(out_PREDICT_VICTIM_HIT     [i], hit);
52        if (not _param->_is_full_associative)
53        PORT_WRITE(out_PREDICT_VICTIM_ADDRESS [i], (addr >> _param->_shift_bank)&_param->_mask_bank);
54        PORT_WRITE(out_PREDICT_VICTIM_INDEX   [i], index);
55          }
56      }
57
58    log_printf(FUNC,Branch_Target_Buffer_Glue,FUNCTION,"End");
59  };
60
61}; // end namespace branch_target_buffer_glue
62}; // end namespace branch_target_buffer
63}; // end namespace prediction_unit
64}; // end namespace front_end
65}; // end namespace multi_front_end
66}; // end namespace core
67}; // end namespace behavioural
68}; // end namespace morpheo             
69#endif
Note: See TracBrowser for help on using the repository browser.