source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Front_end_Glue/src/Front_end_Glue_allocation.cpp @ 108

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

1) decod_queue : add reg_LAST_SLOT.
2) Commit : insert on event -> to pop decod_queue. Head test : add information (speculative or not)
3) Context State / UPT : Branch miss and Load miss in same cycle.
4) Free List : Bank is on LSB not MSB.
5) Platforms : move data

  • Property svn:keywords set to Id
File size: 12.2 KB
Line 
1/*
2 * $Id: Front_end_Glue_allocation.cpp 108 2009-02-12 11:55:06Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Core/Multi_Front_end/Front_end/Front_end_Glue/include/Front_end_Glue.h"
9#include "Behavioural/include/Allocation.h"
10#include "Common/include/Max.h"
11
12namespace morpheo                    {
13namespace behavioural {
14namespace core {
15namespace multi_front_end {
16namespace front_end {
17namespace front_end_glue {
18
19
20
21#undef  FUNCTION
22#define FUNCTION "Front_end_Glue::allocation"
23  void Front_end_Glue::allocation (
24#ifdef STATISTICS
25                               morpheo::behavioural::Parameters_Statistics * param_statistics
26#else
27                               void
28#endif
29                               )
30  {
31    log_begin(Front_end_Glue,FUNCTION);
32
33    _component   = new Component (_usage);
34
35    Entity * entity = _component->set_entity (_name       
36                                              ,"Front_end_Glue"
37#ifdef POSITION
38                                              ,COMBINATORY
39#endif
40                                              );
41
42    _interfaces = entity->set_interfaces();
43
44    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
45    {
46      Interface * interface = _interfaces->set_interface(""
47#ifdef POSITION
48                                                         ,IN
49                                                         ,SOUTH,
50                                                         _("Generalist interface")
51#endif
52                                                         );
53     
54      in_CLOCK        = interface->set_signal_clk              ("clock" ,1, CLOCK_VHDL_YES);
55      in_NRESET       = interface->set_signal_in  <Tcontrol_t> ("nreset",1, RESET_VHDL_YES);
56    }
57
58    // ~~~~~[ Interface : "ifetch" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
59    {
60      ALLOC2_INTERFACE("ifetch",OUT,SOUTH,_("ifetch"),_param->_nb_decod_unit,_param->_decod_unit_nb_context [it1]);
61
62      _ALLOC2_SIGNAL_OUT(out_IFETCH_DECOD_UNIT_CONTEXT_ID                     ,"DECOD_UNIT_CONTEXT_ID"          ,Tcontext_t           ,_param->_size_context_id,_param->_nb_decod_unit,_param->_decod_unit_nb_context [it1]);
63    }
64
65    // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
66    {
67      ALLOC2_INTERFACE("decod",OUT,EAST,_("decod"),_param->_nb_decod_unit,_param->_nb_inst_decod[it1]);
68
69      _ALLOC2_SIGNAL_OUT(out_DECOD_CONTEXT_ID                                 ,"CONTEXT_ID"                     ,Tcontext_t           ,_param->_size_context_id,_param->_nb_decod_unit,_param->_nb_inst_decod[it1]);
70      _ALLOC2_SIGNAL_IN ( in_DECOD_DECOD_UNIT_CONTEXT_ID                      ,"DECOD_UNIT_CONTEXT_ID"          ,Tcontext_t           ,_param->_size_context_id,_param->_nb_decod_unit,_param->_nb_inst_decod[it1]);
71    }
72
73    // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
74    {
75      ALLOC1_INTERFACE("branch_complete",IN,EAST,_("branch_complete"),_param->_nb_inst_branch_complete);
76
77      ALLOC1_SIGNAL_IN  ( in_BRANCH_COMPLETE_VAL                              ,"VAL"                            ,Tcontrol_t           ,1);
78      ALLOC1_SIGNAL_OUT (out_BRANCH_COMPLETE_ACK                              ,"ACK"                            ,Tcontrol_t           ,1);
79      ALLOC1_SIGNAL_OUT (out_BRANCH_COMPLETE_MISS_PREDICTION                  ,"MISS_PREDICTION"                ,Tcontrol_t           ,1);
80     
81      ALLOC1_SIGNAL_OUT (out_BRANCH_COMPLETE_PREDICTION_UNIT_VAL              ,"PREDICTION_UNIT_VAL"            ,Tcontrol_t           ,1);
82      ALLOC1_SIGNAL_IN  ( in_BRANCH_COMPLETE_PREDICTION_UNIT_ACK              ,"PREDICTION_UNIT_ACK"            ,Tcontrol_t           ,1);
83      ALLOC1_SIGNAL_IN  ( in_BRANCH_COMPLETE_PREDICTION_UNIT_MISS_PREDICTION  ,"PREDICTION_UNIT_MISS_PREDICTION",Tcontrol_t           ,1);
84     
85      ALLOC1_SIGNAL_OUT (out_BRANCH_COMPLETE_CONTEXT_STATE_VAL                ,"CONTEXT_STATE_VAL"              ,Tcontrol_t           ,1);
86      ALLOC1_SIGNAL_IN  ( in_BRANCH_COMPLETE_CONTEXT_STATE_ACK                ,"CONTEXT_STATE_ACK"              ,Tcontrol_t           ,1);
87      ALLOC1_SIGNAL_OUT (out_BRANCH_COMPLETE_CONTEXT_STATE_MISS_PREDICTION    ,"CONTEXT_STATE_MISS_PREDICTION"  ,Tcontrol_t           ,1);
88    }
89
90    // ~~~~~[ Interface "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
91    {
92      ALLOC1_INTERFACE("event",OUT,EAST,_("event"),_param->_nb_context);
93
94      ALLOC1_SIGNAL_OUT (out_EVENT_VAL                                         ,"VAL"                           ,Tcontrol_t           ,1);
95      ALLOC1_SIGNAL_IN  ( in_EVENT_ACK                                         ,"ACK"                           ,Tcontrol_t           ,1);
96      ALLOC1_SIGNAL_OUT (out_EVENT_ADDRESS                                     ,"ADDRESS"                       ,Taddress_t           ,_param->_size_instruction_address);
97      ALLOC1_SIGNAL_OUT (out_EVENT_ADDRESS_NEXT                                ,"ADDRESS_NEXT"                  ,Taddress_t           ,_param->_size_instruction_address);
98      ALLOC1_SIGNAL_OUT (out_EVENT_ADDRESS_NEXT_VAL                            ,"ADDRESS_NEXT_VAL"              ,Tcontrol_t           ,1);
99      ALLOC1_SIGNAL_OUT (out_EVENT_IS_DS_TAKE                                  ,"IS_DS_TAKE"                    ,Tcontrol_t           ,1);
100                                                                                                           
101      ALLOC1_SIGNAL_OUT (out_EVENT_IFETCH_UNIT_VAL                             ,"IFETCH_UNIT_VAL"               ,Tcontrol_t           ,1);
102      ALLOC1_SIGNAL_IN  ( in_EVENT_IFETCH_UNIT_ACK                             ,"IFETCH_UNIT_ACK"               ,Tcontrol_t           ,1);
103      ALLOC1_SIGNAL_OUT (out_EVENT_IFETCH_UNIT_ADDRESS                         ,"IFETCH_UNIT_ADDRESS"           ,Taddress_t           ,_param->_size_instruction_address);
104      ALLOC1_SIGNAL_OUT (out_EVENT_IFETCH_UNIT_ADDRESS_NEXT                    ,"IFETCH_UNIT_ADDRESS_NEXT"      ,Taddress_t           ,_param->_size_instruction_address);
105      ALLOC1_SIGNAL_OUT (out_EVENT_IFETCH_UNIT_ADDRESS_NEXT_VAL                ,"IFETCH_UNIT_ADDRESS_NEXT_VAL"  ,Tcontrol_t           ,1);
106      ALLOC1_SIGNAL_OUT (out_EVENT_IFETCH_UNIT_IS_DS_TAKE                      ,"IFETCH_UNIT_IS_DS_TAKE"        ,Tcontrol_t           ,1);
107
108      ALLOC1_SIGNAL_OUT (out_EVENT_PREDICTION_UNIT_VAL                         ,"PREDICTION_UNIT_VAL"           ,Tcontrol_t           ,1);
109      ALLOC1_SIGNAL_IN  ( in_EVENT_PREDICTION_UNIT_ACK                         ,"PREDICTION_UNIT_ACK"           ,Tcontrol_t           ,1);
110      ALLOC1_SIGNAL_OUT (out_EVENT_PREDICTION_UNIT_TYPE                        ,"PREDICTION_UNIT_TYPE"          ,Tevent_type_t        ,_param->_size_event_type);
111      ALLOC1_SIGNAL_OUT (out_EVENT_PREDICTION_UNIT_DEPTH                       ,"PREDICTION_UNIT_DEPTH"         ,Tdepth_t             ,_param->_size_depth);
112                                                                                                           
113      ALLOC1_SIGNAL_IN  ( in_EVENT_CONTEXT_STATE_VAL                           ,"CONTEXT_STATE_VAL"             ,Tcontrol_t           ,1);
114      ALLOC1_SIGNAL_OUT (out_EVENT_CONTEXT_STATE_ACK                           ,"CONTEXT_STATE_ACK"             ,Tcontrol_t           ,1);
115      ALLOC1_SIGNAL_IN  ( in_EVENT_CONTEXT_STATE_ADDRESS                       ,"CONTEXT_STATE_ADDRESS"         ,Taddress_t           ,_param->_size_instruction_address);
116      ALLOC1_SIGNAL_IN  ( in_EVENT_CONTEXT_STATE_ADDRESS_NEXT                  ,"CONTEXT_STATE_ADDRESS_NEXT"    ,Taddress_t           ,_param->_size_instruction_address);
117      ALLOC1_SIGNAL_IN  ( in_EVENT_CONTEXT_STATE_ADDRESS_NEXT_VAL              ,"CONTEXT_STATE_ADDRESS_NEXT_VAL",Tcontrol_t           ,1);
118      ALLOC1_SIGNAL_IN  ( in_EVENT_CONTEXT_STATE_IS_DS_TAKE                    ,"CONTEXT_STATE_IS_DS_TAKE"      ,Tcontrol_t           ,1);
119      ALLOC1_SIGNAL_IN  ( in_EVENT_CONTEXT_STATE_TYPE                          ,"CONTEXT_STATE_TYPE"            ,Tevent_type_t        ,_param->_size_event_type);
120      ALLOC1_SIGNAL_IN  ( in_EVENT_CONTEXT_STATE_DEPTH                         ,"CONTEXT_STATE_DEPTH"           ,Tdepth_t             ,_param->_size_depth);
121
122    }
123
124    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
125    {
126      ALLOC1_INTERFACE("depth",OUT,EAST,_("depth"),_param->_nb_context);
127
128//    ALLOC1_SIGNAL_OUT (out_DEPTH_CURRENT                                     ,"CURRENT"                       ,Tdepth_t             ,_param->_size_depth  );
129      ALLOC1_SIGNAL_OUT (out_DEPTH_MIN                                         ,"MIN"                           ,Tdepth_t             ,_param->_size_depth  );
130      ALLOC1_SIGNAL_OUT (out_DEPTH_MAX                                         ,"MAX"                           ,Tdepth_t             ,_param->_size_depth  );
131      ALLOC1_SIGNAL_OUT (out_DEPTH_FULL                                        ,"FULL"                          ,Tcontrol_t           ,1);
132                                                                                                               
133      ALLOC1_SIGNAL_IN  ( in_DEPTH_PREDICTION_UNIT_VAL                         ,"PREDICTION_UNIT_VAL"           ,Tcontrol_t           ,1);
134      ALLOC1_SIGNAL_IN  ( in_DEPTH_PREDICTION_UNIT_CURRENT                     ,"PREDICTION_UNIT_CURRENT"       ,Tdepth_t             ,_param->_size_depth  );
135      ALLOC1_SIGNAL_IN  ( in_DEPTH_PREDICTION_UNIT_MIN                         ,"PREDICTION_UNIT_MIN"           ,Tdepth_t             ,_param->_size_depth  );
136      ALLOC1_SIGNAL_IN  ( in_DEPTH_PREDICTION_UNIT_MAX                         ,"PREDICTION_UNIT_MAX"           ,Tdepth_t             ,_param->_size_depth  );
137      ALLOC1_SIGNAL_IN  ( in_DEPTH_PREDICTION_UNIT_FULL                        ,"PREDICTION_UNIT_FULL"          ,Tcontrol_t           ,1);
138                                                                                                               
139      ALLOC1_SIGNAL_OUT (out_DEPTH_CONTEXT_STATE_MIN                           ,"CONTEXT_STATE_MIN"             ,Tdepth_t             ,_param->_size_depth  );
140    }
141    {
142      ALLOC2_INTERFACE("depth",OUT,EAST,_("depth"),_param->_nb_decod_unit,_param->_decod_unit_nb_context [it1]);
143
144//    _ALLOC2_SIGNAL_OUT(out_DEPTH_DECOD_UNIT_CURRENT                          ,"DECOD_UNIT_CURRENT"            ,Tdepth_t             ,_param->_size_depth  ,_param->_nb_decod_unit,_param->_decod_unit_nb_context [it1]);
145      _ALLOC2_SIGNAL_OUT(out_DEPTH_DECOD_UNIT_MIN                              ,"DECOD_UNIT_MIN"                ,Tdepth_t             ,_param->_size_depth  ,_param->_nb_decod_unit,_param->_decod_unit_nb_context [it1]);
146      _ALLOC2_SIGNAL_OUT(out_DEPTH_DECOD_UNIT_MAX                              ,"DECOD_UNIT_MAX"                ,Tdepth_t             ,_param->_size_depth  ,_param->_nb_decod_unit,_param->_decod_unit_nb_context [it1]);
147      _ALLOC2_SIGNAL_OUT(out_DEPTH_DECOD_UNIT_FULL                             ,"DECOD_UNIT_FULL"               ,Tcontrol_t           ,1                    ,_param->_nb_decod_unit,_param->_decod_unit_nb_context [it1]);
148    }
149
150    // ~~~~~[ Interface : "context" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
151    {
152      ALLOC2_INTERFACE("context",OUT,EAST,_("context"),_param->_nb_decod_unit,_param->_translate_context_id_from_decod_unit[it1].size());
153     
154      _ALLOC2_SIGNAL_OUT(out_CONTEXT_DECOD_UNIT_DEPTH_VAL                      ,"DECOD_UNIT_DEPTH_VAL"          ,Tcontrol_t           ,1                    ,_param->_nb_decod_unit,_param->_decod_unit_nb_context [it1]);
155      _ALLOC2_SIGNAL_OUT(out_CONTEXT_DECOD_UNIT_DEPTH                          ,"DECOD_UNIT_DEPTH"              ,Tdepth_t             ,_param->_size_depth  ,_param->_nb_decod_unit,_param->_decod_unit_nb_context [it1]);
156    }
157
158    // ~~~~~[ Interface : "nb_inst" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
159    {
160      ALLOC1_INTERFACE("nb_inst",OUT,EAST,_("nb inst"),_param->_nb_context);
161
162      ALLOC1_SIGNAL_OUT(out_NB_INST_DECOD_ALL                                  ,"DECOD_ALL"                     ,Tcounter_t           ,_param->_size_nb_inst_decod);
163      ALLOC1_SIGNAL_IN ( in_NB_INST_DECOD_UNIT_DECOD_ALL                       ,"DECOD_UNIT_DECOD_ALL"          ,Tcounter_t           ,_param->_size_nb_inst_decod);
164      ALLOC1_SIGNAL_OUT(out_NB_INST_CONTEXT_STATE_DECOD_ALL                    ,"CONTEXT_STATE_DECOD_ALL"       ,Tcounter_t           ,_param->_size_nb_inst_decod);
165    }
166
167    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
168
169#ifdef POSITION
170    if (usage_is_set(_usage,USE_POSITION))
171        _component->generate_file();
172#endif
173
174    log_end(Front_end_Glue,FUNCTION);
175  };
176
177}; // end namespace front_end_glue
178}; // end namespace front_end
179}; // end namespace multi_front_end
180}; // end namespace core
181
182}; // end namespace behavioural
183}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.