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

Last change on this file since 132 was 132, checked in by rosiere, 15 years ago

1) add constant method - compatibility with SystemC
2) add Script to test sensitive list
3) fix bug in sensitive list

  • Property svn:keywords set to Id
File size: 5.6 KB
RevLine 
[53]1/*
2 * $Id: RegisterFile_Multi_Banked.cpp 132 2009-07-11 16:39:35Z 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 ();
[132]97    sensitive << (*(in_CLOCK)).neg()
98              << (*(in_NRESET));
[57]99    for (uint32_t i=0; i<_param->_nb_port_read; i++)
[62]100      {
101        sensitive << *( in_READ_VAL     [i]);
102        if (_param->_have_port_address == true)
103          sensitive << *( in_READ_ADDRESS [i]);
104      }
[53]105
106#ifdef SYSTEMCASS_SPECIFIC
107    // List dependency information
[57]108    for (uint32_t i=0; i<_param->_nb_port_read; i++)
[53]109      {
110        (*(out_READ_ACK  [i])) (*( in_READ_VAL     [i]));
[62]111        if (_param->_have_port_address == true)
[53]112        (*(out_READ_ACK  [i])) (*( in_READ_ADDRESS [i]));
113        (*(out_READ_DATA [i])) (*( in_READ_VAL     [i]));
[62]114        if (_param->_have_port_address == true)
[53]115        (*(out_READ_DATA [i])) (*( in_READ_ADDRESS [i]));
116      }
[57]117//     for (uint32_t i=0; i<_param->_nb_port_read_write; i++)
118//       { 
119//      (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_VAL     [i]));
120//      (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_RW      [i]));
121//      (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_ADDRESS [i]));
122//       }
[53]123#endif   
124
125    SC_METHOD (genMealy_write);
126    dont_initialize ();
[132]127    sensitive<< (*(in_CLOCK)).neg()
128             << (*(in_NRESET));
[57]129    for (uint32_t i=0; i<_param->_nb_port_write; i++)
[62]130      {
131        sensitive << *( in_WRITE_VAL     [i])
132                  << *( in_WRITE_DATA    [i]);
133        if (_param->_have_port_address == true)
134          sensitive << *( in_WRITE_ADDRESS [i]);
135      }
[53]136
137#ifdef SYSTEMCASS_SPECIFIC
138    // List dependency information
[57]139    for (uint32_t i=0; i<_param->_nb_port_write; i++)
[53]140      {
141        (*(out_WRITE_ACK  [i])) (*( in_WRITE_VAL     [i]));
[62]142        if (_param->_have_port_address == true)
[53]143        (*(out_WRITE_ACK  [i])) (*( in_WRITE_ADDRESS [i]));
144        (*(out_WRITE_ACK  [i])) (*( in_WRITE_DATA    [i]));
145      }
146#endif   
[88]147      }
[53]148#endif
[88]149    log_printf(FUNC,RegisterFile_Multi_Banked,FUNCTION,"End");
[53]150  };
151 
[88]152#undef  FUNCTION
153#define FUNCTION "RegisterFile_Multi_Banked::~RegisterFile_Multi_Banked"
[53]154  RegisterFile_Multi_Banked::~RegisterFile_Multi_Banked (void)
155  {
[88]156    log_printf(FUNC,RegisterFile_Multi_Banked,FUNCTION,"Begin");
[53]157
158#ifdef STATISTICS
[88]159    if (usage_is_set(_usage,USE_STATISTICS))
160      { 
161        log_printf(INFO,RegisterFile_Multi_Banked,FUNCTION,"Generate Statistics file");
162        delete _stat;
163      }
[53]164#endif
165
[88]166    log_printf(INFO,RegisterFile_Multi_Banked,FUNCTION,"Deallocation");
[53]167    deallocation ();
168
[88]169    log_printf(FUNC,RegisterFile_Multi_Banked,FUNCTION,"End");
[53]170  };
171
172}; // end namespace registerfile_multi_banked
173}; // end namespace registerfile
174}; // end namespace generic
175}; // end namespace behavioural
176}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.