source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/include/Types.h @ 141

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

1) Add new algo in ifetch queue
2) Add Cancel bit
3) new config

  • Property svn:keywords set to Id
File size: 5.0 KB
Line 
1#ifndef morpheo_behavioural_core_multi_front_end_front_end_ifetch_unit_ifetch_queue_Types_h
2#define morpheo_behavioural_core_multi_front_end_front_end_ifetch_unit_ifetch_queue_Types_h
3
4/*
5 * $Id: Types.h 136 2009-10-20 18:52:15Z rosiere $
6 *
7 * [ Description ]
8 *
9 */
10
11#include "Behavioural/include/Types.h"
12
13namespace morpheo {
14namespace behavioural {
15namespace core {
16namespace multi_front_end {
17namespace front_end {
18namespace ifetch_unit {
19namespace ifetch_queue {
20
21  typedef enum 
22    {
23       IFETCH_QUEUE_SCHEME_NO_ASSOC   // Read only head
24      ,IFETCH_QUEUE_SCHEME_FULL_ASSOC // Scan all slot
25    } Tifetch_queue_scheme_t;
26
27  typedef enum
28    {
29      IFETCH_QUEUE_STATE_EMPTY         ,  // slot is empty
30//    IFETCH_QUEUE_STATE_WAIT_REQ      ,  // slot is allocated               - wait request to   cache
31      IFETCH_QUEUE_STATE_WAIT_RSP      ,  // slot have send a request        - wait respons from cache
32      IFETCH_QUEUE_STATE_HAVE_RSP      ,  // slot have a bloc of instruction - wait accept by decod
33      IFETCH_QUEUE_STATE_ERROR_WAIT_RSP   // A event occure -> flush the queue but, ack rsp
34    } ifetch_queue_state_t;
35
36#define IFETCH_QUEUE_STATE_SIZE 2
37
38  class ifetch_queue_entry_t
39  {
40  public : ifetch_queue_state_t   _state                      ;
41  public : Tinstruction_t       * _instruction                ;
42  public : Tcontrol_t           * _instruction_enable         ;
43  public : Tgeneral_address_t     _address                    ;
44  public : Tinst_ifetch_ptr_t     _inst_ifetch_ptr            ;
45  public : Tbranch_state_t        _branch_state               ;
46  public : Tprediction_ptr_t      _branch_update_prediction_id;
47  public : Texception_t           _exception                  ;
48   
49  public : ifetch_queue_entry_t (uint32_t nb_instruction)
50    {
51      _instruction        = new Tinstruction_t [nb_instruction];
52      _instruction_enable = new Tcontrol_t     [nb_instruction];
53    }
54
55  public : ~ifetch_queue_entry_t (void)
56    {
57      delete [] _instruction       ;
58      delete [] _instruction_enable;
59    }
60  };
61
62}; // end namespace ifetch_queue
63}; // end namespace ifetch_unit
64}; // end namespace front_end
65}; // end namespace multi_front_end
66}; // end namespace core
67}; // end namespace behavioural
68
69  template<> inline std::string toString<morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::Tifetch_queue_scheme_t>(const morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::Tifetch_queue_scheme_t& x)
70  {
71    switch (x)
72      {
73      case morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::IFETCH_QUEUE_SCHEME_NO_ASSOC   : return "no_assoc"  ; break;
74      case morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::IFETCH_QUEUE_SCHEME_FULL_ASSOC : return "full_assoc"; break;
75      default : return ""; break;
76      }
77  };
78
79  template<> inline morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::Tifetch_queue_scheme_t fromString<morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::Tifetch_queue_scheme_t>(const std::string& x)
80  {
81    if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::IFETCH_QUEUE_SCHEME_NO_ASSOC  ))) == 0) or
82         (x.compare("no_assoc")   == 0))
83      return morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::IFETCH_QUEUE_SCHEME_NO_ASSOC;
84    if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::IFETCH_QUEUE_SCHEME_FULL_ASSOC))) == 0) or
85         (x.compare("full_assoc") == 0))
86      return morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::IFETCH_QUEUE_SCHEME_FULL_ASSOC;
87   
88    throw (ErrorMorpheo ("<fromString> : Unknow string : \""+x+"\""));
89  };
90 
91  template<> inline std::string toString<morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::ifetch_queue_state_t>(const morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::ifetch_queue_state_t& x)
92  {
93    switch (x)
94      {
95      case morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::IFETCH_QUEUE_STATE_EMPTY          : return "empty"         ; break;
96//    case morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::IFETCH_QUEUE_STATE_WAIT_REQ       : return "wait_req"      ; break;
97      case morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::IFETCH_QUEUE_STATE_WAIT_RSP       : return "wait_rsp"      ; break;
98      case morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::IFETCH_QUEUE_STATE_HAVE_RSP       : return "have_rsp"      ; break;
99      case morpheo::behavioural::core::multi_front_end::front_end::ifetch_unit::ifetch_queue::IFETCH_QUEUE_STATE_ERROR_WAIT_RSP : return "error_wait_rsp"; break;
100      default    : return ""      ; break;
101      }
102  };
103
104
105}; // end namespace morpheo             
106#endif
Note: See TracBrowser for help on using the repository browser.