source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_genMoore.cpp @ 101

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

1) Add soc test
2) fix bug (Pc management, Decod and execute, Update prediction ...)

  • Property svn:keywords set to Id
File size: 5.3 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Context_State_genMoore.cpp 101 2009-01-15 17:19:08Z rosiere $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Context_State.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace core {
14namespace multi_front_end {
15namespace front_end {
16namespace context_state {
17
18
19#undef  FUNCTION
20#define FUNCTION "Context_State::genMoore"
21  void Context_State::genMoore (void)
22  {
23    log_begin(Context_State,FUNCTION);
24    log_function(Context_State,FUNCTION,_name.c_str());
25
26    // -------------------------------------------------------------------
27    // -----[ EVENT ]-----------------------------------------------------
28    // -------------------------------------------------------------------
29    for (uint32_t i=0; i<_param->_nb_context; i++)
30      {
31        context_state_t state = reg_STATE [i];
32
33        Tcontrol_t val              = ((state == CONTEXT_STATE_KO_EXCEP_ADDR) or
34                                       (state == CONTEXT_STATE_KO_MISS_ADDR ) or
35                                       (state == CONTEXT_STATE_KO_PSYNC_ADDR) or
36                                       (state == CONTEXT_STATE_KO_CSYNC_ADDR));
37       
38        // SR can't change in this cycle
39        // Exception Prefix High
40        Taddress_t    address          = reg_EVENT_ADDRESS [i] | (((state == CONTEXT_STATE_KO_EXCEP_ADDR) and PORT_READ(in_SPR_SR_EPH [i]))?(0xF000000>>2):0);
41        Taddress_t    address_next     = reg_EVENT_ADDRESS_EPCR [i];
42        Tcontrol_t    address_next_val = (state == CONTEXT_STATE_KO_MISS_ADDR) and (reg_EVENT_ADDRESS_EPCR_VAL [i]);
43        Tcontrol_t    is_ds_take       = (state == CONTEXT_STATE_KO_MISS_ADDR) and (reg_EVENT_IS_DS_TAKE       [i]);
44        // excep : address exception
45        // miss  : address delay_slot, and address dest
46        // psync : address next
47        // csync : address next
48        Tevent_type_t type                         ;//[nb_context]
49        Tdepth_t      depth            = reg_EVENT_DEPTH [i];
50
51        switch (state)
52          {
53          case CONTEXT_STATE_KO_EXCEP_ADDR : (type = EVENT_TYPE_EXCEPTION         ); break;
54          case CONTEXT_STATE_KO_MISS_ADDR  : (type = EVENT_TYPE_MISS_SPECULATION  ); break;
55          case CONTEXT_STATE_KO_PSYNC_ADDR : (type = EVENT_TYPE_PSYNC             ); break; 
56          case CONTEXT_STATE_KO_CSYNC_ADDR : (type = EVENT_TYPE_CSYNC             ); break;
57          default                          : (type = EVENT_TYPE_NONE              ); break;
58          }
59//      (type = EVENT_TYPE_SPR_ACCESS        );
60//      (type = EVENT_TYPE_MSYNC             );
61//      (type = EVENT_TYPE_BRANCH_NO_ACCURATE);
62
63        internal_EVENT_VAL [i] = val;
64        PORT_WRITE(out_EVENT_VAL              [i], val);
65        PORT_WRITE(out_EVENT_ADDRESS          [i], address);
66        PORT_WRITE(out_EVENT_ADDRESS_NEXT     [i], address_next); 
67        PORT_WRITE(out_EVENT_ADDRESS_NEXT_VAL [i], address_next_val);
68        PORT_WRITE(out_EVENT_IS_DS_TAKE       [i], is_ds_take);
69        PORT_WRITE(out_EVENT_TYPE             [i], type);
70        if (_param->_have_port_depth)
71        PORT_WRITE(out_EVENT_DEPTH            [i], depth);
72
73        log_printf(TRACE,Context_State,FUNCTION,"  * EVENT Context      : %d", i);
74        log_printf(TRACE,Context_State,FUNCTION,"    * VAL              : %d", val);
75        log_printf(TRACE,Context_State,FUNCTION,"    * ADDRESS          : %.8x (%.8x)", address     , address     <<2);
76        log_printf(TRACE,Context_State,FUNCTION,"    * ADDRESS_NEXT     : %.8x (%.8x)", address_next, address_next<<2); 
77        log_printf(TRACE,Context_State,FUNCTION,"    * ADDRESS_NEXT_VAL : %d", address_next_val);
78        log_printf(TRACE,Context_State,FUNCTION,"    * IS_DS_TAKE       : %d", is_ds_take);
79        log_printf(TRACE,Context_State,FUNCTION,"    * TYPE             : %d", type);
80        log_printf(TRACE,Context_State,FUNCTION,"    * DEPTH            : %d", depth);
81      }
82
83    // -------------------------------------------------------------------
84    // -----[ SPR_EVENT ]-------------------------------------------------
85    // -------------------------------------------------------------------
86    for (uint32_t i=0; i<_param->_nb_context; i++)
87      {
88        context_state_t state = reg_STATE [i];
89
90        internal_SPR_EVENT_VAL [i] = (state == CONTEXT_STATE_KO_EXCEP_SPR  );
91
92        PORT_WRITE(out_SPR_EVENT_VAL       [i], internal_SPR_EVENT_VAL     [i]);
93        PORT_WRITE(out_SPR_EVENT_EPCR      [i], reg_EVENT_ADDRESS_EPCR     [i]);
94        PORT_WRITE(out_SPR_EVENT_EEAR      [i], reg_EVENT_ADDRESS_EEAR     [i]);
95        PORT_WRITE(out_SPR_EVENT_EEAR_WEN  [i], reg_EVENT_ADDRESS_EEAR_VAL [i]);
96        PORT_WRITE(out_SPR_EVENT_SR_DSX    [i], reg_EVENT_IS_DELAY_SLOT    [i]);
97        PORT_WRITE(out_SPR_EVENT_SR_TO_ESR [i], 1);
98      }
99
100    // -------------------------------------------------------------------
101    // -----[ CONTEXT ]---------------------------------------------------
102    // -------------------------------------------------------------------
103    for (uint32_t i=0; i<_param->_nb_context; i++)
104      {
105        context_state_t state = reg_STATE [i];
106
107//      PORT_WRITE(out_CONTEXT_DECOD_ENABLE [i], ((state==CONTEXT_STATE_OK            ) or
108//                                                (state==CONTEXT_STATE_KO_MSYNC_ISSUE) or
109//                                                (state==CONTEXT_STATE_KO_SPR_ISSUE  )));
110        PORT_WRITE(out_CONTEXT_DECOD_ENABLE [i], (state==CONTEXT_STATE_OK));
111      }
112
113    log_end(Context_State,FUNCTION);
114  };
115
116}; // end namespace context_state
117}; // end namespace front_end
118}; // end namespace multi_front_end
119}; // end namespace core
120
121}; // end namespace behavioural
122}; // end namespace morpheo             
123#endif
Note: See TracBrowser for help on using the repository browser.