source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Front_end_Glue/src/Front_end_Glue_genMealy_event.cpp @ 88

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

Almost complete design
with Test and test platform

  • Property svn:keywords set to Id
File size: 2.8 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Front_end_Glue_genMealy_event.cpp 88 2008-12-10 18:31:39Z rosiere $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_Front_end/Front_end/Front_end_Glue/include/Front_end_Glue.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace core {
14namespace multi_front_end {
15namespace front_end {
16namespace front_end_glue {
17
18#undef  FUNCTION
19#define FUNCTION "Front_end_Glue::genMealy_event"
20  void Front_end_Glue::genMealy_event (void)
21  {
22    log_begin(Front_end_Glue,FUNCTION);
23    log_function(Front_end_Glue,FUNCTION,_name.c_str());
24
25    for (uint32_t i=0; i<_param->_nb_context; ++i)
26      {
27        Taddress_t address = PORT_READ(in_EVENT_CONTEXT_STATE_ADDRESS [i]);
28        PORT_WRITE(out_EVENT_ADDRESS             [i],address);
29        PORT_WRITE(out_EVENT_IFETCH_UNIT_ADDRESS [i],address);
30
31        Taddress_t address_next = PORT_READ(in_EVENT_CONTEXT_STATE_ADDRESS_NEXT [i]);
32        PORT_WRITE(out_EVENT_ADDRESS_NEXT             [i],address_next);
33        PORT_WRITE(out_EVENT_IFETCH_UNIT_ADDRESS_NEXT [i],address_next);
34
35        Tcontrol_t address_next_val = PORT_READ(in_EVENT_CONTEXT_STATE_ADDRESS_NEXT_VAL [i]);
36        PORT_WRITE(out_EVENT_ADDRESS_NEXT_VAL             [i],address_next_val);
37        PORT_WRITE(out_EVENT_IFETCH_UNIT_ADDRESS_NEXT_VAL [i],address_next_val);
38
39        Tcontrol_t is_ds_take = PORT_READ(in_EVENT_CONTEXT_STATE_IS_DS_TAKE [i]);
40        PORT_WRITE(out_EVENT_IS_DS_TAKE             [i],is_ds_take);
41        PORT_WRITE(out_EVENT_IFETCH_UNIT_IS_DS_TAKE [i],is_ds_take);
42
43        Tcontrol_t val = PORT_READ(in_EVENT_CONTEXT_STATE_VAL [i]);
44        PORT_WRITE(out_EVENT_VAL             [i],val);
45        PORT_WRITE(out_EVENT_IFETCH_UNIT_VAL [i],val);
46
47        Tcontrol_t ack = (PORT_READ(in_EVENT_ACK             [i]) and
48                          PORT_READ(in_EVENT_IFETCH_UNIT_ACK [i]));
49        PORT_WRITE(out_EVENT_CONTEXT_STATE_ACK [i],ack);
50
51#ifdef DEBUG
52        log_printf(TRACE,Front_end_Glue,FUNCTION,"  * EVENT Context [%d]",i);
53        if (val and ack)
54          {
55            log_printf(TRACE,Front_end_Glue,FUNCTION,"    * have event");
56            log_printf(TRACE,Front_end_Glue,FUNCTION,"    * address          : %.8x (%.8x)",address     ,address     <<2);
57            log_printf(TRACE,Front_end_Glue,FUNCTION,"    * address_next     : %.8x (%.8x)",address_next,address_next<<2);
58            log_printf(TRACE,Front_end_Glue,FUNCTION,"    * address_next_val : %d",address_next_val);
59            log_printf(TRACE,Front_end_Glue,FUNCTION,"    * is_ds_take       : %d",is_ds_take      );
60          }
61        else
62          log_printf(TRACE,Front_end_Glue,FUNCTION,"    * have not event");
63#endif
64      }
65
66    log_end(Front_end_Glue,FUNCTION);
67  };
68
69}; // end namespace front_end_glue
70}; // end namespace front_end
71}; // end namespace multi_front_end
72}; // end namespace core
73
74}; // end namespace behavioural
75}; // end namespace morpheo             
76#endif
Note: See TracBrowser for help on using the repository browser.