source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Issue_queue_function_in_order_transition.cpp

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

1) Correct bug in link two signal
2) Fix error detected with valgrind
3) modif distexe script

  • Property svn:keywords set to Id
File size: 5.2 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Issue_queue_function_in_order_transition.cpp 128 2009-06-26 08:43:23Z rosiere $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/include/Issue_queue.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace core {
14namespace multi_ooo_engine {
15namespace ooo_engine {
16namespace issue_queue {
17
18
19#undef  FUNCTION
20#define FUNCTION "Issue_queue::function_in_order_transition"
21  void Issue_queue::function_in_order_transition (void)
22  {
23    log_begin(Issue_queue,FUNCTION);
24    log_function(Issue_queue,FUNCTION,_name.c_str());
25
26    if (PORT_READ(in_NRESET) == 0)
27      {
28//      _priority_in ->reset();
29//      _priority_out->reset();
30//      _priority_reg->reset();
31       
32        for (uint32_t i=0; i<_param->_nb_bank; i++)
33          _issue_queue [i].clear();
34
35        reg_NUM_BANK_HEAD = 0;
36        reg_NUM_BANK_TAIL = 0;
37      }
38    else
39      {
40//      _priority_in ->transition();
41//      _priority_out->transition();
42//      _priority_reg->transition();
43
44        // ===================================================================
45        // =====[ ISSUE_IN ]==================================================
46        // ===================================================================
47        {
48          for (uint32_t i=0; i<_param->_nb_rename_unit; i++)
49            for (uint32_t j=0; j<_param->_nb_inst_rename[i]; j++)
50              if (PORT_READ(in_ISSUE_IN_VAL[i][j]) and internal_ISSUE_IN_ACK [i][j])
51                {
52                  uint32_t num_bank = reg_NUM_BANK_TAIL;
53                 
54                  log_printf(TRACE,Issue_queue,FUNCTION,"  * ISSUE_IN [%d][%d] - Transaction with bank [%d]",i,j,num_bank);
55                     
56#ifdef STATISTICS
57                  if (usage_is_set(_usage,USE_STATISTICS))
58                    (*_stat_nb_inst_issue_in [i]) ++;
59#endif
60                  entry_t * entry = new entry_t
61                    (
62                     (_param->_have_port_context_id    )?PORT_READ(in_ISSUE_IN_CONTEXT_ID            [i][j]):0,
63                     (_param->_have_port_front_end_id  )?PORT_READ(in_ISSUE_IN_FRONT_END_ID          [i][j]):0,
64                     (_param->_have_port_rob_ptr       )?PORT_READ(in_ISSUE_IN_PACKET_ID             [i][j]):0,
65                                                         PORT_READ(in_ISSUE_IN_OPERATION             [i][j]),
66                                                         PORT_READ(in_ISSUE_IN_TYPE                  [i][j]),
67                                                         PORT_READ(in_ISSUE_IN_STORE_QUEUE_PTR_WRITE [i][j]),
68                                                         PORT_READ(in_ISSUE_IN_STORE_QUEUE_PTR_READ  [i][j]),
69                                                         PORT_READ(in_ISSUE_IN_STORE_QUEUE_EMPTY     [i][j]),
70                     (_param->_have_port_load_queue_ptr)?PORT_READ(in_ISSUE_IN_LOAD_QUEUE_PTR_WRITE  [i][j]):0,
71                                                         PORT_READ(in_ISSUE_IN_HAS_IMMEDIAT          [i][j]),
72                                                         PORT_READ(in_ISSUE_IN_IMMEDIAT              [i][j]),
73                                                         PORT_READ(in_ISSUE_IN_READ_RA               [i][j]),
74                                                         PORT_READ(in_ISSUE_IN_NUM_REG_RA            [i][j]),
75                                                         PORT_READ(in_ISSUE_IN_READ_RB               [i][j]),
76                                                         PORT_READ(in_ISSUE_IN_NUM_REG_RB            [i][j]),
77                                                         PORT_READ(in_ISSUE_IN_READ_RC               [i][j]),
78                                                         PORT_READ(in_ISSUE_IN_NUM_REG_RC            [i][j]),
79                                                         PORT_READ(in_ISSUE_IN_WRITE_RD              [i][j]),
80                                                         PORT_READ(in_ISSUE_IN_NUM_REG_RD            [i][j]),
81                                                         PORT_READ(in_ISSUE_IN_WRITE_RE              [i][j]),
82                                                         PORT_READ(in_ISSUE_IN_NUM_REG_RE            [i][j])
83                     );
84                   
85                  _issue_queue [num_bank].push_back(entry);
86                 
87                  // Update pointer
88                  reg_NUM_BANK_TAIL = (reg_NUM_BANK_TAIL+1)%_param->_nb_bank;
89                }
90        }
91
92        // ===================================================================
93        // =====[ ISSUE_OUT ]=================================================
94        // ===================================================================
95
96        for (uint32_t i=0; i<_param->_nb_inst_issue; ++i)
97          if (internal_ISSUE_OUT_VAL [i] and PORT_READ(in_ISSUE_OUT_ACK [i]))
98            if (not internal_ISSUE_OUT_FROM_REEXECUTE [i])
99              {
100                entry_t * entry = internal_ISSUE_OUT_ENTRY    [i];
101               
102                // front ...
103                uint32_t  num_bank = internal_ISSUE_OUT_NUM_BANK [i];
104               
105                log_printf(TRACE,Issue_queue,FUNCTION,"  * ISSUE_OUT [%d] - From issue_queue [%d]",i,num_bank);
106               
107                delete entry;
108               
109                _issue_queue [num_bank].remove(entry);
110
111                reg_NUM_BANK_HEAD = (reg_NUM_BANK_HEAD+1)%_param->_nb_bank;
112              } 
113
114      }
115
116    log_end(Issue_queue,FUNCTION);
117  };
118
119}; // end namespace issue_queue
120}; // end namespace ooo_engine
121}; // end namespace multi_ooo_engine
122}; // end namespace core
123
124}; // end namespace behavioural
125}; // end namespace morpheo             
126#endif
Note: See TracBrowser for help on using the repository browser.