source: trunk/IPs/systemC/Environment/include/Environment_Parameters.h @ 117

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

1) Platforms : add new organization for test
2) Load_Store_Unit : add array to count nb_check in store_queue
3) Issue_queue and Core_Glue : rewrite the issue network
4) Special_Register_Unit : add reset value to register CID
5) Softwares : add multicontext test
6) Softwares : add SPECINT
7) Softwares : add MiBench?
7) Read_queue : inhib access for r0
8) Change Core_Glue (network) - dont yet support priority and load balancing scheme

  • Property svn:keywords set to Id
File size: 12.4 KB
Line 
1#ifndef ENVIRONMENT_PARAMETERS_H
2#define ENVIRONMENT_PARAMETERS_H
3
4#include "../Cache/include/Cache_Parameters.h"
5#include "../Data/include/Data_Parameters.h"
6#include "../Queue/include/Parameters.h"
7#include "../TTY/include/TTY_Parameters.h"
8#include "../RamLock/include/RamLock_Parameters.h"
9#include "../Sim2OS/include/Sim2OS_Parameters.h"
10#include "../../processor/Morpheo/Common/include/ToString.h"
11
12namespace environment {
13
14  class Parameters
15  {
16  public : uint32_t                nb_thread               ;
17  public : uint32_t                nb_iport                ;
18  public : uint32_t                nb_dport                ;
19  public : uint32_t                nb_entity               ;
20  public : uint32_t              * icache_dedicated_nb_port; //[nb_entity]
21  public : uint32_t              * dcache_dedicated_nb_port; //[nb_entity]
22                               
23  public : uint32_t              * iaccess_nb_context      ; //[nb_entity]
24  public : uint32_t              * iaccess_nb_packet       ; //[nb_entity]
25  public : uint32_t              * iaccess_size_address    ; //[nb_entity]
26  public : uint32_t              * iaccess_nb_instruction  ; //[nb_entity]
27  public : uint32_t              * iaccess_size_instruction; //[nb_entity]
28                               
29  public : uint32_t              * daccess_nb_context      ; //[nb_entity]
30  public : uint32_t              * daccess_nb_packet       ; //[nb_entity]
31  public : uint32_t              * daccess_size_address    ; //[nb_entity]
32  public : uint32_t              * daccess_size_data       ; //[nb_entity]
33
34    // Parameters cache
35  public : cache::Parameters     * param_cache             ;
36    // Parameters tty
37  public : uint32_t                nb_component_tty        ;
38  public : uint32_t              * tty_address             ; //[nb_component_tty]
39  public : tty::Parameters      ** param_tty               ; //[nb_component_tty]
40    // Parameters ramlock
41  public : uint32_t                nb_component_ramlock    ;
42  public : uint32_t              * ramlock_address         ; //[nb_component_ramlock]
43  public : ramlock::Parameters  ** param_ramlock           ; //[nb_component_ramlock]
44    // Parameters sim2OS
45  public : uint32_t                sim2os_address          ;
46  public : uint32_t                sim2os_size             ;
47  public : sim2os::Parameters    * param_sim2os            ;
48    // Parameters data
49  public : data::Parameters      * param_data              ;
50
51    // Parameters buffer_respons
52  public : queue::Parameters    ** param_buffer_irsp       ; //[nb_entity]
53  public : queue::Parameters    ** param_buffer_drsp       ; //[nb_entity]
54
55  public : Parameters (// General
56                       uint32_t    nb_thread,
57                       uint32_t    nb_cache_dedicated,
58                       
59                       uint32_t  * iaccess_nb_context,
60                       uint32_t  * iaccess_nb_instruction,
61                       uint32_t  * iaccess_nb_packet,
62                       uint32_t  * iaccess_size_address,
63                       uint32_t  * iaccess_size_instruction,
64
65                       uint32_t  * daccess_nb_context,
66                       uint32_t  * daccess_nb_packet,
67                       uint32_t  * daccess_size_address,
68                       uint32_t  * daccess_size_data,
69
70                       // buffer
71                       uint32_t  * buffer_irsp_size,
72                       uint32_t  * buffer_drsp_size,
73                       
74                       // Cache
75                       uint32_t  * icache_dedicated_nb_level     ,
76                       uint32_t  * icache_dedicated_nb_port      ,
77                       uint32_t ** icache_dedicated_nb_line      ,
78                       uint32_t ** icache_dedicated_size_line    ,
79                       uint32_t ** icache_dedicated_size_word    ,
80                       uint32_t ** icache_dedicated_associativity,
81                       uint32_t ** icache_dedicated_hit_latence  ,
82                       uint32_t ** icache_dedicated_miss_penality,
83                       uint32_t  * dcache_dedicated_nb_level     ,
84                       uint32_t  * dcache_dedicated_nb_port      ,
85                       uint32_t ** dcache_dedicated_nb_line      ,
86                       uint32_t ** dcache_dedicated_size_line    ,
87                       uint32_t ** dcache_dedicated_size_word    ,
88                       uint32_t ** dcache_dedicated_associativity,
89                       uint32_t ** dcache_dedicated_hit_latence  ,
90                       uint32_t ** dcache_dedicated_miss_penality,
91                       uint32_t    cache_shared_nb_level         ,
92//                     uint32_t    cache_shared_nb_port          ,
93                       uint32_t  * cache_shared_nb_line          ,
94                       uint32_t  * cache_shared_size_line        ,
95                       uint32_t  * cache_shared_size_word        ,
96                       uint32_t  * cache_shared_associativity    ,
97                       uint32_t  * cache_shared_hit_latence      ,
98                       uint32_t  * cache_shared_miss_penality    ,
99
100                       // TTY
101                       uint32_t       nb_component_tty,
102                       uint32_t     * tty_address,
103                       uint32_t     * nb_tty,
104                       std::string ** name_tty,
105                       bool           with_xtty,
106
107                       // RAMLOCK
108                       uint32_t       nb_component_ramlock,
109                       uint32_t     * ramlock_address,
110                       uint32_t     * nb_lock,
111
112                       // SIM2OS
113                       uint32_t       sim2os_address,
114                       uint32_t       sim2os_size,
115                       SOCLIB_SEGMENT_TABLE * segment_table
116                       )
117    {
118      this->nb_thread                = nb_thread;
119      this->nb_entity                = nb_cache_dedicated;
120
121      this->icache_dedicated_nb_port = icache_dedicated_nb_port;
122      this->dcache_dedicated_nb_port = dcache_dedicated_nb_port;
123
124      this->iaccess_nb_context       = iaccess_nb_context      ;
125      this->iaccess_nb_instruction   = iaccess_nb_instruction  ;
126      this->iaccess_nb_packet        = iaccess_nb_packet       ;
127      this->iaccess_size_address     = iaccess_size_address    ;
128      this->iaccess_size_instruction = iaccess_size_instruction;
129      this->daccess_nb_context       = daccess_nb_context      ;
130      this->daccess_nb_packet        = daccess_nb_packet       ;
131      this->daccess_size_address     = daccess_size_address    ;
132      this->daccess_size_data        = daccess_size_data       ;
133
134      param_cache = new cache::Parameters
135        (nb_cache_dedicated            ,
136         icache_dedicated_nb_level     ,
137         icache_dedicated_nb_port      ,
138         icache_dedicated_nb_line      ,
139         icache_dedicated_size_line    ,
140         icache_dedicated_size_word    ,
141         icache_dedicated_associativity,
142         icache_dedicated_hit_latence  ,
143         icache_dedicated_miss_penality,
144         dcache_dedicated_nb_level     ,
145         dcache_dedicated_nb_port      ,
146         dcache_dedicated_nb_line      ,
147         dcache_dedicated_size_line    ,
148         dcache_dedicated_size_word    ,
149         dcache_dedicated_associativity,
150         dcache_dedicated_hit_latence  ,
151         dcache_dedicated_miss_penality,
152         cache_shared_nb_level         ,
153//       cache_shared_nb_port          ,
154         cache_shared_nb_line          ,
155         cache_shared_size_line        ,
156         cache_shared_size_word        ,
157         cache_shared_associativity    ,
158         cache_shared_hit_latence      ,
159         cache_shared_miss_penality   
160         );
161
162      nb_iport = 0;
163      nb_dport = 0;
164      for (uint32_t i=0; i<nb_cache_dedicated; i++)
165        {
166          nb_iport += icache_dedicated_nb_port [i];
167          nb_dport += dcache_dedicated_nb_port [i];
168        }
169
170      this->nb_component_tty = nb_component_tty;
171      this->tty_address      = tty_address;
172     
173      param_tty = new tty::Parameters * [nb_component_tty];
174      for (uint32_t i=0; i<nb_component_tty; i++)
175        {
176          uint32_t tty_size = nb_tty [i] * 16; // 4 32bit-register by tty
177
178//        std::ostringstream str("");
179//        str << "tty_" << i;
180          segment_table->addSegment("tty",tty_address[i],tty_size,0,0,true);
181
182          param_tty [i] = new tty::Parameters (nb_tty    [i],
183                                               name_tty  [i],
184                                               with_xtty    );
185        }
186
187      this->nb_component_ramlock = nb_component_ramlock;
188      this->ramlock_address      = ramlock_address;
189     
190      param_ramlock = new ramlock::Parameters * [nb_component_ramlock];
191      for (uint32_t i=0; i<nb_component_ramlock; i++)
192        {
193          uint32_t ramlock_size = nb_lock[i]; // registre 8 bits because it's min size access
194//        std::ostringstream str ("");
195//        str << "ramlock" << i;
196          segment_table->addSegment("ramlock",ramlock_address[i],ramlock_size,0,0,true);
197
198          param_ramlock [i] = new ramlock::Parameters (nb_lock [i]);
199        }
200
201      this->sim2os_address       = sim2os_address      ;
202      this->sim2os_size          = sim2os_size         ;
203
204      segment_table->addSegment("sim2os",sim2os_address,sim2os_size,0,0,true);
205      param_sim2os = new sim2os::Parameters (segment_table);
206
207      param_data   = new data::Parameters (16,0,0, segment_table);
208
209      param_buffer_irsp = new queue::Parameters * [nb_entity];
210      for (uint32_t i=0; i<nb_entity; i++)
211        param_buffer_irsp [i] = new queue::Parameters (buffer_irsp_size [i]);
212
213      param_buffer_drsp = new queue::Parameters * [nb_entity];
214      for (uint32_t i=0; i<nb_entity; i++)
215        param_buffer_drsp [i] = new queue::Parameters (buffer_drsp_size [i]);
216    }
217
218  public : ~Parameters (void)
219    {
220      for (uint32_t i=0; i<nb_entity; i++)
221        delete param_buffer_irsp [i];
222      delete [] param_buffer_irsp;
223
224      for (uint32_t i=0; i<nb_entity; i++)
225        delete param_buffer_drsp [i];
226      delete [] param_buffer_drsp;
227
228      delete param_data  ;
229      delete param_sim2os;
230      for (uint32_t i=0; i<nb_component_ramlock; i++)
231        delete param_ramlock [i];
232      delete [] param_ramlock;
233      for (uint32_t i=0; i<nb_component_tty; i++)
234        delete param_tty [i];
235      delete [] param_tty;
236      delete param_cache;
237    }
238
239  public : std::string print (uint32_t depth)
240    {
241      std::string tab = std::string(depth,'\t');
242      std::string str = "";
243
244      str+=tab+"nb_entity                    : "+morpheo::toString(nb_entity)+"\n";
245      str+=tab+"nb_iport                     : "+morpheo::toString(nb_iport )+"\n";
246      str+=tab+"nb_dport                     : "+morpheo::toString(nb_dport )+"\n";
247      for (uint32_t i=0; i<nb_entity; ++i)
248        {
249      str+=tab+"ENTITY ["+morpheo::toString(i)+"]\n";
250      str+=tab+"  * icache_dedicated_nb_port : "+morpheo::toString(icache_dedicated_nb_port[i])+"\n";
251      str+=tab+"  * dcache_dedicated_nb_port : "+morpheo::toString(dcache_dedicated_nb_port[i])+"\n";
252      str+=tab+"  * iaccess_nb_context       : "+morpheo::toString(iaccess_nb_context      [i])+"\n";
253      str+=tab+"  * iaccess_nb_packet        : "+morpheo::toString(iaccess_nb_packet       [i])+"\n";
254      str+=tab+"  * iaccess_size_address     : "+morpheo::toString(iaccess_size_address    [i])+"\n";
255      str+=tab+"  * iaccess_nb_instruction   : "+morpheo::toString(iaccess_nb_instruction  [i])+"\n";
256      str+=tab+"  * iaccess_size_instruction : "+morpheo::toString(iaccess_size_instruction[i])+"\n";
257      str+=tab+"  * daccess_nb_context       : "+morpheo::toString(daccess_nb_context      [i])+"\n";
258      str+=tab+"  * daccess_nb_packet        : "+morpheo::toString(daccess_nb_packet       [i])+"\n";
259      str+=tab+"  * daccess_size_address     : "+morpheo::toString(daccess_size_address    [i])+"\n";
260      str+=tab+"  * daccess_size_data        : "+morpheo::toString(daccess_size_data       [i])+"\n";
261        }
262
263      str+=tab+"CACHE\n";
264      str+=param_cache->print(depth+1);
265
266//       str+=tab+"nb_component_tty             : "+morpheo::toString(nb_component_tty           )+"\n";
267//       for (uint32_t i=0; i<nb_component_tty; ++i)
268//         {
269//       str+=tab+"TTY ["+morpheo::toString(i)+"]\n";
270//       str+=tab+"  * tty_address              : "+morpheo::toString(tty_address             [i])+"\n";
271//       str+=param_tty->print(depth+1);
272//         }     
273
274//       str+=tab+"nb_component_ramlock         : "+morpheo::toString(nb_component_ramlock       )+"\n";
275//       for (uint32_t i=0; i<nb_component_ramlock; ++i)
276//         {
277//       str+=tab+"RAMLOCK ["+morpheo::toString(i)+"]\n";
278//       str+=tab+"  * ramlock_address          : "+morpheo::toString(ramlock_address         [i])+"\n";
279//       str+=param_ramlock->print(depth+1);
280//         }     
281
282//       str+=tab+"SIM2OS\n";
283//       str+=tab+"sim2os_address               : "+morpheo::toString(sim2os_address)+"\n";
284//       str+=tab+"sim2os_size                  : "+morpheo::toString(sim2os_size   )+"\n";
285//       str+=param_sim2os->print(depth+1);
286
287//       str+=tab+"DATA\n";
288//       str+=param_data->print(depth+1);
289
290//       for (uint32_t i=0; i<nb_entity; ++i)
291//         {
292//       str+=tab+"BUFFER_IRSP ["+morpheo::toString(i)+"]\n";
293//       str+=param_buffer_irsp[i]_data->print(depth+1);
294//         }
295
296//       for (uint32_t i=0; i<nb_entity; ++i)
297//         {
298//       str+=tab+"BUFFER_DRSP ["+morpheo::toString(i)+"]\n";
299//       str+=param_buffer_drsp[i]_data->print(depth+1);
300//         }
301
302      return str;
303    }
304
305//   public : friend std::ostream& operator<< (std::ostream& output, const Parameters &x)
306//     {
307//       x.print(0);
308//       return output;
309//     }
310  };
311
312};
313#endif
Note: See TracBrowser for help on using the repository browser.