source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_genMoore.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: 4.2 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Context_State_genMoore.cpp 88 2008-12-10 18:31:39Z 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        internal_EVENT_VAL [i] = val;
49        PORT_WRITE(out_EVENT_VAL              [i], val);
50        PORT_WRITE(out_EVENT_ADDRESS          [i], address);
51        PORT_WRITE(out_EVENT_ADDRESS_NEXT     [i], address_next); 
52        PORT_WRITE(out_EVENT_ADDRESS_NEXT_VAL [i], address_next_val);
53        PORT_WRITE(out_EVENT_IS_DS_TAKE       [i], is_ds_take);
54
55        log_printf(TRACE,Context_State,FUNCTION,"  * EVENT Context      : %d", i);
56        log_printf(TRACE,Context_State,FUNCTION,"    * VAL              : %d", val);
57        log_printf(TRACE,Context_State,FUNCTION,"    * ADDRESS          : %.8x (%.8x)", address     , address     <<2);
58        log_printf(TRACE,Context_State,FUNCTION,"    * ADDRESS_NEXT     : %.8x (%.8x)", address_next, address_next<<2); 
59        log_printf(TRACE,Context_State,FUNCTION,"    * ADDRESS_NEXT_VAL : %d", address_next_val);
60        log_printf(TRACE,Context_State,FUNCTION,"    * IS_DS_TAKE       : %d", is_ds_take);
61      }
62
63    // -------------------------------------------------------------------
64    // -----[ SPR_EVENT ]-------------------------------------------------
65    // -------------------------------------------------------------------
66    for (uint32_t i=0; i<_param->_nb_context; i++)
67      {
68        context_state_t state = reg_STATE [i];
69
70        internal_SPR_EVENT_VAL [i] = (state == CONTEXT_STATE_KO_EXCEP_SPR  );
71
72        PORT_WRITE(out_SPR_EVENT_VAL       [i], internal_SPR_EVENT_VAL     [i]);
73        PORT_WRITE(out_SPR_EVENT_EPCR      [i], reg_EVENT_ADDRESS_EPCR     [i]);
74        PORT_WRITE(out_SPR_EVENT_EEAR      [i], reg_EVENT_ADDRESS_EEAR     [i]);
75        PORT_WRITE(out_SPR_EVENT_EEAR_WEN  [i], reg_EVENT_ADDRESS_EEAR_VAL [i]);
76        PORT_WRITE(out_SPR_EVENT_SR_DSX    [i], reg_EVENT_IS_DELAY_SLOT    [i]);
77        PORT_WRITE(out_SPR_EVENT_SR_TO_ESR [i], 1);
78      }
79
80    // -------------------------------------------------------------------
81    // -----[ CONTEXT ]---------------------------------------------------
82    // -------------------------------------------------------------------
83    for (uint32_t i=0; i<_param->_nb_context; i++)
84      {
85        context_state_t state = reg_STATE [i];
86
87        PORT_WRITE(out_CONTEXT_DECOD_ENABLE [i], ((state==CONTEXT_STATE_OK            ) or
88                                                  (state==CONTEXT_STATE_KO_MSYNC_ISSUE) or
89                                                  (state==CONTEXT_STATE_KO_SPR_ISSUE  )));
90      }
91
92    log_end(Context_State,FUNCTION);
93  };
94
95}; // end namespace context_state
96}; // end namespace front_end
97}; // end namespace multi_front_end
98}; // end namespace core
99
100}; // end namespace behavioural
101}; // end namespace morpheo             
102#endif
Note: See TracBrowser for help on using the repository browser.