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

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

1) Add test and configuration
2) Fix Bug
3) Add log file in load store unit
4) Fix Bug in environment

  • Property svn:keywords set to Id
File size: 6.3 KB
Line 
1/*
2 * $Id: Parameters.cpp 124 2009-06-17 12:11:25Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Parameters.h"
9#include "Common/include/BitManipulation.h"
10
11namespace morpheo {
12namespace behavioural {
13namespace generic {
14namespace registerfile {
15namespace registerfile_multi_banked {
16
17
18  Parameters::Parameters (uint32_t    nb_port_read         ,
19                          uint32_t    nb_port_write        ,
20                          uint32_t    nb_word              ,
21                          uint32_t    size_word            ,
22                          uint32_t    nb_bank              ,
23                          uint32_t    nb_port_read_by_bank ,
24                          uint32_t    nb_port_write_by_bank,
25                          Tcrossbar_t crossbar             ,
26                          std::string init_value
27                          ):
28    _nb_port_read          (nb_port_read         ),
29    _nb_port_write         (nb_port_write        ),
30    _nb_word               (nb_word              ),
31    _size_word             (size_word            ),
32    _nb_bank               (nb_bank              ),
33    _nb_port_read_by_bank  (nb_port_read_by_bank ),
34    _nb_port_write_by_bank (nb_port_write_by_bank),
35    _crossbar              (crossbar             ),
36    _have_init_value       (init_value != ""     ),
37    _init_value            (init_value           ),
38    _size_address          (static_cast<uint32_t>(ceil(log2(_nb_word)))),
39    _size_address_by_bank  (_size_address - static_cast<uint32_t>(ceil(log2(_nb_bank)))),
40
41    // Address : [....................]  [size_address-1:0]
42    // Bank    : [....]                  [size_address-1:size_address-1-log2(nb_bank)]
43    // num_reg :      ]...............]  [size_address-2-log2(nb_bank):0]
44    _bank_shift            (_size_address_by_bank),
45    _bank_mask             (gen_mask<Taddress_t>(static_cast<Taddress_t>(ceil(log2(_nb_bank))))),
46    _num_reg_shift         (0),
47    _num_reg_mask          (gen_mask<Taddress_t>(_size_address_by_bank)),
48    _nb_word_by_bank       (_nb_word / _nb_bank),
49    _have_port_address     (_size_address         != 0),
50    _have_bank_port_address(_size_address_by_bank != 0)
51  {
52    log_printf(FUNC,RegisterFile_Multi_Banked,"Parameters","Begin");
53
54    if (_crossbar == PARTIAL_CROSSBAR)
55      {
56        log_printf(TRACE,RegisterFile_Multi_Banked,"Parameters","Case : _crossbar == PARTIAL_CROSSBAR");
57
58        // All port_src is connected with one port_dest on each bank
59       
60        _link_port_read_to_bank_read     = new uint32_t [_nb_port_read ];
61        _link_port_write_to_bank_write   = new uint32_t [_nb_port_write];
62
63        // init
64        for (uint32_t i=0; i<_nb_port_read ;i++)
65          {
66            uint32_t x = i%_nb_port_read_by_bank;
67            _link_port_read_to_bank_read [i] = x;
68          }
69        for (uint32_t i=0; i<_nb_port_write;i++)
70          {
71            uint32_t x = i%_nb_port_write_by_bank;
72            _link_port_write_to_bank_write   [i] = x;
73          }
74
75
76        log_printf(TRACE,RegisterFile_Multi_Banked,"Parameters"," * _link_port_read_to_bank_read");
77        for (uint32_t i=0; i<_nb_port_read         ;i++)
78          {
79            log_printf(TRACE,RegisterFile_Multi_Banked,"Parameters","   * Read  in  [%d] to out    [%d]",i,_link_port_read_to_bank_read          [i]);
80          }
81        log_printf(TRACE,RegisterFile_Multi_Banked,"Parameters"," * _link_port_write_to_bank_write");
82        for (uint32_t i=0; i<_nb_port_write        ;i++)
83          {
84            log_printf(TRACE,RegisterFile_Multi_Banked,"Parameters","   * Write in  [%d] to out    [%d]",i,_link_port_write_to_bank_write          [i]);
85          }
86      }
87    // else : don't allocate
88
89    test();
90    log_printf(FUNC,RegisterFile_Multi_Banked,"Parameters","End");
91  };
92 
93//   Parameters::Parameters (Parameters & param):
94//     _nb_port_read          (param._nb_port_read         ),
95//     _nb_port_write         (param._nb_port_write        ),
96//     _nb_word               (param._nb_word              ),
97//     _size_word             (param._size_word            ),
98//     _nb_bank               (param._nb_bank              ),
99//     _nb_port_read_by_bank  (param._nb_port_read_by_bank ),
100//     _nb_port_write_by_bank (param._nb_port_write_by_bank),
101//     _crossbar              (param._crossbar             ),
102//     _size_address          (param._size_address         ),
103//     _size_address_by_bank  (param._size_address_by_bank ),
104//     _bank_shift            (param._bank_shift           ),
105//     _bank_mask             (param._bank_mask            ),
106//     _num_reg_shift         (param._num_reg_shift        ),
107//     _num_reg_mask          (param._num_reg_mask         ),
108//     _nb_word_by_bank       (param._nb_word_by_bank      ),
109//     _have_port_address     (param._have_port_address     ),
110//     _have_bank_port_address(param._have_bank_port_address)
111//   {
112//     log_printf(FUNC,RegisterFile_Multi_Banked,"Parameters (copy)","Begin");
113
114//     if (_crossbar == PARTIAL_CROSSBAR)
115//       {
116//      // All port_src is connected with one port_dest on each bank
117       
118//      _link_port_read_to_bank_read     = new uint32_t [_nb_port_read ];
119// //   _link_port_read_to_num_bank         = new uint32_t [_nb_port_read ];
120//      _link_port_write_to_bank_write   = new uint32_t [_nb_port_write];
121// //   _link_port_write_to_num_bank        = new uint32_t [_nb_port_write];
122
123//      for (uint32_t i=0; i<_nb_port_read         ;i++)
124//        {
125//          _link_port_read_to_bank_read   [i] = param._link_port_read_to_bank_read     [i];
126// //       _link_port_read_to_num_bank       [i] = param._link_port_read_to_num_bank    [i];
127//        }
128//      for (uint32_t i=0; i<_nb_port_write        ;i++)
129//        {
130//          _link_port_write_to_bank_write [i] = param._link_port_write_to_bank_write    [i];
131// //       _link_port_write_to_num_bank      [i] = param._link_port_write_to_num_bank   [i];
132//        }
133//       }
134
135//     test();
136//     log_printf(FUNC,RegisterFile_Multi_Banked,"Parameters (copy)","End");
137//   };
138
139  Parameters::~Parameters () 
140  {
141    log_printf(FUNC,RegisterFile_Multi_Banked,"~Parameters","Begin");
142
143    if (_crossbar == PARTIAL_CROSSBAR)
144      {
145        delete [] _link_port_read_to_bank_read    ;
146//      delete [] _link_port_read_to_num_bank   ;
147        delete [] _link_port_write_to_bank_write   ;
148//      delete [] _link_port_write_to_num_bank  ;
149      }
150    log_printf(FUNC,RegisterFile_Multi_Banked,"~Parameters","End");
151  };
152
153  void Parameters::copy (void) 
154  {
155    log_printf(FUNC,RegisterFile_Multi_Banked,"copy","Begin");
156    log_printf(FUNC,RegisterFile_Multi_Banked,"copy","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.