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

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

1) Add new algo in ifetch queue
2) Add Cancel bit
3) new config

  • Property svn:keywords set to Id
File size: 10.7 KB
Line 
1/*
2 * $Id: Issue_queue_deallocation.cpp 136 2009-10-20 18:52:15Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/include/Issue_queue.h"
9#include "Behavioural/include/Allocation.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::deallocation"
21  void Issue_queue::deallocation (void)
22  {
23    log_begin(Issue_queue,FUNCTION);
24
25    if (usage_is_set(_usage,USE_SYSTEMC))
26      {
27        delete    in_CLOCK ;
28        delete    in_NRESET;
29
30        DELETE2_SIGNAL( in_ISSUE_IN_VAL                  ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],1                             );
31        DELETE2_SIGNAL(out_ISSUE_IN_ACK                  ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],1                             );
32        DELETE2_SIGNAL( in_ISSUE_IN_CONTEXT_ID           ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],_param->_size_context_id      );
33        DELETE2_SIGNAL( in_ISSUE_IN_FRONT_END_ID         ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],_param->_size_front_end_id    );
34        DELETE2_SIGNAL( in_ISSUE_IN_PACKET_ID            ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],_param->_size_rob_ptr         );
35        DELETE2_SIGNAL( in_ISSUE_IN_OPERATION            ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],_param->_size_operation       );
36        DELETE2_SIGNAL( in_ISSUE_IN_TYPE                 ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],_param->_size_type            );
37        DELETE2_SIGNAL( in_ISSUE_IN_STORE_QUEUE_PTR_WRITE,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],_param->_size_store_queue_ptr );
38        DELETE2_SIGNAL( in_ISSUE_IN_STORE_QUEUE_PTR_READ ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],_param->_size_store_queue_ptr );
39        DELETE2_SIGNAL( in_ISSUE_IN_STORE_QUEUE_EMPTY    ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],1);
40        DELETE2_SIGNAL( in_ISSUE_IN_LOAD_QUEUE_PTR_WRITE ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],_param->_size_load_queue_ptr  );
41        DELETE2_SIGNAL( in_ISSUE_IN_HAS_IMMEDIAT         ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],1                             );
42        DELETE2_SIGNAL( in_ISSUE_IN_IMMEDIAT             ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],_param->_size_general_data    );
43        DELETE2_SIGNAL( in_ISSUE_IN_READ_RA              ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],1                             );
44        DELETE2_SIGNAL( in_ISSUE_IN_NUM_REG_RA           ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],_param->_size_general_register);
45        DELETE2_SIGNAL( in_ISSUE_IN_READ_RB              ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],1                             );
46        DELETE2_SIGNAL( in_ISSUE_IN_NUM_REG_RB           ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],_param->_size_general_register);
47        DELETE2_SIGNAL( in_ISSUE_IN_READ_RC              ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],1                             );
48        DELETE2_SIGNAL( in_ISSUE_IN_NUM_REG_RC           ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],_param->_size_special_register);
49        DELETE2_SIGNAL( in_ISSUE_IN_WRITE_RD             ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],1                             );
50        DELETE2_SIGNAL( in_ISSUE_IN_NUM_REG_RD           ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],_param->_size_general_register);
51        DELETE2_SIGNAL( in_ISSUE_IN_WRITE_RE             ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],1                             );
52        DELETE2_SIGNAL( in_ISSUE_IN_NUM_REG_RE           ,_param->_nb_rename_unit, _param->_nb_inst_rename[it1],_param->_size_special_register);
53     
54        DELETE1_SIGNAL( in_REEXECUTE_VAL                  ,_param->_nb_inst_reexecute,1                             );
55        DELETE1_SIGNAL(out_REEXECUTE_ACK                  ,_param->_nb_inst_reexecute,1                             );
56        DELETE1_SIGNAL( in_REEXECUTE_CONTEXT_ID           ,_param->_nb_inst_reexecute,_param->_size_context_id      );
57        DELETE1_SIGNAL( in_REEXECUTE_FRONT_END_ID         ,_param->_nb_inst_reexecute,_param->_size_front_end_id    );
58        DELETE1_SIGNAL( in_REEXECUTE_PACKET_ID            ,_param->_nb_inst_reexecute,_param->_size_rob_ptr         );
59        DELETE1_SIGNAL( in_REEXECUTE_OPERATION            ,_param->_nb_inst_reexecute,_param->_size_operation       );
60        DELETE1_SIGNAL( in_REEXECUTE_TYPE                 ,_param->_nb_inst_reexecute,_param->_size_type            );
61        DELETE1_SIGNAL( in_REEXECUTE_STORE_QUEUE_PTR_WRITE,_param->_nb_inst_reexecute,_param->_size_store_queue_ptr );
62        DELETE1_SIGNAL( in_REEXECUTE_STORE_QUEUE_PTR_READ ,_param->_nb_inst_reexecute,_param->_size_store_queue_ptr );
63        DELETE1_SIGNAL( in_REEXECUTE_STORE_QUEUE_EMPTY    ,_param->_nb_inst_reexecute,1);
64        DELETE1_SIGNAL( in_REEXECUTE_LOAD_QUEUE_PTR_WRITE ,_param->_nb_inst_reexecute,_param->_size_load_queue_ptr  );
65        DELETE1_SIGNAL( in_REEXECUTE_HAS_IMMEDIAT         ,_param->_nb_inst_reexecute,1                             );
66        DELETE1_SIGNAL( in_REEXECUTE_IMMEDIAT             ,_param->_nb_inst_reexecute,_param->_size_general_data    );
67        DELETE1_SIGNAL( in_REEXECUTE_READ_RA              ,_param->_nb_inst_reexecute,1                             );
68        DELETE1_SIGNAL( in_REEXECUTE_NUM_REG_RA           ,_param->_nb_inst_reexecute,_param->_size_general_register);
69        DELETE1_SIGNAL( in_REEXECUTE_READ_RB              ,_param->_nb_inst_reexecute,1                             );
70        DELETE1_SIGNAL( in_REEXECUTE_NUM_REG_RB           ,_param->_nb_inst_reexecute,_param->_size_general_register);
71        DELETE1_SIGNAL( in_REEXECUTE_READ_RC              ,_param->_nb_inst_reexecute,1                             );
72        DELETE1_SIGNAL( in_REEXECUTE_NUM_REG_RC           ,_param->_nb_inst_reexecute,_param->_size_special_register);
73        DELETE1_SIGNAL( in_REEXECUTE_WRITE_RD             ,_param->_nb_inst_reexecute,1                             );
74        DELETE1_SIGNAL( in_REEXECUTE_NUM_REG_RD           ,_param->_nb_inst_reexecute,_param->_size_general_register);
75        DELETE1_SIGNAL( in_REEXECUTE_WRITE_RE             ,_param->_nb_inst_reexecute,1                             );
76        DELETE1_SIGNAL( in_REEXECUTE_NUM_REG_RE           ,_param->_nb_inst_reexecute,_param->_size_special_register);
77
78        DELETE1_SIGNAL(out_ISSUE_OUT_VAL                  ,_param->_nb_inst_issue,1                             );
79        DELETE1_SIGNAL( in_ISSUE_OUT_ACK                  ,_param->_nb_inst_issue,1                             );
80        DELETE1_SIGNAL(out_ISSUE_OUT_CONTEXT_ID           ,_param->_nb_inst_issue,_param->_size_context_id      );
81        DELETE1_SIGNAL(out_ISSUE_OUT_FRONT_END_ID         ,_param->_nb_inst_issue,_param->_size_front_end_id    );
82        DELETE1_SIGNAL(out_ISSUE_OUT_PACKET_ID            ,_param->_nb_inst_issue,_param->_size_rob_ptr         );
83        DELETE1_SIGNAL(out_ISSUE_OUT_OPERATION            ,_param->_nb_inst_issue,_param->_size_operation       );
84        DELETE1_SIGNAL(out_ISSUE_OUT_TYPE                 ,_param->_nb_inst_issue,_param->_size_type            );
85        DELETE1_SIGNAL(out_ISSUE_OUT_CANCEL               ,_param->_nb_inst_issue,1);
86        DELETE1_SIGNAL(out_ISSUE_OUT_STORE_QUEUE_PTR_WRITE,_param->_nb_inst_issue,_param->_size_store_queue_ptr );
87        DELETE1_SIGNAL(out_ISSUE_OUT_STORE_QUEUE_PTR_READ ,_param->_nb_inst_issue,_param->_size_store_queue_ptr );
88        DELETE1_SIGNAL(out_ISSUE_OUT_STORE_QUEUE_EMPTY    ,_param->_nb_inst_issue,1);
89        DELETE1_SIGNAL(out_ISSUE_OUT_LOAD_QUEUE_PTR_WRITE ,_param->_nb_inst_issue,_param->_size_load_queue_ptr  );
90        DELETE1_SIGNAL(out_ISSUE_OUT_HAS_IMMEDIAT         ,_param->_nb_inst_issue,1                             );
91        DELETE1_SIGNAL(out_ISSUE_OUT_IMMEDIAT             ,_param->_nb_inst_issue,_param->_size_general_data    );
92        DELETE1_SIGNAL(out_ISSUE_OUT_READ_RA              ,_param->_nb_inst_issue,1                             );
93        DELETE1_SIGNAL(out_ISSUE_OUT_NUM_REG_RA           ,_param->_nb_inst_issue,_param->_size_general_register);
94        DELETE1_SIGNAL(out_ISSUE_OUT_READ_RB              ,_param->_nb_inst_issue,1                             );
95        DELETE1_SIGNAL(out_ISSUE_OUT_NUM_REG_RB           ,_param->_nb_inst_issue,_param->_size_general_register);
96        DELETE1_SIGNAL(out_ISSUE_OUT_READ_RC              ,_param->_nb_inst_issue,1                             );
97        DELETE1_SIGNAL(out_ISSUE_OUT_NUM_REG_RC           ,_param->_nb_inst_issue,_param->_size_special_register);
98        DELETE1_SIGNAL(out_ISSUE_OUT_WRITE_RD             ,_param->_nb_inst_issue,1                             );
99        DELETE1_SIGNAL(out_ISSUE_OUT_NUM_REG_RD           ,_param->_nb_inst_issue,_param->_size_general_register);
100        DELETE1_SIGNAL(out_ISSUE_OUT_WRITE_RE             ,_param->_nb_inst_issue,1                             );
101        DELETE1_SIGNAL(out_ISSUE_OUT_NUM_REG_RE           ,_param->_nb_inst_issue,_param->_size_special_register);
102
103        // ~~~~~[ Registers ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
104        while (not _reexecute_queue.empty())
105          {
106            delete _reexecute_queue.front();
107            _reexecute_queue.pop_front();
108          }
109
110        DELETE1(_issue_queue                     ,_param->_nb_bank);
111       
112        // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
113        DELETE1(internal_ISSUE_OUT_VAL           ,_param->_nb_inst_issue);
114        DELETE1(internal_ISSUE_OUT_FROM_REEXECUTE,_param->_nb_inst_issue);
115        DELETE1(internal_ISSUE_OUT_NUM_BANK      ,_param->_nb_inst_issue);
116        DELETE1(internal_ISSUE_OUT_ENTRY         ,_param->_nb_inst_issue);
117
118        DELETE1(internal_REEXECUTE_ACK           ,_param->_nb_inst_reexecute);
119
120        if (_param->_queue_scheme == ISSUE_QUEUE_SCHEME_OUT_OF_ORDER)
121          {
122        DELETE1(internal_BANK_IN_ACK             ,_param->_nb_bank);
123        DELETE1(internal_BANK_IN_NUM_RENAME_UNIT ,_param->_nb_bank);
124        DELETE1(internal_BANK_IN_NUM_INST        ,_param->_nb_bank);
125          }
126        if (_param->_queue_scheme == ISSUE_QUEUE_SCHEME_IN_ORDER)
127          {
128        DELETE2(internal_ISSUE_IN_ACK            ,_param->_nb_rename_unit,_param->_nb_inst_rename[it1]);
129          }
130      }
131   
132    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
133   
134    delete    _priority_in ;
135    if (_param->_queue_scheme == ISSUE_QUEUE_SCHEME_OUT_OF_ORDER)
136      {
137        delete    _priority_out;
138        delete    _priority_reg;
139      }
140    delete    _component;
141
142    log_end(Issue_queue,FUNCTION);
143  };
144
145}; // end namespace issue_queue
146}; // end namespace ooo_engine
147}; // end namespace multi_ooo_engine
148}; // end namespace core
149
150}; // end namespace behavioural
151}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.