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

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

Almost complete design
with Test and test platform

  • Property svn:keywords set to Id
File size: 5.5 KB
Line 
1/*
2 * $Id: RegisterFile_Multi_Banked.cpp 88 2008-12-10 18:31:39Z 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.