source: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/SPR_access_mode_read_write.cpp @ 88

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

Almost complete design
with Test and test platform

  • Property svn:keywords set to Id
File size: 2.2 KB
Line 
1#include "Behavioural/include/SPR_access_mode.h"
2
3#include "Common/include/Debug.h"
4
5namespace morpheo {
6namespace behavioural {
7
8
9    // SM    : Supervisor Mode
10    //           * 0 : User Mode
11    //           * 1 : Supervisor Mode
12    // SUMRA : SPRs User Mode Read Access
13    //           * 0 : All SPRs are inaccessible in user mode
14    //           * 1 : Certain SPRs can be read in user mode
15   
16  bool SPR_access_mode::read (spr_address_t address, Tcontrol_t SM, Tcontrol_t SUMRA)
17    {
18//       log_printf(TRACE,true,"SPR_access_mode::read","address [%d][%d]",address._group,address._register);
19//       log_printf(TRACE,true,"SPR_access_mode::read","sm        : %d",SM   );
20//       log_printf(TRACE,true,"SPR_access_mode::read","sumra     : %d",SUMRA);
21
22      if (not exist(address))
23        return false;
24
25      spr_access_mode_t mode = _spr_generic [address._group][address._register];
26
27//       log_printf(TRACE,true,"SPR_access_mode::read","kernel    : %d",(int)mode._supervisor_access_mode);
28//       log_printf(TRACE,true,"SPR_access_mode::read","user      : %d",(int)mode._supervisor_access_mode);
29
30      return (((SM == 1) and ( (mode._supervisor_access_mode == SPR_ACCESS_MODE_READ_ONLY     ) or
31                               (mode._supervisor_access_mode == SPR_ACCESS_MODE_READ_WRITE    ))) or
32              ((SM == 0) and ( (mode._user_access_mode       == SPR_ACCESS_MODE_READ_ONLY     ) or
33                               (mode._user_access_mode       == SPR_ACCESS_MODE_READ_WRITE    ) or
34                              ((mode._user_access_mode       == SPR_ACCESS_MODE_READ_ONLY_COND) and (SUMRA == 1)))));
35    }
36
37  bool SPR_access_mode::write(spr_address_t address, Tcontrol_t SM, Tcontrol_t SUMRA)
38    {
39      if (not exist(address))
40        return false;
41
42      spr_access_mode_t mode = _spr_generic [address._group][address._register];
43     
44      return (((SM == 1) and ( (mode._supervisor_access_mode == SPR_ACCESS_MODE_WRITE_ONLY    ) or
45                               (mode._supervisor_access_mode == SPR_ACCESS_MODE_READ_WRITE    ))) or
46              ((SM == 0) and ( (mode._user_access_mode       == SPR_ACCESS_MODE_WRITE_ONLY    ) or
47                               (mode._user_access_mode       == SPR_ACCESS_MODE_READ_WRITE    )))) ;
48    }
49
50}; // end namespace behavioural
51}; // end namespace morpheo             
52
Note: See TracBrowser for help on using the repository browser.