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

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

Documentation pour chaque composant.
Documentation : ajout d'un poster et d'un article.
RegisterFile_Multi_Banked_Glue - non encore stable.

File size: 6.5 KB
Line 
1/*
2 * $Id$
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
9
10namespace morpheo                    {
11namespace behavioural {
12namespace generic {
13namespace registerfile{
14namespace registerfile_multi_banked {
15namespace registerfile_multi_banked_glue {
16
17
18#ifdef SYSTEMC
19  RegisterFile_Multi_Banked_Glue::RegisterFile_Multi_Banked_Glue (sc_module_name name,
20#else
21  RegisterFile_Multi_Banked_Glue::RegisterFile_Multi_Banked_Glue (string name,
22#endif
23#ifdef STATISTICS
24                              morpheo::behavioural::Parameters_Statistics             param_statistics,
25#endif
26                              morpheo::behavioural::generic::registerfile::registerfile_multi_banked::registerfile_multi_banked_glue::Parameters param ):
27                              _name              (name)
28                              ,_param            (param)
29// #ifdef STATISTICS
30//                            ,_param_statistics (param_statistics)
31// #endif
32  {
33    log_printf(FUNC,RegisterFile_Multi_Banked_Glue,"RegisterFile_Multi_Banked_Glue","Begin");
34
35#ifdef SYSTEMC
36    // write function pointer
37    if (_crossbar == PARTIAL_CROSSBAR)
38      {
39        link_port_read_in_to_out     = &morpheo::behavioural::generic::registerfile::registerfile_multi_banked::registerfile_multi_banked_glue::RegisterFile_Multi_Banked_Glue::partial_crossbar_link_port_read_in_to_out    ;
40        link_port_read_in_to_select  = &morpheo::behavioural::generic::registerfile::registerfile_multi_banked::registerfile_multi_banked_glue::RegisterFile_Multi_Banked_Glue::partial_crossbar_link_port_read_in_to_select ;
41        link_port_write_in_to_out    = &morpheo::behavioural::generic::registerfile::registerfile_multi_banked::registerfile_multi_banked_glue::RegisterFile_Multi_Banked_Glue::partial_crossbar_link_port_write_in_to_out   ;
42        link_port_write_in_to_select = &morpheo::behavioural::generic::registerfile::registerfile_multi_banked::registerfile_multi_banked_glue::RegisterFile_Multi_Banked_Glue::partial_crossbar_link_port_write_in_to_select;
43      }
44    else
45      {
46        link_port_read_in_to_out     = &morpheo::behavioural::generic::registerfile::registerfile_multi_banked::registerfile_multi_banked_glue::RegisterFile_Multi_Banked_Glue::   full_crossbar_link_port_read_in_to_out    ;
47        link_port_read_in_to_select  = &morpheo::behavioural::generic::registerfile::registerfile_multi_banked::registerfile_multi_banked_glue::RegisterFile_Multi_Banked_Glue::   full_crossbar_link_port_read_in_to_select ;
48        link_port_write_in_to_out    = &morpheo::behavioural::generic::registerfile::registerfile_multi_banked::registerfile_multi_banked_glue::RegisterFile_Multi_Banked_Glue::   full_crossbar_link_port_write_in_to_out   ;
49        link_port_write_in_to_select = &morpheo::behavioural::generic::registerfile::registerfile_multi_banked::registerfile_multi_banked_glue::RegisterFile_Multi_Banked_Glue::   full_crossbar_link_port_write_in_to_select;
50      }
51#endif
52
53#ifdef STATISTICS
54    log_printf(INFO,RegisterFile_Multi_Banked_Glue,"RegisterFile_Multi_Banked_Glue","Allocation of statistics");
55
56    // Allocation of statistics
57    _stat = new Statistics (static_cast<string>(_name),
58                            param_statistics          ,
59                            param);
60#endif
61
62#ifdef VHDL_TESTBENCH
63    log_printf(INFO,RegisterFile_Multi_Banked_Glue,"RegisterFile_Multi_Banked_Glue","Creation of a testbench");
64
65    // Creation of a testbench
66    //  -> port
67    //  -> clock's signals
68    _vhdl_testbench = new Vhdl_Testbench (_name);
69#endif
70
71#ifdef VHDL
72    // generate the vhdl
73    log_printf(INFO,RegisterFile_Multi_Banked_Glue,"RegisterFile_Multi_Banked_Glue","Generate the vhdl");
74
75    vhdl();
76#endif
77
78#ifdef VHDL_TESTBENCH
79    _vhdl_testbench->set_clock    ("in_CLOCK",false);
80#endif
81
82#ifdef SYSTEMC
83    log_printf(INFO,RegisterFile_Multi_Banked_Glue,"RegisterFile_Multi_Banked_Glue","Allocation");
84
85    allocation ();
86   
87#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
88    log_printf(INFO,RegisterFile_Multi_Banked_Glue,"RegisterFile_Multi_Banked_Glue","Method - transition");
89
90    SC_METHOD (transition);
91    dont_initialize ();
92    sensitive_pos << *(in_CLOCK);
93#endif
94
95    log_printf(INFO,RegisterFile_Multi_Banked_Glue,"RegisterFile_Multi_Banked_Glue","Method - transition");
96
97    SC_METHOD (genMealy_read_in);
98    dont_initialize ();
99    for (uint32_t l=0; l<_param._nb_port_read; l++)
100      sensitive << (*(in_READ_IN_ADDRESS [l]));
101    for (uint32_t i=0; i<_param._nb_bank; i++)
102       for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
103         {
104           sensitive << (*(in_READ_OUT_ACK      [i][j]))
105                     << (*(in_READ_OUT_DATA     [i][j]));
106           for (uint32_t k=0; k<_param._nb_port_select_by_bank_read_port[j]; k++)
107             sensitive << (*(in_READ_SELECT_ACK [i][j][k]));
108         }
109
110#ifdef SYSTEMCASS_SPECIFIC
111    // List dependency information
112    for (uint32_t l=0; l<_param._nb_port_read; l++)
113      {
114        (*(out_READ_IN_ACK  [l])) (*(in_READ_IN_ADDRESS [l]));
115        (*(out_READ_IN_DATA [l])) (*(in_READ_IN_ADDRESS [l]));
116
117        for (uint32_t i=0; i<_param._nb_bank; i++)
118          for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
119            {
120              (*(out_READ_IN_ACK  [l])) (*(in_READ_OUT_ACK      [i][j]));
121              (*(out_READ_IN_DATA [l])) (*(in_READ_OUT_DATA     [i][j]));
122              for (uint32_t k=0; k<_param._nb_port_select_by_bank_read_port[j]; k++)
123                {
124                  (*(out_READ_IN_ACK  [l])) (*(in_READ_SELECT_ACK [i][j][k]));
125                  (*(out_READ_IN_DATA [l])) (*(in_READ_SELECT_ACK [i][j][k]));
126                }
127            }
128      }
129#endif   
130
131#endif
132    log_printf(FUNC,RegisterFile_Multi_Banked_Glue,"RegisterFile_Multi_Banked_Glue","End");
133  };
134 
135  RegisterFile_Multi_Banked_Glue::~RegisterFile_Multi_Banked_Glue (void)
136  {
137    log_printf(FUNC,RegisterFile_Multi_Banked_Glue,"~RegisterFile_Multi_Banked_Glue","Begin");
138
139#ifdef VHDL_TESTBENCH
140    log_printf(INFO,RegisterFile_Multi_Banked_Glue,"~RegisterFile_Multi_Banked_Glue","Generate Testbench  file");
141
142    // generate the test bench
143    _vhdl_testbench->generate_file();
144    delete _vhdl_testbench;
145#endif
146
147#ifdef STATISTICS
148    log_printf(INFO,RegisterFile_Multi_Banked_Glue,"~RegisterFile_Multi_Banked_Glue","Generate Statistics file");
149
150    _stat->generate_file(statistics(0));
151   
152    delete _stat;
153#endif
154
155#ifdef SYSTEMC
156    log_printf(INFO,RegisterFile_Multi_Banked_Glue,"~RegisterFile_Multi_Banked_Glue","Deallocation");
157
158    deallocation ();
159#endif
160
161    log_printf(FUNC,RegisterFile_Multi_Banked_Glue,"~RegisterFile_Multi_Banked_Glue","End");
162  };
163
164}; // end namespace registerfile_multi_banked_glue
165}; // end namespace registerfile_multi_banked
166}; // end namespace registerfile
167}; // end namespace generic
168
169}; // end namespace behavioural
170}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.