source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked.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: 5.5 KB
Line 
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
16#undef  FUNCTION
17#define FUNCTION "RegisterFile_Multi_Banked::RegisterFile_Multi_Banked"
18  RegisterFile_Multi_Banked::RegisterFile_Multi_Banked
19  (
20#ifdef SYSTEMC
21   sc_module_name name,
22#else
23   std::string name,
24#endif
25#ifdef STATISTICS
26   morpheo::behavioural::Parameters_Statistics * param_statistics,
27#endif
28   morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters * param,
29   Tusage_t usage):
30    _name              (name)
31    ,_param            (param)
32    ,_usage (usage)
33  {
34    log_printf(FUNC,RegisterFile_Multi_Banked,FUNCTION,"Begin");
35
36// #if DEBUG_RegisterFile_Multi_Banked == true
37//     log_printf(INFO,RegisterFile_Multi_Banked,FUNCTION,_("<%s> Parameters"),_name.c_str());
38
39//     std::cout << *param << std::endl;
40// #endif   
41
42    log_printf(INFO,RegisterFile_Multi_Banked,FUNCTION,"Allocation");
43   
44    allocation ();
45
46#ifdef STATISTICS
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      }
54#endif
55
56#ifdef VHDL
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      }
64#endif
65
66#ifdef SYSTEMC
67    if (usage_is_set(_usage,USE_SYSTEMC))
68      { 
69    // Function pointer
70    if (_param->_crossbar == FULL_CROSSBAR)                             
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
83    log_printf(INFO,RegisterFile_Multi_Banked,FUNCTION,"Method - transition");
84
85    SC_METHOD (transition);
86    dont_initialize ();
87    sensitive << (*(in_CLOCK)).pos();
88
89#ifdef SYSTEMCASS_SPECIFIC
90    // List dependency information
91#endif   
92
93    log_printf(INFO,RegisterFile_Multi_Banked,FUNCTION,"Method - genMealy_write");
94
95    SC_METHOD (genMealy_read);
96    dont_initialize ();
97    sensitive << (*(in_CLOCK)).neg();
98    for (uint32_t i=0; i<_param->_nb_port_read; i++)
99      {
100        sensitive << *( in_READ_VAL     [i]);
101        if (_param->_have_port_address == true)
102          sensitive << *( in_READ_ADDRESS [i]);
103      }
104
105#ifdef SYSTEMCASS_SPECIFIC
106    // List dependency information
107    for (uint32_t i=0; i<_param->_nb_port_read; i++)
108      {
109        (*(out_READ_ACK  [i])) (*( in_READ_VAL     [i]));
110        if (_param->_have_port_address == true)
111        (*(out_READ_ACK  [i])) (*( in_READ_ADDRESS [i]));
112        (*(out_READ_DATA [i])) (*( in_READ_VAL     [i]));
113        if (_param->_have_port_address == true)
114        (*(out_READ_DATA [i])) (*( in_READ_ADDRESS [i]));
115      }
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//       }
122#endif   
123
124    SC_METHOD (genMealy_write);
125    dont_initialize ();
126    sensitive<< (*(in_CLOCK)).neg();
127    for (uint32_t i=0; i<_param->_nb_port_write; i++)
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      }
134
135#ifdef SYSTEMCASS_SPECIFIC
136    // List dependency information
137    for (uint32_t i=0; i<_param->_nb_port_write; i++)
138      {
139        (*(out_WRITE_ACK  [i])) (*( in_WRITE_VAL     [i]));
140        if (_param->_have_port_address == true)
141        (*(out_WRITE_ACK  [i])) (*( in_WRITE_ADDRESS [i]));
142        (*(out_WRITE_ACK  [i])) (*( in_WRITE_DATA    [i]));
143      }
144#endif   
145      }
146#endif
147    log_printf(FUNC,RegisterFile_Multi_Banked,FUNCTION,"End");
148  };
149 
150#undef  FUNCTION
151#define FUNCTION "RegisterFile_Multi_Banked::~RegisterFile_Multi_Banked"
152  RegisterFile_Multi_Banked::~RegisterFile_Multi_Banked (void)
153  {
154    log_printf(FUNC,RegisterFile_Multi_Banked,FUNCTION,"Begin");
155
156#ifdef STATISTICS
157    if (usage_is_set(_usage,USE_STATISTICS))
158      { 
159        log_printf(INFO,RegisterFile_Multi_Banked,FUNCTION,"Generate Statistics file");
160        delete _stat;
161      }
162#endif
163
164    log_printf(INFO,RegisterFile_Multi_Banked,FUNCTION,"Deallocation");
165    deallocation ();
166
167    log_printf(FUNC,RegisterFile_Multi_Banked,FUNCTION,"End");
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.