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

Last change on this file since 62 was 62, checked in by rosiere, 17 years ago

Modification en profondeur de Component-port_map.
Compilation ok pour Register_unit ... a tester (systemC et vhdl)

File size: 2.5 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_write (void)
20  {
21    log_printf(FUNC,RegisterFile_Multi_Banked,"full_crossbar_genMealy_write","Begin");
22
23    bool write_port_use [_param->_nb_bank][_param->_nb_port_write_by_bank];
24
25    for (uint32_t i=0; i<_param->_nb_bank; i++)
26      for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
27        write_port_use [i][j]=false;
28
29    for (uint32_t i=0; i<_param->_nb_port_write; i++)
30      {
31        bool val = PORT_READ(in_WRITE_VAL    [i]);
32        bool ack = false;
33
34        log_printf(TRACE,RegisterFile_Multi_Banked,"full_crossbar_genMealy_write","write[%d] : %d",i,val);
35
36        if (val == true)
37          {
38            val                = false;
39            // Compute the adress of the bank
40            Taddress_t address;
41            if (_param->_have_port_address == true)
42              address = PORT_READ(in_WRITE_ADDRESS[i]);
43            else
44              address = 0;
45            log_printf(TRACE,RegisterFile_Multi_Banked,"full_crossbar_genMealy_write"," * address   : %d",address);
46            Taddress_t bank    = address_bank    (address);
47            log_printf(TRACE,RegisterFile_Multi_Banked,"full_crossbar_genMealy_write"," * bank      : %d",bank   );
48
49            // Search loop
50            for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
51              {
52                // find a unbusy port on this bank
53                if (write_port_use[bank][j] == false)
54                  {
55                    // find !!!
56                    write_port_use[bank][j] = true;
57                    val                     = true; 
58                    ack                     = true;
59                   
60                    Taddress_t num_reg = address_num_reg (address);
61
62                    log_printf(TRACE,RegisterFile_Multi_Banked,"full_crossbar_genMealy_write"," * num_reg   : %d",num_reg);
63                    log_printf(TRACE,RegisterFile_Multi_Banked,"full_crossbar_genMealy_write"," * bank_port : %d",j      );
64                                   
65                    internal_WRITE_NUM_REG [i] = num_reg;
66                    break;
67                  }
68              }
69
70            internal_WRITE_BANK [i] = bank;
71          }
72
73        internal_WRITE_VAL [i] = val;
74
75        // Write output
76        PORT_WRITE(out_WRITE_ACK [i], ack);
77      }
78
79    log_printf(FUNC,RegisterFile_Multi_Banked,"full_crossbar_genMealy_write","End");
80  };
81
82}; // end namespace registerfile_multi_banked
83}; // end namespace registerfile
84}; // end namespace generic
85
86}; // end namespace behavioural
87}; // end namespace morpheo             
88#endif
89//#endif
Note: See TracBrowser for help on using the repository browser.