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

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

Ajout d'un nouveau composant : fifo generic (un port lecture et un port ecriture).

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