source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_unit_Glue/src/Rename_unit_Glue_genMealy_insert.cpp @ 145

Last change on this file since 145 was 145, checked in by rosiere, 14 years ago

1) add test with SPECINT2K
2) new config of Selftest
3) modif RAT to support multiple depth_save ... but not finish (need fix Update Prediction Table)
4) add Function_pointer but need fix

  • Property svn:keywords set to Id
File size: 4.7 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Rename_unit_Glue_genMealy_insert.cpp 145 2010-10-13 18:15:51Z rosiere $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_unit_Glue/include/Rename_unit_Glue.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace core {
14namespace multi_ooo_engine {
15namespace ooo_engine {
16namespace rename_unit {
17namespace rename_unit_glue {
18
19
20#undef  FUNCTION
21#define FUNCTION "Rename_unit_Glue::genMealy_insert"
22  void Rename_unit_Glue::genMealy_insert (void)
23  {
24    log_begin(Rename_unit_Glue,FUNCTION);
25    log_function(Rename_unit_Glue,FUNCTION,_name.c_str());
26
27    if (PORT_READ(in_NRESET))
28      {
29    for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
30      {
31       
32        Tcontext_t         FRONT_END_ID       = (_param->_have_port_front_end_id)?PORT_READ(in_INSERT_RENAME_SELECT_FRONT_END_ID [i]):0;
33        Tcontext_t         CONTEXT_ID         = (_param->_have_port_context_id  )?PORT_READ(in_INSERT_RENAME_SELECT_CONTEXT_ID   [i]):0;
34        Tdepth_t           DEPTH              = ((_param->_rat_scheme == RAT_DEPTH_SAVE) and _param->_have_port_depth)?PORT_READ(in_INSERT_RENAME_SELECT_DEPTH    [i]):0;
35        Tcontrol_t         SAVE_RAT           = ( _param->_rat_scheme == RAT_DEPTH_SAVE                              )?PORT_READ(in_INSERT_RENAME_SELECT_SAVE_RAT [i]):0;
36        Ttype_t            TYPE               = PORT_READ(in_INSERT_RENAME_SELECT_TYPE                      [i]);
37        Toperation_t       OPERATION          = PORT_READ(in_INSERT_RENAME_SELECT_OPERATION                 [i]);
38        Tgeneral_data_t    IMMEDIAT           = PORT_READ(in_INSERT_RENAME_SELECT_IMMEDIAT                  [i]);
39//      Texception_t       EXCEPTION_USE      = PORT_READ(in_INSERT_RENAME_SELECT_EXCEPTION_USE             [i]);
40        Texception_t       EXCEPTION          = PORT_READ(in_INSERT_RENAME_SELECT_EXCEPTION                 [i]);
41        Tspecial_address_t NUM_REG_RE_PHY_NEW = PORT_READ(in_INSERT_REGISTER_TRANSLATION_NUM_REG_RE_PHY_NEW [i]);
42        Tspr_t             SR                 = PORT_READ(in_SPR_READ_SR[FRONT_END_ID][CONTEXT_ID]);
43
44        switch (TYPE)
45          {
46          case TYPE_SPECIAL :
47            {
48              switch (OPERATION)
49                {
50                case OPERATION_SPECIAL_L_TRAP  :
51                  {
52#ifdef DEBUG_TEST
53                    if (IMMEDIAT > 32)
54                      throw ERRORMORPHEO(FUNCTION,_("Immediat is too high.\n"));
55#endif
56                   
57                    // Test if bit is set
58                    if ((SR>>IMMEDIAT)&1)
59                      EXCEPTION = EXCEPTION_TRAP;
60
61                    // Test
62                    break;
63                  }
64                case OPERATION_SPECIAL_L_MFSPR :
65                case OPERATION_SPECIAL_L_MTSPR :
66                  {
67                    // HACK : use the field num_reg_re to pass the SM and SUMRA flag.
68                    NUM_REG_RE_PHY_NEW = (
69                                          ((SR >> 16)&1) | // SUMRA
70                                          ((SR >>  0)&1)   // SM
71                                          );
72
73                    break;
74                  }
75                default :
76                  {
77                    break;
78                  }
79                }
80              break;
81            }
82          default :
83            {
84              break;
85            }
86          }
87
88       
89        if (_param->_have_port_front_end_id)
90          {
91        PORT_WRITE(out_INSERT_FRONT_END_ID                          [i],FRONT_END_ID      );
92        PORT_WRITE(out_INSERT_REGISTER_TRANSLATION_FRONT_END_ID     [i],FRONT_END_ID      );
93        PORT_WRITE(out_INSERT_LOAD_STORE_QUEUE_POINTER_FRONT_END_ID [i],FRONT_END_ID      );
94          }
95        if (_param->_have_port_context_id)
96          {
97        PORT_WRITE(out_INSERT_CONTEXT_ID                            [i],CONTEXT_ID        );
98        PORT_WRITE(out_INSERT_REGISTER_TRANSLATION_CONTEXT_ID       [i],CONTEXT_ID        );
99        PORT_WRITE(out_INSERT_LOAD_STORE_QUEUE_POINTER_CONTEXT_ID   [i],CONTEXT_ID        );
100          }     
101        if (_param->_rat_scheme == RAT_DEPTH_SAVE)
102          {
103        if (_param->_have_port_depth)
104          {
105        PORT_WRITE(out_INSERT_DEPTH                                 [i],DEPTH             );
106        PORT_WRITE(out_INSERT_REGISTER_TRANSLATION_DEPTH            [i],DEPTH             );
107          }
108        PORT_WRITE(out_INSERT_SAVE_RAT                              [i],SAVE_RAT          );
109        PORT_WRITE(out_INSERT_REGISTER_TRANSLATION_SAVE_RAT         [i],SAVE_RAT          );
110          }
111        PORT_WRITE(out_INSERT_TYPE                                  [i],TYPE              );
112        PORT_WRITE(out_INSERT_OPERATION                             [i],OPERATION         );
113        PORT_WRITE(out_INSERT_IMMEDIAT                              [i],IMMEDIAT          );
114//      PORT_WRITE(out_INSERT_EXCEPTION_USE                         [i],EXCEPTION_USE     );
115        PORT_WRITE(out_INSERT_EXCEPTION                             [i],EXCEPTION         );
116        PORT_WRITE(out_INSERT_NUM_REG_RE_PHY_NEW                    [i],NUM_REG_RE_PHY_NEW);
117        PORT_WRITE(out_INSERT_LOAD_STORE_QUEUE_POINTER_TYPE         [i],TYPE              );
118        PORT_WRITE(out_INSERT_LOAD_STORE_QUEUE_POINTER_OPERATION    [i],OPERATION         );
119      }
120      }
121
122    log_end(Rename_unit_Glue,FUNCTION);
123  };
124
125}; // end namespace rename_unit_glue
126}; // end namespace rename_unit
127}; // end namespace ooo_engine
128}; // end namespace multi_ooo_engine
129}; // end namespace core
130
131}; // end namespace behavioural
132}; // end namespace morpheo             
133#endif
Note: See TracBrowser for help on using the repository browser.