source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_allocation.cpp @ 82

Last change on this file since 82 was 82, checked in by rosiere, 16 years ago
  • support locale (now must "just" translate)
  • update all component with new test format
  • update all component with usage
  • New component : decod queue and prediction_unit
  • Property svn:keywords set to Id
File size: 6.7 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: RegisterFile_allocation.cpp 82 2008-05-01 16:48:45Z rosiere $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Generic/RegisterFile/include/RegisterFile.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace generic {
14namespace registerfile {
15
16
17  void RegisterFile::allocation (
18#ifdef STATISTICS
19                                 morpheo::behavioural::Parameters_Statistics * param_statistics
20#else
21                                 void
22#endif
23                                 )
24  {
25    std::string rename;
26
27    log_printf(FUNC,RegisterFile,"allocation","Begin");
28
29    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
30    {
31      in_CLOCK              = new SC_CLOCK           ("in_CLOCK" );
32      in_NRESET             = new SC_IN (Tcontrol_t) ("in_NRESET");
33    }
34    // ~~~~~[ Interface : "read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
35
36     in_READ_VAL         = new SC_IN (Tcontrol_t) * [_param->_nb_port_read];
37    out_READ_ACK         = new SC_OUT(Tcontrol_t) * [_param->_nb_port_read];
38    if (_param->_have_port_address == true)
39     in_READ_ADDRESS     = new SC_IN (Taddress_t) * [_param->_nb_port_read];
40    out_READ_DATA        = new SC_OUT(Tdata_t   ) * [_param->_nb_port_read];
41
42    for (uint32_t i=0; i<_param->_nb_port_read; i++)
43      { 
44        rename =  "in_READ_"+toString(i)+"_VAL"    ;
45         in_READ_VAL     [i]  = new SC_IN (Tcontrol_t) (rename.c_str());   
46        rename = "out_READ_"+toString(i)+"_ACK"    ;
47        out_READ_ACK     [i]  = new SC_OUT(Tcontrol_t) (rename.c_str());
48        if (_param->_have_port_address == true)
49          {
50        rename =  "in_READ_"+toString(i)+"_ADDRESS";
51         in_READ_ADDRESS [i]  = new SC_IN (Taddress_t) (rename.c_str());
52          }
53        rename = "out_READ_"+toString(i)+"_DATA"   ;
54        out_READ_DATA    [i]  = new SC_OUT(Tdata_t   ) (rename.c_str());
55      }
56
57    // ~~~~~[ Interface : "write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
58
59     in_WRITE_VAL        = new SC_IN (Tcontrol_t) * [_param->_nb_port_write];
60    out_WRITE_ACK        = new SC_OUT(Tcontrol_t) * [_param->_nb_port_write];
61    if (_param->_have_port_address == true)
62     in_WRITE_ADDRESS    = new SC_IN (Taddress_t) * [_param->_nb_port_write];
63     in_WRITE_DATA       = new SC_IN (Tdata_t   ) * [_param->_nb_port_write];
64   
65    for (uint32_t i=0; i<_param->_nb_port_write; i++)
66      {
67        rename =  "in_WRITE_"+toString(i)+"_VAL"    ;
68         in_WRITE_VAL     [i]  = new SC_IN (Tcontrol_t) (rename.c_str());
69        rename = "out_WRITE_"+toString(i)+"_ACK"    ;
70        out_WRITE_ACK     [i]  = new SC_OUT(Tcontrol_t) (rename.c_str());
71        if (_param->_have_port_address == true)
72          {
73        rename =  "in_WRITE_"+toString(i)+"_ADDRESS";
74         in_WRITE_ADDRESS [i]  = new SC_IN (Taddress_t) (rename.c_str());
75          }
76        rename =  "in_WRITE_"+toString(i)+"_DATA"   ;
77         in_WRITE_DATA    [i]  = new SC_IN (Tdata_t   ) (rename.c_str());
78      }
79
80    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                                                                               
81    if (_param->_instance == instance_RegisterFile_Monolithic)
82    // =====[ component_RegisterFile_Monolithic ]=========================
83      {
84        component_RegisterFile_Monolithic  = new morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::RegisterFile_Monolithic  ::RegisterFile_Monolithic   (_name.c_str()
85#ifdef STATISTICS
86                                                                                                                                                                               ,param_statistics
87#endif
88                                                                                                                                                                               ,_param->_param_registerfile_monolithic
89                                                                                                                                                                               ,_usage);
90       
91      }
92    else
93    // =====[ component_RegisterFile_Multi_Banked ]=======================
94      {
95        component_RegisterFile_Multi_Banked = new morpheo::behavioural::generic::registerfile::registerfile_multi_banked::RegisterFile_Multi_Banked::RegisterFile_Multi_Banked (_name.c_str()
96#ifdef STATISTICS
97                                                                                                                                                                                ,param_statistics
98#endif
99                                                                                                                                                                                ,_param->_param_registerfile_multi_banked
100                                                                                                                                                                                ,_usage);
101       
102      }
103    // ~~~~~[ Component - Instanciation ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
104
105    if (_param->_instance == instance_RegisterFile_Monolithic)
106    // =====[ Component_RegisterFile_Monolithic - Instanciation ]=========
107      {
108        (*(component_RegisterFile_Monolithic  ->in_CLOCK )) (*(in_CLOCK ));
109        (*(component_RegisterFile_Monolithic  ->in_NRESET)) (*(in_NRESET));
110       
111        for (uint32_t i=0; i<_param->_nb_port_read; i++)
112          { 
113            (*(component_RegisterFile_Monolithic  -> in_READ_VAL     [i])) (*( in_READ_VAL     [i]));   
114            (*(component_RegisterFile_Monolithic  ->out_READ_ACK     [i])) (*(out_READ_ACK     [i]));
115            if (_param->_have_port_address == true)
116            (*(component_RegisterFile_Monolithic  -> in_READ_ADDRESS [i])) (*( in_READ_ADDRESS [i]));
117            (*(component_RegisterFile_Monolithic  ->out_READ_DATA    [i])) (*(out_READ_DATA    [i]));
118          }
119       
120        for (uint32_t i=0; i<_param->_nb_port_write; i++)
121          {
122            (*(component_RegisterFile_Monolithic  -> in_WRITE_VAL     [i])) (*( in_WRITE_VAL     [i]));
123            (*(component_RegisterFile_Monolithic  ->out_WRITE_ACK     [i])) (*(out_WRITE_ACK     [i]));
124            if (_param->_have_port_address == true)
125            (*(component_RegisterFile_Monolithic  -> in_WRITE_ADDRESS [i])) (*( in_WRITE_ADDRESS [i]));
126            (*(component_RegisterFile_Monolithic  -> in_WRITE_DATA    [i])) (*( in_WRITE_DATA    [i]));
127          }
128      }
129    else
130    // =====[ Component_RegisterFile_Multi_Banked - Instanciation ]=======
131      {
132        (*(component_RegisterFile_Multi_Banked->in_CLOCK )) (*(in_CLOCK ));
133        (*(component_RegisterFile_Multi_Banked->in_NRESET)) (*(in_NRESET));
134       
135        for (uint32_t i=0; i<_param->_nb_port_read; i++)
136          { 
137            (*(component_RegisterFile_Multi_Banked-> in_READ_VAL     [i])) (*( in_READ_VAL     [i]));   
138            (*(component_RegisterFile_Multi_Banked->out_READ_ACK     [i])) (*(out_READ_ACK     [i]));
139            if (_param->_have_port_address == true)
140            (*(component_RegisterFile_Multi_Banked-> in_READ_ADDRESS [i])) (*( in_READ_ADDRESS [i]));
141            (*(component_RegisterFile_Multi_Banked->out_READ_DATA    [i])) (*(out_READ_DATA    [i]));
142          }
143       
144        for (uint32_t i=0; i<_param->_nb_port_write; i++)
145          {
146            (*(component_RegisterFile_Multi_Banked-> in_WRITE_VAL     [i])) (*( in_WRITE_VAL     [i]));
147            (*(component_RegisterFile_Multi_Banked->out_WRITE_ACK     [i])) (*(out_WRITE_ACK     [i]));
148            if (_param->_have_port_address == true)
149            (*(component_RegisterFile_Multi_Banked-> in_WRITE_ADDRESS [i])) (*( in_WRITE_ADDRESS [i]));
150            (*(component_RegisterFile_Multi_Banked-> in_WRITE_DATA    [i])) (*( in_WRITE_DATA    [i]));
151          }
152      }
153
154    if (_param->_instance == instance_RegisterFile_Monolithic)
155      _component = component_RegisterFile_Monolithic  ->_component;
156    else
157      _component = component_RegisterFile_Multi_Banked->_component;
158
159    log_printf(FUNC,RegisterFile,"allocation","End");
160  };
161
162}; // end namespace registerfile
163}; // end namespace generic
164
165}; // end namespace behavioural
166}; // end namespace morpheo             
167#endif
Note: See TracBrowser for help on using the repository browser.