source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_partial_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.8 KB
Line 
1#ifdef SYSTEMC
2//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
3/*
4 * $Id: RegisterFile_Multi_Banked_partial_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::partial_crossbar_genMealy_read"
21  void RegisterFile_Multi_Banked::partial_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    bool read_port_use [_param->_nb_bank][_param->_nb_port_read_by_bank];
29
30    for (uint32_t i=0; i<_param->_nb_bank; i++)
31      for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
32        read_port_use [i][j]=false;
33
34    for (uint32_t i=0; i<_param->_nb_port_read; i++)
35      {
36        bool val = PORT_READ(in_READ_VAL    [i]);
37        bool ack = false;
38
39        log_printf(TRACE,RegisterFile_Multi_Banked,FUNCTION,"  * read [%d] : %d",i,val);
40
41        if (val == true)
42          {
43            // Compute the adress of the bank
44            Taddress_t address;
45            if (_param->_have_port_address == true)
46              address = PORT_READ(in_READ_ADDRESS[i]);
47            else
48              address = 0;
49            log_printf(TRACE,RegisterFile_Multi_Banked,FUNCTION,"    * address   : %d",address);
50            Taddress_t bank    = address_bank    (address);
51            log_printf(TRACE,RegisterFile_Multi_Banked,FUNCTION,"    * bank      : %d",bank   );
52
53//          // Search loop
54//          for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
55//            {
56           
57            uint32_t j = _param->_link_port_read_to_bank_read [i];
58
59                // find a unbusy port on this bank
60                if (read_port_use[bank][j] == false)
61                  {
62                    // find !!!
63                    read_port_use[bank][j] = true;
64                    ack                    = true;
65                   
66                    Taddress_t num_reg = address_num_reg (address);
67
68                    log_printf(TRACE,RegisterFile_Multi_Banked,FUNCTION,"    * num_reg   : %d",num_reg);
69                    log_printf(TRACE,RegisterFile_Multi_Banked,FUNCTION,"    * bank_port : %d",j);
70
71                    Tdata_t    data    = reg_DATA[bank][num_reg];
72                   
73                    log_printf(TRACE,RegisterFile_Multi_Banked,FUNCTION,"    * data      : %d",data);
74
75                    PORT_WRITE(out_READ_DATA [i], data);
76
77//                  break;
78                  }
79//            }
80          }
81
82        // Write output
83        PORT_WRITE(out_READ_ACK [i], ack);
84      }
85      }
86    else
87      {
88        for (uint32_t i=0; i<_param->_nb_port_read; i++)
89          PORT_WRITE(out_READ_ACK [i],0);
90      }
91    log_end(RegisterFile_Multi_Banked,FUNCTION);
92  };
93
94}; // end namespace registerfile_multi_banked
95}; // end namespace registerfile
96}; // end namespace generic
97
98}; // end namespace behavioural
99}; // end namespace morpheo             
100#endif
101//#endif
Note: See TracBrowser for help on using the repository browser.