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

Last change on this file since 75 was 75, checked in by rosiere, 16 years ago

Update all component (except front_end) to :

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