source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Special_Register_unit/src/Special_Register_unit_genMealy_spr_access.cpp @ 123

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

1) Fix performance
2) add auto generation to SPECINT2000
3) add reset in genMoore and genMealy

  • Property svn:keywords set to Id
File size: 3.4 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Special_Register_unit_genMealy_spr_access.cpp 123 2009-06-08 20:43:30Z rosiere $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Special_Register_unit/include/Special_Register_unit.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace core {
14namespace multi_ooo_engine {
15namespace ooo_engine {
16namespace special_register_unit {
17
18
19#undef  FUNCTION
20#define FUNCTION "Special_Register_unit::genMealy_spr_access"
21  void Special_Register_unit::genMealy_spr_access (void)
22  {
23    log_begin(Special_Register_unit,FUNCTION);
24    log_function(Special_Register_unit,FUNCTION,_name.c_str());
25
26    if (PORT_READ(in_NRESET))
27      {
28    // ===================================================================
29    // =====[ SPR_ACCESS ]================================================
30    // ===================================================================
31    for (uint32_t i=0; i<_param->_nb_inst_reexecute; i++)
32      // not necessery if have not read enable
33      if (PORT_READ(in_SPR_ACCESS_VAL [i]))
34        {
35          log_printf(TRACE,Special_Register_unit,FUNCTION,"  * SPR_ACCESS [%d]",i);
36
37          Tcontext_t     front_end_id = (_param->_have_port_front_end_id)?PORT_READ(in_SPR_ACCESS_FRONT_END_ID [i]):0;
38          Tcontext_t     context_id   = (_param->_have_port_context_id  )?PORT_READ(in_SPR_ACCESS_CONTEXT_ID   [i]):0;
39          Tspr_address_t num_group    = PORT_READ(in_SPR_ACCESS_NUM_GROUP [i]);
40          Tspr_address_t num_reg      = PORT_READ(in_SPR_ACCESS_NUM_REG   [i]);
41         
42          log_printf(TRACE,Special_Register_unit,FUNCTION,"    * front_end_id : %d",front_end_id);
43          log_printf(TRACE,Special_Register_unit,FUNCTION,"    * context_id   : %d",context_id  );
44          log_printf(TRACE,Special_Register_unit,FUNCTION,"    * num_group    : %d",num_group   );
45          log_printf(TRACE,Special_Register_unit,FUNCTION,"    * num_reg      : %d",num_reg     );
46         
47#ifdef DEBUG_TEST
48          if (not _spr_access_mode [front_end_id][context_id]->exist(num_group,num_reg))
49            msgWarning("Access at an invalid special register (group %d, register %d)\n",num_group,num_reg);
50#endif
51
52          SR * sr = static_cast<SR*>(_spr [front_end_id][context_id][GROUP_SYSTEM_AND_CONTROL][SPR_SR]);
53         
54          Tcontrol_t sm    = sr->sm   ;
55          Tcontrol_t sumra = sr->sumra;
56         
57          Tcontrol_t valid = _spr_access_mode [front_end_id][context_id]->read(spr_address_t(num_group,num_reg),
58                                                                               sm,
59                                                                               sumra);
60
61          log_printf(TRACE,Special_Register_unit,FUNCTION,"    * SM           : %d",sm);
62          log_printf(TRACE,Special_Register_unit,FUNCTION,"    * SUMRA        : %d",sumra);
63          log_printf(TRACE,Special_Register_unit,FUNCTION,"    * valid        : %d",valid);
64
65          // ISA OpenRISC : no action/exception if unauthorised spr access. Also, read 0.
66//           if (not PORT_READ(in_SPR_ACCESS_WEN [i]))
67//             {
68          Tspr_t rdata = (valid)?(_spr[front_end_id][context_id][num_group][num_reg]->read()):0;
69
70          log_printf(TRACE,Special_Register_unit,FUNCTION,"    * rdata        : %.8x",rdata);
71
72          PORT_WRITE(out_SPR_ACCESS_RDATA   [i], rdata);
73//             }
74          PORT_WRITE(out_SPR_ACCESS_INVALID [i], not valid);
75        }
76      }
77//     else
78//       {
79
80//       }
81   
82    log_end(Special_Register_unit,FUNCTION);
83  };
84
85}; // end namespace special_register_unit
86}; // end namespace ooo_engine
87}; // end namespace multi_ooo_engine
88}; // end namespace core
89
90}; // end namespace behavioural
91}; // end namespace morpheo             
92#endif
Note: See TracBrowser for help on using the repository browser.