source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/include/Wrapper_Execute_queue.h @ 113

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

1) Add modelsim simulation systemC
2) Modelsim cosimulation systemC / VHDL is not finish !!!! (cf execute_queue and write_unit)
3) Add multi architecture
5) Add template for comparator, multiplier and divider
6) Change Message
Warning) Various test macro have change, many selftest can't compile

  • Property svn:keywords set to Id
File size: 11.1 KB
Line 
1#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_write_unit_write_unit_execute_queue_Wrapper_Execute_queue_h
2#define morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_write_unit_write_unit_execute_queue_Wrapper_Execute_queue_h
3/*
4 * $Id: Wrapper_Execute_queue.h 113 2009-04-14 18:39:12Z rosiere $
5 *
6 * [ Description ]
7 *
8 */
9
10#include "systemc.h"
11#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/include/Parameters.h"
12#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/include/Types.h"
13#include "Behavioural/include/Allocation.h"
14#include "Common/include/Environment.h"
15
16#ifdef MODELSIM_COSIMULATION
17
18namespace morpheo {
19namespace behavioural {
20namespace core {
21namespace multi_execute_loop {
22namespace execute_loop {
23namespace multi_write_unit {
24namespace write_unit {
25namespace execute_queue {
26
27  class Wrapper_Execute_queue : public sc_foreign_module
28  {
29  protected : const Parameters * _param;
30
31    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
32    // Interface
33  public    : SC_CLOCK             *  in_CLOCK ;
34  public    : SC_IN   (Tcontrol_t) *  in_NRESET;
35
36    // -----[ Interface "Execute_queue_in" ]------------------------------
37  public    : SC_IN (Tcontrol_t     ) *  in_EXECUTE_QUEUE_IN_VAL           ;
38  public    : SC_OUT(Tcontrol_t     ) * out_EXECUTE_QUEUE_IN_ACK           ;
39  public    : SC_IN (Tcontext_t     ) *  in_EXECUTE_QUEUE_IN_CONTEXT_ID    ;
40  public    : SC_IN (Tcontext_t     ) *  in_EXECUTE_QUEUE_IN_FRONT_END_ID  ;
41  public    : SC_IN (Tcontext_t     ) *  in_EXECUTE_QUEUE_IN_OOO_ENGINE_ID ;
42  public    : SC_IN (Tpacket_t      ) *  in_EXECUTE_QUEUE_IN_PACKET_ID     ;
43//public    : SC_IN (Toperation_t   ) *  in_EXECUTE_QUEUE_IN_OPERATION     ;
44//public    : SC_IN (Ttype_t        ) *  in_EXECUTE_QUEUE_IN_TYPE          ;
45  public    : SC_IN (Tspecial_data_t) *  in_EXECUTE_QUEUE_IN_FLAGS         ;
46  public    : SC_IN (Texception_t   ) *  in_EXECUTE_QUEUE_IN_EXCEPTION     ;
47  public    : SC_IN (Tcontrol_t     ) *  in_EXECUTE_QUEUE_IN_NO_SEQUENCE   ;
48  public    : SC_IN (Taddress_t     ) *  in_EXECUTE_QUEUE_IN_ADDRESS       ;
49  public    : SC_IN (Tgeneral_data_t) *  in_EXECUTE_QUEUE_IN_DATA          ;
50
51    // -----[ Interface "Execute_queue_out" ]-----------------------------
52  public    : SC_OUT(Tcontrol_t     ) * out_EXECUTE_QUEUE_OUT_VAL          ;
53  public    : SC_IN (Tcontrol_t     ) *  in_EXECUTE_QUEUE_OUT_ACK          ;
54  public    : SC_OUT(Tcontext_t     ) * out_EXECUTE_QUEUE_OUT_CONTEXT_ID   ;
55  public    : SC_OUT(Tcontext_t     ) * out_EXECUTE_QUEUE_OUT_FRONT_END_ID ;
56  public    : SC_OUT(Tcontext_t     ) * out_EXECUTE_QUEUE_OUT_OOO_ENGINE_ID;
57  public    : SC_OUT(Tpacket_t      ) * out_EXECUTE_QUEUE_OUT_PACKET_ID    ;
58//public    : SC_OUT(Toperation_t   ) * out_EXECUTE_QUEUE_OUT_OPERATION    ;
59//public    : SC_OUT(Ttype_t        ) * out_EXECUTE_QUEUE_OUT_TYPE         ;
60  public    : SC_OUT(Tspecial_data_t) * out_EXECUTE_QUEUE_OUT_FLAGS        ;
61  public    : SC_OUT(Texception_t   ) * out_EXECUTE_QUEUE_OUT_EXCEPTION    ;
62  public    : SC_OUT(Tcontrol_t     ) * out_EXECUTE_QUEUE_OUT_NO_SEQUENCE  ;
63  public    : SC_OUT(Taddress_t     ) * out_EXECUTE_QUEUE_OUT_ADDRESS      ;
64  public    : SC_OUT(Tgeneral_data_t) * out_EXECUTE_QUEUE_OUT_DATA         ;
65
66    // -----[ Methods ]---------------------------------------------------
67  public  :  Wrapper_Execute_queue             
68  (sc_module_name name_entity,
69   std::string    name_architecture,
70   std::string    name_library,
71   const Parameters *   param
72   ) :
73    sc_foreign_module (name_entity, (toString(name_library+"."+toString(name_entity)+"("+name_architecture+")").c_str())),
74    _param (param)
75    {
76      // caller affect interface signal
77
78      ALLOC0_FOREIGN_SIGNAL_IN ( in_CLOCK                          ,""                 ,"clock"        ,Tcontrol_t        ,1                              );
79      ALLOC0_FOREIGN_SIGNAL_IN ( in_NRESET                         ,""                 ,"nreset"       ,Tcontrol_t        ,1                              );
80
81      ALLOC0_FOREIGN_SIGNAL_IN ( in_EXECUTE_QUEUE_IN_VAL           ,"execute_queue_in" ,"val"          ,Tcontrol_t        ,1                              );         
82      ALLOC0_FOREIGN_SIGNAL_OUT(out_EXECUTE_QUEUE_IN_ACK           ,"execute_queue_in" ,"ack"          ,Tcontrol_t        ,1                              );
83      ALLOC0_FOREIGN_SIGNAL_IN ( in_EXECUTE_QUEUE_IN_CONTEXT_ID    ,"execute_queue_in" ,"context_id"   ,Tcontext_t        ,_param->_size_context_id       );
84      ALLOC0_FOREIGN_SIGNAL_IN ( in_EXECUTE_QUEUE_IN_FRONT_END_ID  ,"execute_queue_in" ,"front_end_id" ,Tcontext_t        ,_param->_size_front_end_id     );
85      ALLOC0_FOREIGN_SIGNAL_IN ( in_EXECUTE_QUEUE_IN_OOO_ENGINE_ID ,"execute_queue_in" ,"ooo_engine_id",Tcontext_t        ,_param->_size_ooo_engine_id    );
86      ALLOC0_FOREIGN_SIGNAL_IN ( in_EXECUTE_QUEUE_IN_PACKET_ID     ,"execute_queue_in" ,"packet_id"    ,Tpacket_t         ,_param->_size_rob_ptr        );
87//    ALLOC0_FOREIGN_SIGNAL_IN ( in_EXECUTE_QUEUE_IN_OPERATION     ,"execute_queue_in" ,"operation"    ,Toperation_t      ,_param->_size_operation        );
88//    ALLOC0_FOREIGN_SIGNAL_IN ( in_EXECUTE_QUEUE_IN_TYPE          ,"execute_queue_in" ,"type"         ,Ttype_t           ,_param->_size_type             );
89      ALLOC0_FOREIGN_SIGNAL_IN ( in_EXECUTE_QUEUE_IN_FLAGS         ,"execute_queue_in" ,"flags"        ,Tspecial_data_t   ,_param->_size_special_data     );
90      ALLOC0_FOREIGN_SIGNAL_IN ( in_EXECUTE_QUEUE_IN_EXCEPTION     ,"execute_queue_in" ,"exception"    ,Texception_t      ,_param->_size_exception        );
91      ALLOC0_FOREIGN_SIGNAL_IN ( in_EXECUTE_QUEUE_IN_NO_SEQUENCE   ,"execute_queue_in" ,"no_sequence"  ,Tcontrol_t        ,1                              );
92      ALLOC0_FOREIGN_SIGNAL_IN ( in_EXECUTE_QUEUE_IN_ADDRESS       ,"execute_queue_in" ,"address"      ,Taddress_t        ,_param->_size_instruction_address);
93      ALLOC0_FOREIGN_SIGNAL_IN ( in_EXECUTE_QUEUE_IN_DATA          ,"execute_queue_in" ,"data"         ,Tgeneral_data_t   ,_param->_size_general_data     );
94
95      ALLOC0_FOREIGN_SIGNAL_OUT(out_EXECUTE_QUEUE_OUT_VAL          ,"execute_queue_out","val"          ,Tcontrol_t        ,1                              );         
96      ALLOC0_FOREIGN_SIGNAL_IN ( in_EXECUTE_QUEUE_OUT_ACK          ,"execute_queue_out","ack"          ,Tcontrol_t        ,1                              );         
97      ALLOC0_FOREIGN_SIGNAL_OUT(out_EXECUTE_QUEUE_OUT_CONTEXT_ID   ,"execute_queue_out","context_id"   ,Tcontext_t        ,_param->_size_context_id   );
98      ALLOC0_FOREIGN_SIGNAL_OUT(out_EXECUTE_QUEUE_OUT_FRONT_END_ID ,"execute_queue_out","front_end_id" ,Tcontext_t        ,_param->_size_front_end_id );
99      ALLOC0_FOREIGN_SIGNAL_OUT(out_EXECUTE_QUEUE_OUT_OOO_ENGINE_ID,"execute_queue_out","ooo_engine_id",Tcontext_t        ,_param->_size_ooo_engine_id);
100      ALLOC0_FOREIGN_SIGNAL_OUT(out_EXECUTE_QUEUE_OUT_PACKET_ID    ,"execute_queue_out","packet_id"    ,Tpacket_t         ,_param->_size_rob_ptr    );
101//    ALLOC0_FOREIGN_SIGNAL_OUT(out_EXECUTE_QUEUE_OUT_OPERATION    ,"execute_queue_out","operation"    ,Toperation_t      ,_param->_size_operation    );
102//    ALLOC0_FOREIGN_SIGNAL_OUT(out_EXECUTE_QUEUE_OUT_TYPE         ,"execute_queue_out","type"         ,Ttype_t           ,_param->_size_type         );
103      ALLOC0_FOREIGN_SIGNAL_OUT(out_EXECUTE_QUEUE_OUT_FLAGS        ,"execute_queue_out","flags"        ,Tspecial_data_t   ,_param->_size_special_data );
104      ALLOC0_FOREIGN_SIGNAL_OUT(out_EXECUTE_QUEUE_OUT_EXCEPTION    ,"execute_queue_out","exception"    ,Texception_t      ,_param->_size_exception    );
105      ALLOC0_FOREIGN_SIGNAL_OUT(out_EXECUTE_QUEUE_OUT_NO_SEQUENCE  ,"execute_queue_out","no_sequence"  ,Tcontrol_t        ,1                          );
106      ALLOC0_FOREIGN_SIGNAL_OUT(out_EXECUTE_QUEUE_OUT_ADDRESS      ,"execute_queue_out","address"      ,Taddress_t        ,_param->_size_instruction_address);
107      ALLOC0_FOREIGN_SIGNAL_OUT(out_EXECUTE_QUEUE_OUT_DATA         ,"execute_queue_out","data"         ,Tgeneral_data_t   ,_param->_size_general_data );
108
109      elaborate_foreign_module((toString(name_library+"."+toString(name_entity)+"("+name_architecture+")").c_str()));
110    }
111
112  public  : ~Wrapper_Execute_queue (void)
113    {
114      DELETE0_FOREIGN_SIGNAL( in_CLOCK                          ,1                              );
115      DELETE0_FOREIGN_SIGNAL( in_NRESET                         ,1                              );
116
117      DELETE0_FOREIGN_SIGNAL( in_EXECUTE_QUEUE_IN_VAL           ,1                              );         
118      DELETE0_FOREIGN_SIGNAL(out_EXECUTE_QUEUE_IN_ACK           ,1                              );
119      DELETE0_FOREIGN_SIGNAL( in_EXECUTE_QUEUE_IN_CONTEXT_ID    ,_param->_size_context_id       );
120      DELETE0_FOREIGN_SIGNAL( in_EXECUTE_QUEUE_IN_FRONT_END_ID  ,_param->_size_front_end_id     );
121      DELETE0_FOREIGN_SIGNAL( in_EXECUTE_QUEUE_IN_OOO_ENGINE_ID ,_param->_size_ooo_engine_id    );
122      DELETE0_FOREIGN_SIGNAL( in_EXECUTE_QUEUE_IN_PACKET_ID     ,_param->_size_rob_ptr        );
123//    DELETE0_FOREIGN_SIGNAL( in_EXECUTE_QUEUE_IN_OPERATION     ,_param->_size_operation        );
124//    DELETE0_FOREIGN_SIGNAL( in_EXECUTE_QUEUE_IN_TYPE          ,_param->_size_type             );
125      DELETE0_FOREIGN_SIGNAL( in_EXECUTE_QUEUE_IN_FLAGS         ,_param->_size_special_data     );
126      DELETE0_FOREIGN_SIGNAL( in_EXECUTE_QUEUE_IN_EXCEPTION     ,_param->_size_exception        );
127      DELETE0_FOREIGN_SIGNAL( in_EXECUTE_QUEUE_IN_NO_SEQUENCE   ,1                              );
128      DELETE0_FOREIGN_SIGNAL( in_EXECUTE_QUEUE_IN_ADDRESS       ,_param->_size_instruction_address);
129      DELETE0_FOREIGN_SIGNAL( in_EXECUTE_QUEUE_IN_DATA          ,_param->_size_general_data     );
130
131      DELETE0_FOREIGN_SIGNAL(out_EXECUTE_QUEUE_OUT_VAL          ,1                              );         
132      DELETE0_FOREIGN_SIGNAL( in_EXECUTE_QUEUE_OUT_ACK          ,1                              );         
133      DELETE0_FOREIGN_SIGNAL(out_EXECUTE_QUEUE_OUT_CONTEXT_ID   ,_param->_size_context_id   );
134      DELETE0_FOREIGN_SIGNAL(out_EXECUTE_QUEUE_OUT_FRONT_END_ID ,_param->_size_front_end_id );
135      DELETE0_FOREIGN_SIGNAL(out_EXECUTE_QUEUE_OUT_OOO_ENGINE_ID,_param->_size_ooo_engine_id);
136      DELETE0_FOREIGN_SIGNAL(out_EXECUTE_QUEUE_OUT_PACKET_ID    ,_param->_size_rob_ptr    );
137//    DELETE0_FOREIGN_SIGNAL(out_EXECUTE_QUEUE_OUT_OPERATION    ,_param->_size_operation    );
138//    DELETE0_FOREIGN_SIGNAL(out_EXECUTE_QUEUE_OUT_TYPE         ,_param->_size_type         );
139      DELETE0_FOREIGN_SIGNAL(out_EXECUTE_QUEUE_OUT_FLAGS        ,_param->_size_special_data );
140      DELETE0_FOREIGN_SIGNAL(out_EXECUTE_QUEUE_OUT_EXCEPTION    ,_param->_size_exception    );
141      DELETE0_FOREIGN_SIGNAL(out_EXECUTE_QUEUE_OUT_NO_SEQUENCE  ,1                          );
142      DELETE0_FOREIGN_SIGNAL(out_EXECUTE_QUEUE_OUT_ADDRESS      ,_param->_size_instruction_address);
143      DELETE0_FOREIGN_SIGNAL(out_EXECUTE_QUEUE_OUT_DATA         ,_param->_size_general_data );
144    }
145  };
146
147}; // end namespace execute_queue
148}; // end namespace write_unit
149}; // end namespace multi_write_unit
150}; // end namespace execute_loop
151}; // end namespace multi_execute_loop
152}; // end namespace core
153}; // end namespace behavioural
154}; // end namespace morpheo             
155
156#endif
157#endif
Note: See TracBrowser for help on using the repository browser.