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

Last change on this file was 137, checked in by rosiere, 14 years ago

Various modif (add test, and vhdl)

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