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

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

Almost complete design
with Test and test platform

  • Property svn:keywords set to Id
File size: 3.9 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Rename_unit_Glue_genMealy_insert.cpp 88 2008-12-10 18:31:39Z 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    for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
28      {
29       
30        Tcontext_t         FRONT_END_ID       = (_param->_have_port_front_end_id)?PORT_READ(in_INSERT_RENAME_SELECT_FRONT_END_ID [i]):0;
31        Tcontext_t         CONTEXT_ID         = (_param->_have_port_context_id  )?PORT_READ(in_INSERT_RENAME_SELECT_CONTEXT_ID   [i]):0;
32        Ttype_t            TYPE               = PORT_READ(in_INSERT_RENAME_SELECT_TYPE                      [i]);
33        Toperation_t       OPERATION          = PORT_READ(in_INSERT_RENAME_SELECT_OPERATION                 [i]);
34        Tgeneral_data_t    IMMEDIAT           = PORT_READ(in_INSERT_RENAME_SELECT_IMMEDIAT                  [i]);
35//      Texception_t       EXCEPTION_USE      = PORT_READ(in_INSERT_RENAME_SELECT_EXCEPTION_USE             [i]);
36        Texception_t       EXCEPTION          = PORT_READ(in_INSERT_RENAME_SELECT_EXCEPTION                 [i]);
37        Tspecial_address_t NUM_REG_RE_PHY_NEW = PORT_READ(in_INSERT_REGISTER_TRANSLATION_NUM_REG_RE_PHY_NEW [i]);
38        Tspr_t             SR                 = PORT_READ(in_SPR_READ_SR[FRONT_END_ID][CONTEXT_ID]);
39
40        switch (TYPE)
41          {
42          case TYPE_SPECIAL :
43            {
44              switch (OPERATION)
45                {
46                case OPERATION_SPECIAL_L_TRAP  :
47                  {
48#ifdef DEBUG_TEST
49                    if (IMMEDIAT > 32)
50                      throw ERRORMORPHEO(FUNCTION,_("Immediat is too high.\n"));
51#endif
52                   
53                    // Test if bit is set
54                    if ((SR>>IMMEDIAT)&1)
55                      EXCEPTION = EXCEPTION_TRAP;
56
57                    // Test
58                    break;
59                  }
60                case OPERATION_SPECIAL_L_MFSPR :
61                case OPERATION_SPECIAL_L_MTSPR :
62                  {
63                    // HACK : use the field num_reg_re to pass the SM and SUMRA flag.
64                    NUM_REG_RE_PHY_NEW = (
65                                          ((SR >> 16)&1) | // SUMRA
66                                          ((SR >>  0)&1)   // SM
67                                          );
68
69                    break;
70                  }
71                default :
72                  {
73                    break;
74                  }
75                }
76              break;
77            }
78          default :
79            {
80              break;
81            }
82          }
83
84       
85        if (_param->_have_port_front_end_id)
86          {
87        PORT_WRITE(out_INSERT_FRONT_END_ID                          [i],FRONT_END_ID      );
88        PORT_WRITE(out_INSERT_REGISTER_TRANSLATION_FRONT_END_ID     [i],FRONT_END_ID      );
89        PORT_WRITE(out_INSERT_LOAD_STORE_QUEUE_POINTER_FRONT_END_ID [i],FRONT_END_ID      );
90          }
91        if (_param->_have_port_context_id)
92          {
93        PORT_WRITE(out_INSERT_CONTEXT_ID                            [i],CONTEXT_ID        );
94        PORT_WRITE(out_INSERT_REGISTER_TRANSLATION_CONTEXT_ID       [i],CONTEXT_ID        );
95        PORT_WRITE(out_INSERT_LOAD_STORE_QUEUE_POINTER_CONTEXT_ID   [i],CONTEXT_ID        );
96          }
97        PORT_WRITE(out_INSERT_TYPE                                  [i],TYPE              );
98        PORT_WRITE(out_INSERT_OPERATION                             [i],OPERATION         );
99        PORT_WRITE(out_INSERT_IMMEDIAT                              [i],IMMEDIAT          );
100//      PORT_WRITE(out_INSERT_EXCEPTION_USE                         [i],EXCEPTION_USE     );
101        PORT_WRITE(out_INSERT_EXCEPTION                             [i],EXCEPTION         );
102        PORT_WRITE(out_INSERT_NUM_REG_RE_PHY_NEW                    [i],NUM_REG_RE_PHY_NEW);
103        PORT_WRITE(out_INSERT_LOAD_STORE_QUEUE_POINTER_TYPE         [i],TYPE              );
104        PORT_WRITE(out_INSERT_LOAD_STORE_QUEUE_POINTER_OPERATION    [i],OPERATION         );
105      }
106
107    log_end(Rename_unit_Glue,FUNCTION);
108  };
109
110}; // end namespace rename_unit_glue
111}; // end namespace rename_unit
112}; // end namespace ooo_engine
113}; // end namespace multi_ooo_engine
114}; // end namespace core
115
116}; // end namespace behavioural
117}; // end namespace morpheo             
118#endif
Note: See TracBrowser for help on using the repository browser.