source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack_genMealy_decod.cpp @ 78

Last change on this file since 78 was 78, checked in by rosiere, 16 years ago

Add :

  • Execute_loop (must be test systemC)
  • Prediction
    • Direction : predifined scheme
    • Branch Target Buffer
  • iFetch_unit
    • ifetch_queue
    • pc management
  • Decod_unit
    • coming soon : support for custom operation
  • Rename_unit
    • RAT
    • Free_list
    • Dependence RAW check
    • Load store unit pointer
  • New Environnement (hierarchy_memory will remove in a next version)


Modif :

  • Manage Custom Operation
  • All component in execute_loop to use the new statistics management

Not Finish :

  • Return Address Stack
  • Environnement
File size: 2.0 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id$
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/include/Return_Address_Stack.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace core {
14namespace multi_front_end {
15namespace front_end {
16namespace prediction_unit {
17namespace return_address_stack {
18
19
20#undef  FUNCTION
21#define FUNCTION "Return_Address_Stack::genMealy_decod"
22  void Return_Address_Stack::genMealy_decod (void)
23  {
24    log_printf(FUNC,Return_Address_Stack,FUNCTION,"Begin");
25
26#ifdef DEBUG_TEST
27    bool context_valid [_param->_nb_context];
28    for (uint32_t i=0; i<_param->_nb_context; i++)
29      context_valid [i] = true;
30#endif
31
32    for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
33      {
34        Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0;
35
36#ifdef DEBUG_TEST
37        if (PORT_READ(in_DECOD_VAL [i]))
38          {
39            if (context_valid[context] == false)
40              ERRORMORPHEO(FUNCTION,"Can't have 2 transactions with the same context_id");
41            context_valid[context] = false;
42          }
43#endif
44
45        Tptr_t     top  = reg_TOP[context];
46        Tcontrol_t push = PORT_READ(in_DECOD_PUSH [i]);
47
48        // if push : value is hit
49        // if pop  : val and not miss
50        internal_DECOD_HIT [i] = (push or (reg_stack[context][top]._val and not reg_stack[context][top]._miss));
51        PORT_WRITE(out_DECOD_HIT         [i], internal_DECOD_HIT [i]);
52
53        // if pop  : address_pop   = stack [top]
54        // if push : stock [top+1] = address_push; also stock [top+1] is erase ! give the old value at the update table
55        if (push)
56          top = (top+1)%_param->_size_queue[context];
57
58        PORT_WRITE(out_DECOD_ADDRESS_POP [i], reg_stack[context][top]._address);
59        PORT_WRITE(out_DECOD_INDEX       [i], top);
60      }
61
62    log_printf(FUNC,Return_Address_Stack,FUNCTION,"End");
63  };
64
65}; // end namespace return_address_stack
66}; // end namespace prediction_unit
67}; // end namespace front_end
68}; // end namespace multi_front_end
69}; // end namespace core
70}; // end namespace behavioural
71}; // end namespace morpheo             
72#endif
Note: See TracBrowser for help on using the repository browser.