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

Last change on this file since 128 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: 4.8 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Issue_queue_function_out_of_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_out_of_order_transition"
21  void Issue_queue::function_out_of_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    else
36      {
37//      _priority_in ->transition();
38        _priority_out->transition();
39        _priority_reg->transition();
40
41        // ===================================================================
42        // =====[ ISSUE_IN ]==================================================
43        // ===================================================================
44
45        for (uint32_t i=0; i<_param->_nb_bank; i++)
46          if (internal_BANK_IN_ACK [i])
47            {
48              uint32_t x = internal_BANK_IN_NUM_RENAME_UNIT [i];
49              uint32_t y = internal_BANK_IN_NUM_INST [i];
50             
51              if (PORT_READ(in_ISSUE_IN_VAL[x][y]))
52                {
53                  log_printf(TRACE,Issue_queue,FUNCTION,"  * ISSUE_IN [%d] - Transaction with ISSUE_IN [%d][%d]",i,x,y);
54
55#ifdef STATISTICS
56                  if (usage_is_set(_usage,USE_STATISTICS))
57                    (*_stat_nb_inst_issue_in [x]) ++;
58#endif
59                  entry_t * entry = new entry_t
60                    (
61                     (_param->_have_port_context_id    )?PORT_READ(in_ISSUE_IN_CONTEXT_ID            [x][y]):0,
62                     (_param->_have_port_front_end_id  )?PORT_READ(in_ISSUE_IN_FRONT_END_ID          [x][y]):0,
63                     (_param->_have_port_rob_ptr       )?PORT_READ(in_ISSUE_IN_PACKET_ID             [x][y]):0,
64                                                         PORT_READ(in_ISSUE_IN_OPERATION             [x][y]),
65                                                         PORT_READ(in_ISSUE_IN_TYPE                  [x][y]),
66                                                         PORT_READ(in_ISSUE_IN_STORE_QUEUE_PTR_WRITE [x][y]),
67                                                         PORT_READ(in_ISSUE_IN_STORE_QUEUE_PTR_READ  [x][y]),
68                                                         PORT_READ(in_ISSUE_IN_STORE_QUEUE_EMPTY     [x][y]),
69                     (_param->_have_port_load_queue_ptr)?PORT_READ(in_ISSUE_IN_LOAD_QUEUE_PTR_WRITE  [x][y]):0,
70                                                         PORT_READ(in_ISSUE_IN_HAS_IMMEDIAT          [x][y]),
71                                                         PORT_READ(in_ISSUE_IN_IMMEDIAT              [x][y]),
72                                                         PORT_READ(in_ISSUE_IN_READ_RA               [x][y]),
73                                                         PORT_READ(in_ISSUE_IN_NUM_REG_RA            [x][y]),
74                                                         PORT_READ(in_ISSUE_IN_READ_RB               [x][y]),
75                                                         PORT_READ(in_ISSUE_IN_NUM_REG_RB            [x][y]),
76                                                         PORT_READ(in_ISSUE_IN_READ_RC               [x][y]),
77                                                         PORT_READ(in_ISSUE_IN_NUM_REG_RC            [x][y]),
78                                                         PORT_READ(in_ISSUE_IN_WRITE_RD              [x][y]),
79                                                         PORT_READ(in_ISSUE_IN_NUM_REG_RD            [x][y]),
80                                                         PORT_READ(in_ISSUE_IN_WRITE_RE              [x][y]),
81                                                         PORT_READ(in_ISSUE_IN_NUM_REG_RE            [x][y])
82                     );
83
84                  _issue_queue [i].push_back(entry);
85                }
86            }
87
88        // ===================================================================
89        // =====[ ISSUE_OUT ]=================================================
90        // ===================================================================
91
92        for (uint32_t i=0; i<_param->_nb_inst_issue; ++i)
93          if (internal_ISSUE_OUT_VAL [i] and PORT_READ(in_ISSUE_OUT_ACK [i]))
94            if (not internal_ISSUE_OUT_FROM_REEXECUTE [i])
95              {
96                entry_t * entry = internal_ISSUE_OUT_ENTRY    [i];
97               
98                // front ...
99                uint32_t  num_bank = internal_ISSUE_OUT_NUM_BANK [i];
100               
101                log_printf(TRACE,Issue_queue,FUNCTION,"  * ISSUE_OUT [%d] - From issue_queue [%d]",i,num_bank);
102               
103                delete entry;
104
105                _issue_queue [num_bank].remove(entry);
106              } 
107      }
108
109    log_end(Issue_queue,FUNCTION);
110  };
111
112}; // end namespace issue_queue
113}; // end namespace ooo_engine
114}; // end namespace multi_ooo_engine
115}; // end namespace core
116
117}; // end namespace behavioural
118}; // end namespace morpheo             
119#endif
Note: See TracBrowser for help on using the repository browser.