source: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/SPR_access_mode_implement_group.cpp @ 72

Last change on this file since 72 was 72, checked in by rosiere, 16 years ago
  • SystemC de l'unite fonctionnelle.
  • gestion des groupes / instructions custom
File size: 8.2 KB
Line 
1#include "Behavioural/include/SPR_access_mode.h"
2
3namespace morpheo {
4namespace behavioural {
5
6  void SPR_access_mode::implement_group (uint32_t num_group, uint32_t nb_reg )
7    {
8      if (_spr_generic[num_group] != NULL)
9        throw ERRORMORPHEO("SPR_access_mode::implement_group", "implement more once a group.");
10
11      _max_register_by_group[num_group] = nb_reg;
12      _spr_generic [num_group] = new spr_access_mode_t [nb_reg];
13    }
14
15  uint32_t SPR_access_mode::implement_group (uint32_t num_group)
16    {
17      if (_spr_generic[num_group] != NULL)
18        throw ERRORMORPHEO("SPR_access_mode::implement_group", "implement more once a group.");
19
20      switch (num_group)
21        {
22        case GROUP_SYSTEM_AND_CONTROL  : 
23          {
24            implement_group(GROUP_SYSTEM_AND_CONTROL  ,NB_REG_GROUP_SYSTEM_AND_CONTROL  );
25
26            for (uint32_t i=0 ; i<=8 ; i++)
27            _spr_generic [GROUP_SYSTEM_AND_CONTROL ][   i]._supervisor_access_mode = SPR_ACCESS_MODE_READ_ONLY;
28            for (uint32_t i=16; i<=18; i++)
29            _spr_generic [GROUP_SYSTEM_AND_CONTROL ][   i]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
30            _spr_generic [GROUP_SYSTEM_AND_CONTROL ][  20]._user_access_mode       = SPR_ACCESS_MODE_READ_ONLY_COND;
31            _spr_generic [GROUP_SYSTEM_AND_CONTROL ][  20]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
32           
33            const uint32_t nb_shadow = 1;
34           
35            for (uint32_t i=32; i<=32+nb_shadow; i++)
36            _spr_generic [GROUP_SYSTEM_AND_CONTROL ][   i]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
37            for (uint32_t i=48; i<=48+nb_shadow; i++)
38            _spr_generic [GROUP_SYSTEM_AND_CONTROL ][   i]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
39            for (uint32_t i=64; i<=64+nb_shadow; i++)
40            _spr_generic [GROUP_SYSTEM_AND_CONTROL ][   i]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
41            for (uint32_t i=1024; i<=1024+32*nb_shadow; i++)
42            _spr_generic [GROUP_SYSTEM_AND_CONTROL ][   i]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
43
44            break;
45          }
46        case GROUP_DMMU                :
47          {
48            implement_group(GROUP_DMMU                ,NB_REG_GROUP_DMMU                );
49
50            for (uint32_t i=0; i<=2; i++)
51            _spr_generic [GROUP_DMMU               ][   i]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
52            _spr_generic [GROUP_DMMU               ][   2]._supervisor_access_mode = SPR_ACCESS_MODE_WRITE_ONLY;
53            for (uint32_t i=4; i<=11; i++)
54            _spr_generic [GROUP_DMMU               ][   i]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
55            for (uint32_t i=512; i<=1535; i++)
56            _spr_generic [GROUP_DMMU               ][   i]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
57
58            break;
59          }
60        case GROUP_IMMU                :
61          {
62            implement_group(GROUP_IMMU                ,NB_REG_GROUP_IMMU                );
63
64            for (uint32_t i=0; i<=2; i++)
65            _spr_generic [GROUP_IMMU               ][   i]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
66            _spr_generic [GROUP_IMMU               ][   2]._supervisor_access_mode = SPR_ACCESS_MODE_WRITE_ONLY;
67            for (uint32_t i=4; i<=11; i++)
68            _spr_generic [GROUP_IMMU               ][   i]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
69            for (uint32_t i=512; i<=1536; i++)
70            _spr_generic [GROUP_IMMU               ][   i]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
71           
72            break;
73          }
74        case GROUP_DCACHE              :
75          {
76            implement_group(GROUP_DCACHE              ,NB_REG_GROUP_DCACHE              );
77
78            _spr_generic [GROUP_DCACHE             ][   0]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
79            for (uint32_t i=0; i<=5; i++)
80                {
81            _spr_generic [GROUP_DCACHE             ][   i]._supervisor_access_mode = SPR_ACCESS_MODE_WRITE_ONLY;
82            _spr_generic [GROUP_DCACHE             ][   i]._user_access_mode       = SPR_ACCESS_MODE_WRITE_ONLY;
83                }
84            _spr_generic [GROUP_DCACHE             ][   3]._user_access_mode       = SPR_ACCESS_MODE_NONE;
85           
86            break;
87          }
88        case GROUP_ICACHE              :
89          {
90            implement_group(GROUP_ICACHE              ,NB_REG_GROUP_ICACHE              );
91
92            _spr_generic [GROUP_ICACHE             ][   0]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
93            for (uint32_t i=0; i<=3; i++)
94                {
95            _spr_generic [GROUP_ICACHE             ][   i]._supervisor_access_mode = SPR_ACCESS_MODE_WRITE_ONLY;
96            _spr_generic [GROUP_ICACHE             ][   i]._user_access_mode       = SPR_ACCESS_MODE_WRITE_ONLY;
97                }
98            _spr_generic [GROUP_ICACHE             ][   2]._user_access_mode       = SPR_ACCESS_MODE_NONE;
99           
100            break;
101          }
102        case GROUP_MAC                 :
103          {
104            implement_group(GROUP_MAC                 ,NB_REG_GROUP_MAC                 );
105
106            for (uint32_t i=1; i<=2; i++)
107                {
108            _spr_generic [GROUP_MAC                ][   i]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
109            _spr_generic [GROUP_MAC                ][   i]._user_access_mode       = SPR_ACCESS_MODE_READ_WRITE;
110                }
111           
112            break;
113          }
114        case GROUP_DEBUG               :
115          {
116            implement_group(GROUP_DEBUG               ,NB_REG_GROUP_DEBUG               );
117
118            for (uint32_t i=0; i<=21; i++)
119            _spr_generic [GROUP_DEBUG              ][   i]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
120           
121            break;
122          }
123        case GROUP_PERFORMANCE_COUNTER :
124          {
125            implement_group(GROUP_PERFORMANCE_COUNTER ,NB_REG_GROUP_PERFORMANCE_COUNTER );
126
127            for (uint32_t i=0; i<=7; i++)
128                {
129            _spr_generic [GROUP_PERFORMANCE_COUNTER][   i]._user_access_mode       = SPR_ACCESS_MODE_READ_ONLY_COND;
130            _spr_generic [GROUP_PERFORMANCE_COUNTER][   i]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
131                }
132            for (uint32_t i=8; i<=15; i++)
133            _spr_generic [GROUP_PERFORMANCE_COUNTER][   i]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
134           
135            break;
136          }
137        case GROUP_POWER_MANAGEMENT    :
138          {
139            implement_group(GROUP_POWER_MANAGEMENT    ,NB_REG_GROUP_POWER_MANAGEMENT    );
140
141            _spr_generic [GROUP_POWER_MANAGEMENT   ][   0]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
142           
143            break;
144          }
145        case GROUP_PIC                 :
146          {
147            implement_group(GROUP_PIC                 ,NB_REG_GROUP_PIC                 );
148
149            _spr_generic [GROUP_PIC                ][   0]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
150            _spr_generic [GROUP_PIC                ][   2]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
151           
152            break;
153          }
154        case GROUP_TICK_TIMER          :
155          {
156            implement_group(GROUP_TICK_TIMER          ,NB_REG_GROUP_TICK_TIMER          );
157
158            _spr_generic [GROUP_TICK_TIMER         ][   0]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
159            _spr_generic [GROUP_TICK_TIMER         ][   1]._supervisor_access_mode = SPR_ACCESS_MODE_READ_WRITE;
160            _spr_generic [GROUP_TICK_TIMER         ][   1]._user_access_mode       = SPR_ACCESS_MODE_READ_ONLY_COND;
161           
162            break;
163          }
164        case GROUP_FLOATING_POINT      :
165          {
166            implement_group(GROUP_FLOATING_POINT      ,NB_REG_GROUP_FLOATING_POINT      );
167            break;
168          }
169        case GROUP_RESERVED_1          : 
170        case GROUP_RESERVED_2          : 
171        case GROUP_RESERVED_3          : 
172        case GROUP_RESERVED_4          : 
173        case GROUP_RESERVED_5          : 
174        case GROUP_RESERVED_6          : 
175        case GROUP_RESERVED_7          : 
176        case GROUP_RESERVED_8          : 
177        case GROUP_RESERVED_9          : 
178        case GROUP_RESERVED_10         : 
179        case GROUP_RESERVED_11         : 
180        case GROUP_RESERVED_12         : 
181          {
182            throw ERRORMORPHEO("SPR_access_mode::implement_group", "group number is invalid : it's a reserved group.");
183            break;
184          }
185        case GROUP_CUSTOM_1            : 
186        case GROUP_CUSTOM_2            : 
187        case GROUP_CUSTOM_3            : 
188        case GROUP_CUSTOM_4            : 
189        case GROUP_CUSTOM_5            : 
190        case GROUP_CUSTOM_6            : 
191        case GROUP_CUSTOM_7            : 
192        case GROUP_CUSTOM_8            :
193          {
194            throw ERRORMORPHEO("SPR_access_mode::implement_group", "group number is invalid : it's a custom group.");
195            break;
196          }
197        default :
198          {
199            throw ERRORMORPHEO("SPR_access_mode::implement_group", "group number is invalid : it's a unknow group.");
200            break;
201          }
202        }
203
204      return _max_register_by_group[num_group];
205    }
206
207}; // end namespace behavioural
208}; // end namespace morpheo             
209
Note: See TracBrowser for help on using the repository browser.