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

Last change on this file since 137 was 137, checked in by rosiere, 14 years ago

Various modif (add test, and vhdl)

  • Property svn:keywords set to Id
File size: 2.8 KB
RevLine 
[53]1#ifdef SYSTEMC
2//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
3/*
4 * $Id: RegisterFile_Multi_Banked_full_crossbar_genMealy_read.cpp 137 2010-02-16 12:35:48Z rosiere $
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
[106]19#undef  FUNCTION
20#define FUNCTION "RegisterFile_Multi_Banked::full_crossbar_genMealy_read"
[53]21  void RegisterFile_Multi_Banked::full_crossbar_genMealy_read (void)
22  {
[106]23    log_begin(RegisterFile_Multi_Banked,FUNCTION);
24    log_function(RegisterFile_Multi_Banked,FUNCTION,_name.c_str());
[53]25
[123]26    if (PORT_READ(in_NRESET))
27      {
28
[57]29    bool read_port_use [_param->_nb_bank][_param->_nb_port_read_by_bank];
[53]30
[57]31    for (uint32_t i=0; i<_param->_nb_bank; i++)
32      for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
[53]33        read_port_use [i][j]=false;
34
[57]35    for (uint32_t i=0; i<_param->_nb_port_read; i++)
[53]36      {
37        bool val = PORT_READ(in_READ_VAL    [i]);
38        bool ack = false;
39
[137]40#ifdef STATISTICS
41        internal_READ_VAL  [i] = false;
42#endif
43
[106]44        log_printf(TRACE,RegisterFile_Multi_Banked,FUNCTION,"  * read [%d] : %d",i,val);
[53]45
46        if (val == true)
47          {
48            // Compute the adress of the bank
[62]49            Taddress_t address;
50            if (_param->_have_port_address == true)
51              address = PORT_READ(in_READ_ADDRESS[i]);
52            else
53              address = 0;
54
[106]55            log_printf(TRACE,RegisterFile_Multi_Banked,FUNCTION,"    * address   : %d",address);
[53]56            Taddress_t bank    = address_bank    (address);
[106]57            log_printf(TRACE,RegisterFile_Multi_Banked,FUNCTION,"    * bank      : %d",bank   );
[53]58
59            // Search loop
[57]60            for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
[53]61              {
62                // find a unbusy port on this bank
63                if (read_port_use[bank][j] == false)
64                  {
65                    // find !!!
66                    read_port_use[bank][j] = true;
67                    ack                    = true;
68                   
69                    Taddress_t num_reg = address_num_reg (address);
70
[106]71                    log_printf(TRACE,RegisterFile_Multi_Banked,FUNCTION,"    * num_reg   : %d",num_reg);
72                    log_printf(TRACE,RegisterFile_Multi_Banked,FUNCTION,"    * bank_port : %d",j);
[53]73
[78]74                    Tdata_t    data    = reg_DATA[bank][num_reg];
[53]75                   
[106]76                    log_printf(TRACE,RegisterFile_Multi_Banked,FUNCTION,"    * data      : %d",data);
[53]77
[137]78#ifdef STATISTICS
79                    internal_READ_VAL  [i] = true;
80#endif
[53]81                    PORT_WRITE(out_READ_DATA [i], data);
82
83                    break;
84                  }
85              }
86          }
87
88        // Write output
89        PORT_WRITE(out_READ_ACK [i], ack);
90      }
[123]91      }
92    else
93      for (uint32_t i=0; i<_param->_nb_port_read; i++)
94        PORT_WRITE(out_READ_ACK [i], false);
[53]95
[106]96    log_end(RegisterFile_Multi_Banked,FUNCTION);
[53]97  };
98
99}; // end namespace registerfile_multi_banked
100}; // end namespace registerfile
101}; // end namespace generic
102
103}; // end namespace behavioural
104}; // end namespace morpheo             
105#endif
106//#endif
Note: See TracBrowser for help on using the repository browser.