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

Last change on this file since 124 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: 5.5 KB
RevLine 
[53]1/*
2 * $Id: RegisterFile_Multi_Banked.cpp 123 2009-06-08 20:43:30Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/RegisterFile_Multi_Banked.h"
9
10namespace morpheo                    {
11namespace behavioural {
12namespace generic {
13namespace registerfile {
14namespace registerfile_multi_banked {
15
[88]16#undef  FUNCTION
17#define FUNCTION "RegisterFile_Multi_Banked::RegisterFile_Multi_Banked"
[82]18  RegisterFile_Multi_Banked::RegisterFile_Multi_Banked
19  (
[53]20#ifdef SYSTEMC
[82]21   sc_module_name name,
[53]22#else
[82]23   std::string name,
[53]24#endif
25#ifdef STATISTICS
[82]26   morpheo::behavioural::Parameters_Statistics * param_statistics,
[53]27#endif
[82]28   morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters * param,
29   Tusage_t usage):
30    _name              (name)
31    ,_param            (param)
32    ,_usage (usage)
[53]33  {
[88]34    log_printf(FUNC,RegisterFile_Multi_Banked,FUNCTION,"Begin");
[53]35
[123]36// #if DEBUG_RegisterFile_Multi_Banked == true
37//     log_printf(INFO,RegisterFile_Multi_Banked,FUNCTION,_("<%s> Parameters"),_name.c_str());
[53]38
[123]39//     std::cout << *param << std::endl;
40// #endif   
[88]41
42    log_printf(INFO,RegisterFile_Multi_Banked,FUNCTION,"Allocation");
43   
[53]44    allocation ();
45
46#ifdef STATISTICS
[88]47    if (usage_is_set(_usage,USE_STATISTICS))
48      { 
49        log_printf(INFO,RegisterFile_Multi_Banked,FUNCTION,"Allocation of statistics");
50       
51        // Allocation of statistics
52        statistics_declaration(param_statistics);
53      }
[53]54#endif
55
56#ifdef VHDL
[88]57    if (usage_is_set(_usage,USE_VHDL))
58      { 
59        // generate the vhdl
60        log_printf(INFO,RegisterFile_Multi_Banked,FUNCTION,"Generate the vhdl");
61       
62        vhdl();
63      }
[53]64#endif
65
66#ifdef SYSTEMC
[88]67    if (usage_is_set(_usage,USE_SYSTEMC))
68      { 
[53]69    // Function pointer
[57]70    if (_param->_crossbar == FULL_CROSSBAR)                             
[53]71      {
72        function_transition     = &morpheo::behavioural::generic::registerfile::registerfile_multi_banked::RegisterFile_Multi_Banked::   full_crossbar_transition;
73        function_genMealy_read  = &morpheo::behavioural::generic::registerfile::registerfile_multi_banked::RegisterFile_Multi_Banked::   full_crossbar_genMealy_read;
74        function_genMealy_write = &morpheo::behavioural::generic::registerfile::registerfile_multi_banked::RegisterFile_Multi_Banked::   full_crossbar_genMealy_write;
75      }
76    else
77      {
78        function_transition     = &morpheo::behavioural::generic::registerfile::registerfile_multi_banked::RegisterFile_Multi_Banked::   partial_crossbar_transition;
79        function_genMealy_read  = &morpheo::behavioural::generic::registerfile::registerfile_multi_banked::RegisterFile_Multi_Banked::   partial_crossbar_genMealy_read;
80        function_genMealy_write = &morpheo::behavioural::generic::registerfile::registerfile_multi_banked::RegisterFile_Multi_Banked::   partial_crossbar_genMealy_write;
81      }
82
[88]83    log_printf(INFO,RegisterFile_Multi_Banked,FUNCTION,"Method - transition");
[53]84
85    SC_METHOD (transition);
86    dont_initialize ();
[67]87    sensitive << (*(in_CLOCK)).pos();
[53]88
89#ifdef SYSTEMCASS_SPECIFIC
90    // List dependency information
91#endif   
92
[88]93    log_printf(INFO,RegisterFile_Multi_Banked,FUNCTION,"Method - genMealy_write");
[53]94
95    SC_METHOD (genMealy_read);
96    dont_initialize ();
[67]97    sensitive << (*(in_CLOCK)).neg();
[57]98    for (uint32_t i=0; i<_param->_nb_port_read; i++)
[62]99      {
100        sensitive << *( in_READ_VAL     [i]);
101        if (_param->_have_port_address == true)
102          sensitive << *( in_READ_ADDRESS [i]);
103      }
[53]104
105#ifdef SYSTEMCASS_SPECIFIC
106    // List dependency information
[57]107    for (uint32_t i=0; i<_param->_nb_port_read; i++)
[53]108      {
109        (*(out_READ_ACK  [i])) (*( in_READ_VAL     [i]));
[62]110        if (_param->_have_port_address == true)
[53]111        (*(out_READ_ACK  [i])) (*( in_READ_ADDRESS [i]));
112        (*(out_READ_DATA [i])) (*( in_READ_VAL     [i]));
[62]113        if (_param->_have_port_address == true)
[53]114        (*(out_READ_DATA [i])) (*( in_READ_ADDRESS [i]));
115      }
[57]116//     for (uint32_t i=0; i<_param->_nb_port_read_write; i++)
117//       { 
118//      (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_VAL     [i]));
119//      (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_RW      [i]));
120//      (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_ADDRESS [i]));
121//       }
[53]122#endif   
123
124    SC_METHOD (genMealy_write);
125    dont_initialize ();
[67]126    sensitive<< (*(in_CLOCK)).neg();
[57]127    for (uint32_t i=0; i<_param->_nb_port_write; i++)
[62]128      {
129        sensitive << *( in_WRITE_VAL     [i])
130                  << *( in_WRITE_DATA    [i]);
131        if (_param->_have_port_address == true)
132          sensitive << *( in_WRITE_ADDRESS [i]);
133      }
[53]134
135#ifdef SYSTEMCASS_SPECIFIC
136    // List dependency information
[57]137    for (uint32_t i=0; i<_param->_nb_port_write; i++)
[53]138      {
139        (*(out_WRITE_ACK  [i])) (*( in_WRITE_VAL     [i]));
[62]140        if (_param->_have_port_address == true)
[53]141        (*(out_WRITE_ACK  [i])) (*( in_WRITE_ADDRESS [i]));
142        (*(out_WRITE_ACK  [i])) (*( in_WRITE_DATA    [i]));
143      }
144#endif   
[88]145      }
[53]146#endif
[88]147    log_printf(FUNC,RegisterFile_Multi_Banked,FUNCTION,"End");
[53]148  };
149 
[88]150#undef  FUNCTION
151#define FUNCTION "RegisterFile_Multi_Banked::~RegisterFile_Multi_Banked"
[53]152  RegisterFile_Multi_Banked::~RegisterFile_Multi_Banked (void)
153  {
[88]154    log_printf(FUNC,RegisterFile_Multi_Banked,FUNCTION,"Begin");
[53]155
156#ifdef STATISTICS
[88]157    if (usage_is_set(_usage,USE_STATISTICS))
158      { 
159        log_printf(INFO,RegisterFile_Multi_Banked,FUNCTION,"Generate Statistics file");
160        delete _stat;
161      }
[53]162#endif
163
[88]164    log_printf(INFO,RegisterFile_Multi_Banked,FUNCTION,"Deallocation");
[53]165    deallocation ();
166
[88]167    log_printf(FUNC,RegisterFile_Multi_Banked,FUNCTION,"End");
[53]168  };
169
170}; // end namespace registerfile_multi_banked
171}; // end namespace registerfile
172}; // end namespace generic
173}; // end namespace behavioural
174}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.