source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_write.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_full_crossbar_genMealy_write.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_write"
21  void RegisterFile_Multi_Banked::full_crossbar_genMealy_write (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 write_port_use [_param->_nb_bank][_param->_nb_port_write_by_bank];
29
30    for (uint32_t i=0; i<_param->_nb_bank; i++)
31      for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
32        write_port_use [i][j]=false;
33
34    for (uint32_t i=0; i<_param->_nb_port_write; i++)
35      {
36        bool val = PORT_READ(in_WRITE_VAL    [i]);
37        bool ack = false;
38
39        log_printf(TRACE,RegisterFile_Multi_Banked,FUNCTION,"  * write [%d] : %d",i,val);
40
41        if (val == true)
42          {
43            val                = false;
44            // Compute the adress of the bank
45            Taddress_t address;
46            if (_param->_have_port_address == true)
47              address = PORT_READ(in_WRITE_ADDRESS[i]);
48            else
49              address = 0;
50            log_printf(TRACE,RegisterFile_Multi_Banked,FUNCTION,"    * address   : %d",address);
51            Taddress_t bank    = address_bank    (address);
52            log_printf(TRACE,RegisterFile_Multi_Banked,FUNCTION,"    * bank      : %d",bank   );
53
54            // Search loop
55            for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
56              {
57                // find a unbusy port on this bank
58                if (write_port_use[bank][j] == false)
59                  {
60                    // find !!!
61                    write_port_use[bank][j] = true;
62                    val                     = 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                    internal_WRITE_NUM_REG [i] = num_reg;
71                    break;
72                  }
73              }
74
75            internal_WRITE_BANK [i] = bank;
76          }
77
78        internal_WRITE_VAL [i] = val;
79
80        // Write output
81        PORT_WRITE(out_WRITE_ACK [i], ack);
82      }
83      }
84    else
85      {
86        for (uint32_t i=0; i<_param->_nb_port_write; i++)
87          {
88            internal_WRITE_VAL [i] = 0;
89            PORT_WRITE(out_WRITE_ACK [i], 0);
90          }
91      }
92
93    log_end(RegisterFile_Multi_Banked,FUNCTION);
94  };
95
96}; // end namespace registerfile_multi_banked
97}; // end namespace registerfile
98}; // end namespace generic
99
100}; // end namespace behavioural
101}; // end namespace morpheo             
102#endif
103//#endif
Note: See TracBrowser for help on using the repository browser.