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

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

1) Fix performance
2) add auto generation to SPECINT2000
3) add reset in genMoore and genMealy

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