source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_read.cpp @ 57

Last change on this file since 57 was 57, checked in by rosiere, 17 years ago
  • VHDL - RegisterFile_Multi_Banked (only partial_crossbar)
  • SystemC - modif Component, interface and co -> ajout du type Tusage_T pour instancier un coposant mais ne demander que le VHDL ou le systemC.
  • Séminaire interne
File size: 2.4 KB
Line 
1#ifdef SYSTEMC
2//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
3/*
4 * $Id$
5 *
6 * [ Description ]
7 *
8 */
9
10#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/RegisterFile_Multi_Banked.h"
11
12namespace morpheo                    {
13namespace behavioural {
14namespace generic {
15namespace registerfile {
16namespace registerfile_multi_banked {
17
18
19  void RegisterFile_Multi_Banked::full_crossbar_genMealy_read (void)
20  {
21    log_printf(FUNC,RegisterFile_Multi_Banked,"full_crossbar_genMealy_read","Begin");
22
23    bool read_port_use [_param->_nb_bank][_param->_nb_port_read_by_bank];
24
25    for (uint32_t i=0; i<_param->_nb_bank; i++)
26      for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
27        read_port_use [i][j]=false;
28
29    for (uint32_t i=0; i<_param->_nb_port_read; i++)
30      {
31        bool val = PORT_READ(in_READ_VAL    [i]);
32        bool ack = false;
33
34        log_printf(TRACE,RegisterFile_Multi_Banked,"full_crossbar_genMealy_read","read[%d] : %d",i,val);
35
36        if (val == true)
37          {
38            // Compute the adress of the bank
39            Taddress_t address = PORT_READ(in_READ_ADDRESS[i]);
40            log_printf(TRACE,RegisterFile_Multi_Banked,"full_crossbar_genMealy_read"," * address   : %d",address);
41            Taddress_t bank    = address_bank    (address);
42            log_printf(TRACE,RegisterFile_Multi_Banked,"full_crossbar_genMealy_read"," * bank      : %d",bank   );
43
44            // Search loop
45            for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
46              {
47                // find a unbusy port on this bank
48                if (read_port_use[bank][j] == false)
49                  {
50                    // find !!!
51                    read_port_use[bank][j] = true;
52                    ack                    = true;
53                   
54                    Taddress_t num_reg = address_num_reg (address);
55
56                    log_printf(TRACE,RegisterFile_Multi_Banked,"full_crossbar_genMealy_read"," * num_reg   : %d",num_reg);
57                    log_printf(TRACE,RegisterFile_Multi_Banked,"full_crossbar_genMealy_read"," * bank_port : %d",j);
58
59                    Tdata_t    data    = REGISTER_READ(reg_DATA[bank][num_reg]);
60                   
61                    log_printf(TRACE,RegisterFile_Multi_Banked,"full_crossbar_genMealy_read"," * data      : %d",data);
62
63                    PORT_WRITE(out_READ_DATA [i], data);
64
65                    break;
66                  }
67              }
68          }
69
70        // Write output
71        PORT_WRITE(out_READ_ACK [i], ack);
72      }
73
74    log_printf(FUNC,RegisterFile_Multi_Banked,"full_crossbar_genMealy_read","End");
75  };
76
77}; // end namespace registerfile_multi_banked
78}; // end namespace registerfile
79}; // end namespace generic
80
81}; // end namespace behavioural
82}; // end namespace morpheo             
83#endif
84//#endif
Note: See TracBrowser for help on using the repository browser.