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 @ 139

Last change on this file since 139 was 139, checked in by rosiere, 14 years ago
  • Add test for all configuration
  • RAT : add rat scheme (depth_save)
  • Property svn:keywords set to Id
File size: 4.4 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Rename_unit_Glue_genMealy_insert.cpp 139 2010-07-30 14:47:27Z 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        Ttype_t            TYPE               = PORT_READ(in_INSERT_RENAME_SELECT_TYPE                      [i]);
36        Toperation_t       OPERATION          = PORT_READ(in_INSERT_RENAME_SELECT_OPERATION                 [i]);
37        Tgeneral_data_t    IMMEDIAT           = PORT_READ(in_INSERT_RENAME_SELECT_IMMEDIAT                  [i]);
38//      Texception_t       EXCEPTION_USE      = PORT_READ(in_INSERT_RENAME_SELECT_EXCEPTION_USE             [i]);
39        Texception_t       EXCEPTION          = PORT_READ(in_INSERT_RENAME_SELECT_EXCEPTION                 [i]);
40        Tspecial_address_t NUM_REG_RE_PHY_NEW = PORT_READ(in_INSERT_REGISTER_TRANSLATION_NUM_REG_RE_PHY_NEW [i]);
41        Tspr_t             SR                 = PORT_READ(in_SPR_READ_SR[FRONT_END_ID][CONTEXT_ID]);
42
43        switch (TYPE)
44          {
45          case TYPE_SPECIAL :
46            {
47              switch (OPERATION)
48                {
49                case OPERATION_SPECIAL_L_TRAP  :
50                  {
51#ifdef DEBUG_TEST
52                    if (IMMEDIAT > 32)
53                      throw ERRORMORPHEO(FUNCTION,_("Immediat is too high.\n"));
54#endif
55                   
56                    // Test if bit is set
57                    if ((SR>>IMMEDIAT)&1)
58                      EXCEPTION = EXCEPTION_TRAP;
59
60                    // Test
61                    break;
62                  }
63                case OPERATION_SPECIAL_L_MFSPR :
64                case OPERATION_SPECIAL_L_MTSPR :
65                  {
66                    // HACK : use the field num_reg_re to pass the SM and SUMRA flag.
67                    NUM_REG_RE_PHY_NEW = (
68                                          ((SR >> 16)&1) | // SUMRA
69                                          ((SR >>  0)&1)   // SM
70                                          );
71
72                    break;
73                  }
74                default :
75                  {
76                    break;
77                  }
78                }
79              break;
80            }
81          default :
82            {
83              break;
84            }
85          }
86
87       
88        if (_param->_have_port_front_end_id)
89          {
90        PORT_WRITE(out_INSERT_FRONT_END_ID                          [i],FRONT_END_ID      );
91        PORT_WRITE(out_INSERT_REGISTER_TRANSLATION_FRONT_END_ID     [i],FRONT_END_ID      );
92        PORT_WRITE(out_INSERT_LOAD_STORE_QUEUE_POINTER_FRONT_END_ID [i],FRONT_END_ID      );
93          }
94        if (_param->_have_port_context_id)
95          {
96        PORT_WRITE(out_INSERT_CONTEXT_ID                            [i],CONTEXT_ID        );
97        PORT_WRITE(out_INSERT_REGISTER_TRANSLATION_CONTEXT_ID       [i],CONTEXT_ID        );
98        PORT_WRITE(out_INSERT_LOAD_STORE_QUEUE_POINTER_CONTEXT_ID   [i],CONTEXT_ID        );
99          }
100        if (_param->_have_port_depth and (_param->_rat_scheme == RAT_DEPTH_SAVE))
101          {
102        PORT_WRITE(out_INSERT_DEPTH                                 [i],DEPTH             );
103        PORT_WRITE(out_INSERT_REGISTER_TRANSLATION_DEPTH            [i],DEPTH             );
104          }
105        PORT_WRITE(out_INSERT_TYPE                                  [i],TYPE              );
106        PORT_WRITE(out_INSERT_OPERATION                             [i],OPERATION         );
107        PORT_WRITE(out_INSERT_IMMEDIAT                              [i],IMMEDIAT          );
108//      PORT_WRITE(out_INSERT_EXCEPTION_USE                         [i],EXCEPTION_USE     );
109        PORT_WRITE(out_INSERT_EXCEPTION                             [i],EXCEPTION         );
110        PORT_WRITE(out_INSERT_NUM_REG_RE_PHY_NEW                    [i],NUM_REG_RE_PHY_NEW);
111        PORT_WRITE(out_INSERT_LOAD_STORE_QUEUE_POINTER_TYPE         [i],TYPE              );
112        PORT_WRITE(out_INSERT_LOAD_STORE_QUEUE_POINTER_OPERATION    [i],OPERATION         );
113      }
114      }
115
116    log_end(Rename_unit_Glue,FUNCTION);
117  };
118
119}; // end namespace rename_unit_glue
120}; // end namespace rename_unit
121}; // end namespace ooo_engine
122}; // end namespace multi_ooo_engine
123}; // end namespace core
124
125}; // end namespace behavioural
126}; // end namespace morpheo             
127#endif
Note: See TracBrowser for help on using the repository browser.