source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_genMealy_pop.cpp @ 109

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

1) Configuration : instance configuration file : regroup similar instance
2) Configuration : timing default = 0
3) Debug/Commit_unit : Add watch dog timer
4) Issue_queue : Test parameters : add test if type is optionnal
5) Cor_glue : Fix insert index
6) Free_list : remove bank_by_pop (else deadlock)
7) Update Free List : add register to source event

  • Property svn:keywords set to Id
File size: 6.5 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Free_List_unit_genMealy_pop.cpp 109 2009-02-16 20:28:31Z rosiere $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/include/Free_List_unit.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace core {
14namespace multi_ooo_engine {
15namespace ooo_engine {
16namespace rename_unit {
17namespace register_translation_unit {
18namespace free_list_unit {
19
20
21#undef  FUNCTION
22#define FUNCTION "Free_List_unit::genMealy_pop"
23  void Free_List_unit::genMealy_pop (void)
24  {
25    log_begin(Free_List_unit,FUNCTION);
26    log_function(Free_List_unit,FUNCTION,_name.c_str());
27
28    std::list<generic::priority::select_t> * select_gpr = _priority_gpr->select();
29    std::list<generic::priority::select_t>::iterator it_gpr=select_gpr->begin();
30
31    std::list<generic::priority::select_t> * select_spr = _priority_spr->select();
32    std::list<generic::priority::select_t>::iterator it_spr=select_spr->begin();
33
34    for (uint32_t i=0; i<_param->_nb_pop; i++)
35      {
36        log_printf(TRACE,Free_List_unit,FUNCTION,"  * POP [%d]",i);
37       
38        // GPR
39        bool gpr_ack = not PORT_READ(in_POP_GPR_VAL[i]);
40       
41        log_printf(TRACE,Free_List_unit,FUNCTION,"    * GPR_VAL : %d",PORT_READ(in_POP_GPR_VAL[i]));
42       
43        if (not gpr_ack)
44          {
45            // scan all bank
46            for (;
47                 it_gpr!=select_gpr->end();
48                 ++it_gpr)
49              {
50                uint32_t num_bank = it_gpr->grp;
51               
52                log_printf(TRACE,Free_List_unit,FUNCTION,"    * num_bank: %d",num_bank);
53               
54                if (not _gpr_list[num_bank].empty())
55                  {
56                    // find
57                    log_printf(TRACE,Free_List_unit,FUNCTION,"    * find    : %d",_gpr_list[num_bank].front());
58                   
59                    gpr_ack = true;
60                    internal_POP_GPR_BANK [i] = num_bank;
61                    PORT_WRITE(out_POP_GPR_NUM_REG [i],
62                               //(num_bank << _param->_shift) | // only in VHDL
63                               _gpr_list[num_bank].front());
64                 
65                    ++it_gpr;
66                    break;
67                  }
68              }
69          }
70
71        // SPR
72        bool spr_ack = not PORT_READ(in_POP_SPR_VAL[i]);
73       
74        log_printf(TRACE,Free_List_unit,FUNCTION,"    * SPR_VAL : %d",PORT_READ(in_POP_SPR_VAL[i]));
75       
76        if (not spr_ack)
77          {
78            // scan all bank
79            for (;
80                 it_spr!=select_spr->end();
81                 ++it_spr)
82              {
83                uint32_t num_bank = it_spr->grp;
84               
85                log_printf(TRACE,Free_List_unit,FUNCTION,"    * num_bank: %d",num_bank);
86               
87                if (not _spr_list[num_bank].empty())
88                  {
89                    // find
90                    log_printf(TRACE,Free_List_unit,FUNCTION,"    * find    : %d",_spr_list[num_bank].front());
91                   
92                    spr_ack = true;
93                    internal_POP_SPR_BANK [i] = num_bank;
94                    PORT_WRITE(out_POP_SPR_NUM_REG [i],
95                               //(num_bank << _param->_shift) | // only in VHDL
96                               _spr_list[num_bank].front());
97                 
98                    ++it_spr;
99                    break;
100                  }
101              }
102          }
103
104
105        internal_POP_ACK [i] = gpr_ack and spr_ack;
106        PORT_WRITE(out_POP_ACK [i], internal_POP_ACK [i]);
107      }
108
109//     for (uint32_t i=0; i<_param->_nb_pop; i++)
110//       {
111//         log_printf(TRACE,Free_List_unit,FUNCTION,"  * POP [%d]",i);
112       
113//      uint32_t offset = (i*_param->_nb_bank_by_pop) + reg_BANK_PRIORITY;
114
115//      // GPR
116//      bool gpr_ack = not PORT_READ(in_POP_GPR_VAL[i]);
117
118//         log_printf(TRACE,Free_List_unit,FUNCTION,"    * GPR_VAL : %d",PORT_READ(in_POP_GPR_VAL[i]));
119
120//      if (not gpr_ack)
121//           {
122//             for (uint32_t j=0; j<_param->_nb_bank_by_pop; j++)
123//               {
124//                 uint32_t bank = (offset+((j+reg_BANK_BY_POP_PRIORITY)%_param->_nb_bank_by_pop))%_param->_nb_bank;
125               
126//                 log_printf(TRACE,Free_List_unit,FUNCTION,"    * bank    : %d",bank);
127               
128//                 if (not _gpr_list[bank].empty())
129//                   {
130//                     // find
131//                     log_printf(TRACE,Free_List_unit,FUNCTION,"    * find    : %d",_gpr_list[bank].front());
132                   
133//                     gpr_ack = true;
134//                     internal_POP_GPR_BANK [i] = bank;
135//                     PORT_WRITE(out_POP_GPR_NUM_REG [i],
136//                                //(bank << _param->_shift) | // only in VHDL
137//                                _gpr_list[bank].front());
138                   
139//                     break;
140//                   }
141//               }
142//           }
143
144//      // SPR
145//      bool spr_ack = not PORT_READ(in_POP_SPR_VAL[i]);
146       
147//         log_printf(TRACE,Free_List_unit,FUNCTION,"    * SPR_VAL : %d",PORT_READ(in_POP_SPR_VAL[i]));
148       
149//      if (not spr_ack)
150//           {
151//             uint32_t offset = (i*_param->_nb_bank_by_pop) + reg_BANK_PRIORITY;
152
153//             for (uint32_t j=0; j<_param->_nb_bank_by_pop; j++)
154//               {
155//                 uint32_t bank = (offset+((j+reg_BANK_BY_POP_PRIORITY)%_param->_nb_bank_by_pop))%_param->_nb_bank;
156               
157//                 log_printf(TRACE,Free_List_unit,FUNCTION,"    * bank    : %d",bank);
158               
159//                 if (not _spr_list[bank].empty())
160//                   {
161//                     // find
162//                     log_printf(TRACE,Free_List_unit,FUNCTION,"    * find    : %d",_spr_list[bank].front());
163                   
164//                     spr_ack = true;
165//                     internal_POP_SPR_BANK [i] = bank;
166//                     PORT_WRITE(out_POP_SPR_NUM_REG [i],
167//                                //(bank << _param->_shift) | // only in VHDL
168//                                _spr_list[bank].front());
169                   
170//                     break;
171//                   }
172//               }
173//           }
174
175//      internal_POP_ACK [i] = gpr_ack and spr_ack;
176       
177//      PORT_WRITE(out_POP_ACK [i], internal_POP_ACK [i]);
178//       }
179   
180
181    log_end(Free_List_unit,FUNCTION);
182  };
183
184}; // end namespace free_list_unit
185}; // end namespace register_translation_unit
186}; // end namespace rename_unit
187}; // end namespace ooo_engine
188}; // end namespace multi_ooo_engine
189}; // end namespace core
190
191}; // end namespace behavioural
192}; // end namespace morpheo             
193#endif
Note: See TracBrowser for help on using the repository browser.