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

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

1) Platforms : add new organization for test
2) Load_Store_Unit : add array to count nb_check in store_queue
3) Issue_queue and Core_Glue : rewrite the issue network
4) Special_Register_Unit : add reset value to register CID
5) Softwares : add multicontext test
6) Softwares : add SPECINT
7) Softwares : add MiBench?
7) Read_queue : inhib access for r0
8) Change Core_Glue (network) - dont yet support priority and load balancing scheme

  • Property svn:keywords set to Id
File size: 3.2 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Icache_Access_genMealy_req.cpp 117 2009-05-16 14:42:39Z 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        if (PORT_READ(in_CONTEXT_REQ_VAL [num_front_end][num_context]))
48          {
49            uint32_t   num_port       = _param->_table_routing[num_front_end][num_context];
50            Tcontrol_t icache_req_ack = PORT_READ(in_ICACHE_REQ_ACK [num_port]);
51
52            log_printf(TRACE,Dcache_Access,FUNCTION,"  * num_port      : %d",num_port);
53
54#ifdef STATISTICS
55            if (icache_req_ack)
56              {
57                _internal_ICACHE_REQ_NB_ACCESS [num_port] ++;
58                if (icache_req_val [num_port])
59                _internal_ICACHE_REQ_NB_ACCESS_CONFLIT [num_port] ++;
60              }
61#endif
62            if (not icache_req_val [num_port])
63              {
64                icache_req_val  [num_port] = 1;
65                context_req_ack [num_front_end][num_context] = icache_req_ack;
66
67                log_printf(TRACE,Dcache_Access,FUNCTION,"    * kane - icache");
68
69                if (_param->_have_port_icache_thread_id)
70                  {
71                Tcontext_t num_thread = _param->_translate_context_to_thread[num_front_end][num_context];
72                log_printf(TRACE,Dcache_Access,FUNCTION,"    * num_context : %d",num_context);
73                log_printf(TRACE,Dcache_Access,FUNCTION,"    * num_thread  : %d",num_thread );
74
75                PORT_WRITE(out_ICACHE_REQ_THREAD_ID [num_port], num_thread);
76                  }
77//              if (_param->_have_port_icache_packet_id)
78                if (_param->_have_port_packet_id [num_front_end][num_context])
79                PORT_WRITE(out_ICACHE_REQ_PACKET_ID [num_port], PORT_READ(in_CONTEXT_REQ_PACKET_ID [num_front_end][num_context]));
80                PORT_WRITE(out_ICACHE_REQ_ADDRESS   [num_port], PORT_READ(in_CONTEXT_REQ_ADDRESS   [num_front_end][num_context]));
81                PORT_WRITE(out_ICACHE_REQ_TYPE      [num_port], PORT_READ(in_CONTEXT_REQ_TYPE      [num_front_end][num_context]));
82              }
83          }
84      }
85
86    for (uint32_t i=0; i<_param->_nb_icache_port; ++i)
87      PORT_WRITE(out_ICACHE_REQ_VAL [i], icache_req_val [i]);
88   
89    for (uint32_t i=0; i<_param->_nb_front_end; ++i)
90      for (uint32_t j=0; j<_param->_nb_context[i]; ++j)
91        PORT_WRITE(out_CONTEXT_REQ_ACK [i][j], context_req_ack [i][j]);
92
93    log_end(Icache_Access,FUNCTION);
94  };
95
96}; // end namespace icache_access
97}; // end namespace core
98
99}; // end namespace behavioural
100}; // end namespace morpheo             
101#endif
Note: See TracBrowser for help on using the repository browser.