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

Last change on this file since 57 was 57, checked in by rosiere, 17 years ago
  • VHDL - RegisterFile_Multi_Banked (only partial_crossbar)
  • SystemC - modif Component, interface and co -> ajout du type Tusage_T pour instancier un coposant mais ne demander que le VHDL ou le systemC.
  • Séminaire interne
File size: 5.8 KB
Line 
1/*
2 * $Id$
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    _nb_port_read          (nb_port_read         ),
27    _nb_port_write         (nb_port_write        ),
28    _nb_word               (nb_word              ),
29    _size_word             (size_word            ),
30    _nb_bank               (nb_bank              ),
31    _nb_port_read_by_bank  (nb_port_read_by_bank ),
32    _nb_port_write_by_bank (nb_port_write_by_bank),
33    _crossbar              (crossbar             ),
34    _size_address          (static_cast<uint32_t>(ceil(log2(_nb_word)))),
35    _size_address_by_bank  (_size_address - static_cast<uint32_t>(ceil(log2(_nb_bank)))),
36
37    // Address : [....................]  [size_address-1:0]
38    // Bank    : [....]                  [size_address-1:size_address-1-log2(nb_bank)]
39    // num_reg :      ]...............]  [size_address-2-log2(nb_bank):0]
40    _bank_shift            (_size_address_by_bank),
41    _bank_mask             (gen_mask<Taddress_t>(static_cast<Taddress_t>(ceil(log2(_nb_bank))))),
42    _num_reg_shift         (0),
43    _num_reg_mask          (gen_mask<Taddress_t>(_size_address_by_bank)),
44    _nb_word_by_bank       (_nb_word / _nb_bank)
45  {
46    log_printf(FUNC,RegisterFile_Multi_Banked,"Parameters","Begin");
47
48    if (_crossbar == PARTIAL_CROSSBAR)
49      {
50        log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","Case : _crossbar == PARTIAL_CROSSBAR");
51
52        // All port_src is connected with one port_dest on each bank
53       
54        _link_port_read_to_bank_read     = new uint32_t [_nb_port_read ];
55        _link_port_write_to_bank_write   = new uint32_t [_nb_port_write];
56
57        // init
58        for (uint32_t i=0; i<_nb_port_read ;i++)
59          {
60            uint32_t x = i%_nb_port_read_by_bank;
61            _link_port_read_to_bank_read [i] = x;
62          }
63        for (uint32_t i=0; i<_nb_port_write;i++)
64          {
65            uint32_t x = i%_nb_port_write_by_bank;
66            _link_port_write_to_bank_write   [i] = x;
67          }
68
69
70        log_printf(NONE,RegisterFile_Multi_Banked,"Parameters"," * _link_port_read_to_bank_read");
71        for (uint32_t i=0; i<_nb_port_read         ;i++)
72          {
73          log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","   * Read  in  [%d] to out    [%d]",i,_link_port_read_to_bank_read          [i]);
74          printf("   * Read  in  [%d] to out    [%d]\n",i,_link_port_read_to_bank_read          [i]);
75          }
76        log_printf(NONE,RegisterFile_Multi_Banked,"Parameters"," * _link_port_write_to_bank_write");
77        for (uint32_t i=0; i<_nb_port_write        ;i++)
78          {
79            log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","   * Write in  [%d] to out    [%d]",i,_link_port_write_to_bank_write          [i]);
80            printf("   * Write in  [%d] to out    [%d]\n",i,_link_port_write_to_bank_write          [i]);
81          }
82      }
83    // else : don't allocate
84
85    test();
86    log_printf(FUNC,RegisterFile_Multi_Banked,"Parameters","End");
87  };
88 
89  Parameters::Parameters (Parameters & param):
90    _nb_port_read          (param._nb_port_read         ),
91    _nb_port_write         (param._nb_port_write        ),
92    _nb_word               (param._nb_word              ),
93    _size_word             (param._size_word            ),
94    _nb_bank               (param._nb_bank              ),
95    _nb_port_read_by_bank  (param._nb_port_read_by_bank ),
96    _nb_port_write_by_bank (param._nb_port_write_by_bank),
97    _crossbar              (param._crossbar             ),
98    _size_address          (param._size_address         ),
99    _size_address_by_bank  (param._size_address_by_bank ),
100    _bank_shift            (param._bank_shift           ),
101    _bank_mask             (param._bank_mask            ),
102    _num_reg_shift         (param._num_reg_shift        ),
103    _num_reg_mask          (param._num_reg_mask         ),
104    _nb_word_by_bank       (param._nb_word_by_bank      )
105  {
106    log_printf(FUNC,RegisterFile_Multi_Banked,"Parameters (copy)","Begin");
107
108    if (_crossbar == PARTIAL_CROSSBAR)
109      {
110        // All port_src is connected with one port_dest on each bank
111       
112        _link_port_read_to_bank_read     = new uint32_t [_nb_port_read ];
113//      _link_port_read_to_num_bank         = new uint32_t [_nb_port_read ];
114        _link_port_write_to_bank_write   = new uint32_t [_nb_port_write];
115//      _link_port_write_to_num_bank        = new uint32_t [_nb_port_write];
116
117        for (uint32_t i=0; i<_nb_port_read         ;i++)
118          {
119            _link_port_read_to_bank_read   [i] = param._link_port_read_to_bank_read     [i];
120//          _link_port_read_to_num_bank       [i] = param._link_port_read_to_num_bank    [i];
121          }
122        for (uint32_t i=0; i<_nb_port_write        ;i++)
123          {
124            _link_port_write_to_bank_write [i] = param._link_port_write_to_bank_write    [i];
125//          _link_port_write_to_num_bank      [i] = param._link_port_write_to_num_bank   [i];
126          }
127      }
128
129    test();
130    log_printf(FUNC,RegisterFile_Multi_Banked,"Parameters (copy)","End");
131  };
132
133  Parameters::~Parameters () 
134  {
135    log_printf(FUNC,RegisterFile_Multi_Banked,"~Parameters","Begin");
136
137    if (_crossbar == PARTIAL_CROSSBAR)
138      {
139        delete [] _link_port_read_to_bank_read    ;
140//      delete [] _link_port_read_to_num_bank   ;
141        delete [] _link_port_write_to_bank_write   ;
142//      delete [] _link_port_write_to_num_bank  ;
143      }
144    log_printf(FUNC,RegisterFile_Multi_Banked,"~Parameters","End");
145  };
146
147}; // end namespace registerfile_multi_banked
148}; // end namespace registerfile
149}; // end namespace generic
150
151}; // end namespace behavioural
152}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.