source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Icache_Access/src/Icache_Access_genMealy_req.cpp @ 119

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

1) Prediction unit : static prediction not blocking

  • Property svn:keywords set to Id
File size: 3.4 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Icache_Access_genMealy_req.cpp 119 2009-05-25 17:40:26Z rosiere $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Icache_Access/include/Icache_Access.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace core {
14namespace icache_access {
15
16
17#undef  FUNCTION
18#define FUNCTION "Icache_Access::genMealy_req"
19  void Icache_Access::genMealy_req (void)
20  {
21    log_begin(Icache_Access,FUNCTION);
22
23    Tcontrol_t icache_req_val [_param->_nb_icache_port];
24    for (uint32_t i=0; i<_param->_nb_icache_port; ++i)
25      {
26        icache_req_val [i] = 0;
27
28#ifdef STATISTICS
29        _internal_ICACHE_REQ_NB_ACCESS         [i] = 0;
30        _internal_ICACHE_REQ_NB_ACCESS_CONFLIT [i] = 0;
31#endif
32      }
33   
34    Tcontrol_t context_req_ack [_param->_nb_front_end][_param->_max_nb_context];
35    for (uint32_t i=0; i<_param->_nb_front_end; ++i)
36      for (uint32_t j=0; j<_param->_nb_context[i]; ++j)
37        context_req_ack [i][j] = 0;
38       
39    std::list<generic::priority::select_t> * select = _priority ->select();
40    for (std::list<generic::priority::select_t>::iterator it=select ->begin();
41         it!=select->end();
42         ++it)
43      {
44        uint32_t num_front_end = it->grp;
45        uint32_t num_context   = it->elt;
46
47        log_printf(TRACE,Dcache_Access,FUNCTION,"  * Context [%d][%d]",num_front_end, num_context);
48
49       
50        if (PORT_READ(in_CONTEXT_REQ_VAL [num_front_end][num_context]))
51          {
52            uint32_t   num_port       = _param->_table_routing[num_front_end][num_context];
53            Tcontrol_t icache_req_ack = PORT_READ(in_ICACHE_REQ_ACK [num_port]);
54
55            log_printf(TRACE,Dcache_Access,FUNCTION,"    * context have request");
56            log_printf(TRACE,Dcache_Access,FUNCTION,"    * num_port      : %d",num_port);
57            log_printf(TRACE,Dcache_Access,FUNCTION,"    * icache_req_val: %d",icache_req_val [num_port]);
58
59#ifdef STATISTICS
60            if (icache_req_ack)
61              {
62                _internal_ICACHE_REQ_NB_ACCESS [num_port] ++;
63                if (icache_req_val [num_port])
64                _internal_ICACHE_REQ_NB_ACCESS_CONFLIT [num_port] ++;
65              }
66#endif
67            if (not icache_req_val [num_port])
68              {
69                icache_req_val  [num_port] = 1;
70                context_req_ack [num_front_end][num_context] = icache_req_ack;
71
72                if (_param->_have_port_icache_thread_id)
73                  {
74                Tcontext_t num_thread = _param->_translate_context_to_thread[num_front_end][num_context];
75                log_printf(TRACE,Dcache_Access,FUNCTION,"    * num_thread  : %d",num_thread );
76
77                PORT_WRITE(out_ICACHE_REQ_THREAD_ID [num_port], num_thread);
78                  }
79//              if (_param->_have_port_icache_packet_id)
80                if (_param->_have_port_packet_id [num_front_end][num_context])
81                PORT_WRITE(out_ICACHE_REQ_PACKET_ID [num_port], PORT_READ(in_CONTEXT_REQ_PACKET_ID [num_front_end][num_context]));
82                PORT_WRITE(out_ICACHE_REQ_ADDRESS   [num_port], PORT_READ(in_CONTEXT_REQ_ADDRESS   [num_front_end][num_context]));
83                PORT_WRITE(out_ICACHE_REQ_TYPE      [num_port], PORT_READ(in_CONTEXT_REQ_TYPE      [num_front_end][num_context]));
84              }
85          }
86      }
87
88    for (uint32_t i=0; i<_param->_nb_icache_port; ++i)
89      PORT_WRITE(out_ICACHE_REQ_VAL [i], icache_req_val [i]);
90   
91    for (uint32_t i=0; i<_param->_nb_front_end; ++i)
92      for (uint32_t j=0; j<_param->_nb_context[i]; ++j)
93        PORT_WRITE(out_CONTEXT_REQ_ACK [i][j], context_req_ack [i][j]);
94
95    log_end(Icache_Access,FUNCTION);
96  };
97
98}; // end namespace icache_access
99}; // end namespace core
100
101}; // end namespace behavioural
102}; // end namespace morpheo             
103#endif
Note: See TracBrowser for help on using the repository browser.