source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/SelfTest/src/main.cpp @ 111

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

1) Decod_queue : multi implementation (one_fifo, multi_fifo)
2) Issue_queue : multi implementation (in_order, out_of_order)
3) Direction : Add Meta predictor
4) Context_State : re add Branch_complete, More priority to Load miss (is not speculative)
5) Return_Address_Stack : update reg_PREDICT pointer on decod miss prediction
6) UPT : Fix bug in multi event
7) Prediction_glue : in read_stack case, insert in UPT pc_next
8) Rename select : when rob have an event (need flush), read_r{a,b,c} and write_r{d,e} is set at 0

  • Property svn:keywords set to Id
File size: 7.8 KB
Line 
1/*
2 * $Id: main.cpp 111 2009-02-27 18:37:40Z rosiere $
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/SelfTest/include/test.h"
9
10#define NB_PARAMS 18
11
12void usage (int argc, char * argv[])
13{
14  err (_("<Usage> %s name_instance list_params.\n"),argv[0]);
15  err (_("list_params is :\n"));
16  err (_(" * nb_context                                            (uint32_t             )\n"));
17  err (_(" * nb_front_end                                          (uint32_t             )\n"));
18  err (_(" * nb_rename_unit                                        (uint32_t             )\n"));
19  err (_(" * size_queue                                            (uint32_t             )\n"));
20  err (_(" * queue_scheme                                          (Tissue_queue_scheme_t)\n"));
21  err (_(" * nb_bank                                               (uint32_t             )\n"));
22  err (_(" * size_packet                                           (uint32_t             )\n"));
23  err (_(" * size_general_data                                     (uint32_t             )\n"));
24  err (_(" * size_special_data                                     (uint32_t             )\n"));
25  err (_(" * size_general_register                                 (uint32_t             )\n"));
26  err (_(" * size_special_register                                 (uint32_t             )\n"));
27  err (_(" * size_store_queue_ptr                                  (uint32_t             )\n"));
28  err (_(" * size_load_queue_ptr                                   (uint32_t             )\n"));
29  err (_(" * nb_inst_issue                                         (uint32_t             )\n"));
30  err (_(" * nb_inst_rename        [nb_rename_unit]                (uint32_t             )\n"));
31  err (_(" * nb_inst_reexecute                                     (uint32_t             )\n"));
32  err (_(" * nb_rename_unit_select                                 (uint32_t             )\n"));
33  err (_(" * priority                                              (Tpriority_t          )\n"));
34  err (_(" * load_balancing                                        (Tload_balancing_t    )\n"));
35  err (_(" * table_routing         [nb_rename_unit][nb_inst_issue] (bool                 )\n"));
36  err (_(" * table_routing         [nb_inst_issue][nb_type]        (bool                 )\n"));
37  err (_("   * TYPE_ALU    \n"));
38  err (_("   * TYPE_SHIFT  \n"));
39  err (_("   * TYPE_MOVE   \n"));
40  err (_("   * TYPE_TEST   \n"));
41  err (_("   * TYPE_MUL    \n"));
42  err (_("   * TYPE_DIV    \n"));
43  err (_("   * TYPE_EXTEND \n"));
44  err (_("   * TYPE_FIND   \n"));
45  err (_("   * TYPE_SPECIAL\n"));
46  err (_("   * TYPE_CUSTOM \n"));
47  err (_("   * TYPE_BRANCH \n"));
48  err (_("   * TYPE_MEMORY \n"));
49
50  exit (1);
51}
52
53#ifndef SYSTEMC
54int main    (int argc, char * argv[])
55#else
56int sc_main (int argc, char * argv[])
57#endif
58{
59  if (argc <= static_cast<int>(2+NB_PARAMS))
60    usage (argc, argv);
61
62  uint32_t x = 1;
63
64  string name = argv[x++];
65
66  uint32_t          _nb_context             = fromString<uint32_t         >(argv[x++]);
67  uint32_t          _nb_front_end           = fromString<uint32_t         >(argv[x++]);
68  uint32_t          _nb_rename_unit         = fromString<uint32_t         >(argv[x++]);
69
70  if (argc <= static_cast<int>(2+NB_PARAMS+_nb_rename_unit))
71    usage (argc, argv);
72
73  uint32_t          _size_queue             = fromString<uint32_t         >(argv[x++]);
74  Tissue_queue_scheme_t _queue_scheme       = fromString<Tissue_queue_scheme_t>(argv[x++]);
75  uint32_t          _nb_bank                = fromString<uint32_t         >(argv[x++]);
76  uint32_t          _size_packet            = fromString<uint32_t         >(argv[x++]);
77  uint32_t          _size_general_data      = fromString<uint32_t         >(argv[x++]);
78  uint32_t          _size_special_data      = fromString<uint32_t         >(argv[x++]);
79  uint32_t          _size_general_register  = fromString<uint32_t         >(argv[x++]);
80  uint32_t          _size_special_register  = fromString<uint32_t         >(argv[x++]);
81  uint32_t          _size_store_queue_ptr   = fromString<uint32_t         >(argv[x++]);
82  uint32_t          _size_load_queue_ptr    = fromString<uint32_t         >(argv[x++]);
83  uint32_t          _nb_inst_issue          = fromString<uint32_t         >(argv[x++]);
84  uint32_t        * _nb_inst_rename         = new uint32_t [_nb_rename_unit];
85  for (uint32_t i=0; i<_nb_rename_unit; i++)
86    _nb_inst_rename [i] = fromString<uint32_t>(argv[x++]);
87  uint32_t          _nb_inst_reexecute      = fromString<uint32_t         >(argv[x++]);
88  uint32_t          _nb_rename_unit_select  = fromString<uint32_t         >(argv[x++]);
89  Tpriority_t       _priority               = fromString<Tpriority_t      >(argv[x++]);
90  Tload_balancing_t _load_balancing         = fromString<Tload_balancing_t>(argv[x++]);
91
92  if (argc != static_cast<int>(2+NB_PARAMS+_nb_rename_unit+(_nb_rename_unit+12)*_nb_inst_issue))
93    usage (argc, argv);
94
95  bool           ** _table_routing          = new bool * [_nb_rename_unit];
96  for (uint32_t i=0; i<_nb_rename_unit; i++)
97    {
98      _table_routing [i] = new bool [_nb_inst_issue];
99      for (uint32_t j=0; j<_nb_inst_issue; j++)
100        _table_routing [i][j] = fromString<bool>(argv[x++]);
101    }
102
103  bool           ** _table_issue_type          = new bool * [_nb_inst_issue];
104  for (uint32_t i=0; i<_nb_inst_issue; i++)
105    {
106      _table_issue_type [i] = new bool [_nb_inst_issue];
107
108      _table_issue_type [i][TYPE_ALU    ] = fromString<bool>(argv[x++]);
109      _table_issue_type [i][TYPE_SHIFT  ] = fromString<bool>(argv[x++]);
110      _table_issue_type [i][TYPE_MOVE   ] = fromString<bool>(argv[x++]);
111      _table_issue_type [i][TYPE_TEST   ] = fromString<bool>(argv[x++]);
112      _table_issue_type [i][TYPE_MUL    ] = fromString<bool>(argv[x++]);
113      _table_issue_type [i][TYPE_DIV    ] = fromString<bool>(argv[x++]);
114      _table_issue_type [i][TYPE_EXTEND ] = fromString<bool>(argv[x++]);
115      _table_issue_type [i][TYPE_FIND   ] = fromString<bool>(argv[x++]);
116      _table_issue_type [i][TYPE_SPECIAL] = fromString<bool>(argv[x++]);
117      _table_issue_type [i][TYPE_CUSTOM ] = fromString<bool>(argv[x++]);
118      _table_issue_type [i][TYPE_BRANCH ] = fromString<bool>(argv[x++]);
119      _table_issue_type [i][TYPE_MEMORY ] = fromString<bool>(argv[x++]);
120    }
121
122  int _return = EXIT_SUCCESS;
123  try 
124    {
125      morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Parameters * param = new morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Parameters
126        (_nb_context            ,
127         _nb_front_end          ,
128         _nb_rename_unit        ,
129         _size_queue            ,
130         _queue_scheme          ,
131         _nb_bank               ,
132         _size_packet           ,
133         _size_general_data     ,
134         _size_special_data     ,
135         _size_general_register ,
136         _size_special_register ,
137         _size_store_queue_ptr  ,
138         _size_load_queue_ptr   ,
139         _nb_inst_issue         ,
140         _nb_inst_rename        ,
141         _nb_inst_reexecute     ,
142         _nb_rename_unit_select ,
143         _priority              ,
144         _load_balancing        ,
145         _table_routing         ,
146         _table_issue_type      ,
147         true // is_toplevel
148         );
149     
150      msg(_("%s"),param->print(1).c_str());
151     
152      test (name,param);
153    }
154  catch (morpheo::ErrorMorpheo & error)
155    {
156      msg (_("<%s> :\n%s"),name.c_str(), error.what ());
157      _return = EXIT_FAILURE;
158    }
159 
160  try 
161    {
162      if (_return == EXIT_SUCCESS)
163        TEST_OK("Issue_queue : no error");
164      else
165        TEST_KO("Issue_queue : a lot of error");
166    }
167  catch (morpheo::ErrorMorpheo & error)
168    {
169      msg (_("<%s> :\n%s"),name.c_str(), error.what ());
170      _return = EXIT_FAILURE;
171    }
172
173  delete [] _nb_inst_rename;
174
175  for (uint32_t i=0; i<_nb_rename_unit; i++)
176    delete [] _table_routing [i];
177  delete [] _table_routing   ;
178  for (uint32_t i=0; i<_nb_inst_issue; i++)
179    delete [] _table_issue_type [i];
180  delete [] _table_issue_type;
181
182  return (_return);
183}
Note: See TracBrowser for help on using the repository browser.