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_update.cpp @ 98

Last change on this file since 98 was 98, checked in by rosiere, 15 years ago

1) Fix bug (read unit, RAT -> write in R0, SPR desallocation ...)
2) Change VHDL Execute_queue -> use Generic/Queue?
3) Complete document on VHDL generation
4) Add soc test

  • Property svn:keywords set to Id
File size: 2.3 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Branch_Target_Buffer_Glue_genMealy_update.cpp 98 2008-12-31 10:18:08Z rosiere $
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_update"
22  void Branch_Target_Buffer_Glue::genMealy_update (void)
23  {
24    log_begin(Branch_Target_Buffer_Glue,FUNCTION);
25    log_function(Branch_Target_Buffer_Glue,FUNCTION,_name.c_str());
26
27    for (uint32_t i=0; i<_param->_nb_inst_update; i++)
28      {
29        log_printf(TRACE,Branch_Target_Buffer_Glue,FUNCTION,"  * UPDATE [%d]",i);
30
31        Tcontrol_t      val          = PORT_READ(in_UPDATE_VAL          [i]);
32        Tcontrol_t      register_ack = PORT_READ(in_UPDATE_REGISTER_ACK [i]);
33        Tcontrol_t      victim_ack   = (_param->_have_port_victim)?PORT_READ(in_UPDATE_VICTIM_ACK [i]):true;
34
35        log_printf(TRACE,Branch_Target_Buffer_Glue,FUNCTION,"    * val          : %d",val         );
36        log_printf(TRACE,Branch_Target_Buffer_Glue,FUNCTION,"    * register_ack : %d",register_ack);
37        log_printf(TRACE,Branch_Target_Buffer_Glue,FUNCTION,"    * victim_ack   : %d",victim_ack  );
38       
39        PORT_WRITE(out_UPDATE_ACK            [i],         register_ack and victim_ack);
40        PORT_WRITE(out_UPDATE_REGISTER_VAL   [i], val and                  victim_ack);
41
42        if (_param->_have_port_victim)
43          {
44        PORT_WRITE(out_UPDATE_VICTIM_VAL     [i], val and register_ack );
45        if (not _param->_is_full_associative)
46          {
47        Tgeneral_data_t address_src  = PORT_READ(in_UPDATE_ADDRESS_SRC  [i]);
48        log_printf(TRACE,Branch_Target_Buffer_Glue,FUNCTION,"    * address_src  : %.8x",address_src);
49
50        PORT_WRITE(out_UPDATE_VICTIM_ADDRESS [i], (address_src >> _param->_shift_bank)&_param->_mask_bank);
51          }
52          }
53      }
54
55    log_end(Branch_Target_Buffer_Glue,FUNCTION);
56  };
57
58}; // end namespace branch_target_buffer_glue
59}; // end namespace branch_target_buffer
60}; // end namespace prediction_unit
61}; // end namespace front_end
62}; // end namespace multi_front_end
63}; // end namespace core
64}; // end namespace behavioural
65}; // end namespace morpheo             
66#endif
Note: See TracBrowser for help on using the repository browser.