Ignore:
Timestamp:
May 16, 2009, 4:42:39 PM (15 years ago)
Author:
rosiere
Message:

1) Platforms : add new organization for test
2) Load_Store_Unit : add array to count nb_check in store_queue
3) Issue_queue and Core_Glue : rewrite the issue network
4) Special_Register_Unit : add reset value to register CID
5) Softwares : add multicontext test
6) Softwares : add SPECINT
7) Softwares : add MiBench?
7) Read_queue : inhib access for r0
8) Change Core_Glue (network) - dont yet support priority and load balancing scheme

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/SelfTest/config-min.cfg

    r88 r117  
    11Core_Glue
    221       1       +1      # nb_front_end                                                                                     
    3 1       1       +1      # nb_context                            [0]          [nb_front_end]
    4 1       1       +1      # nb_ooo_engine                                                                                   
    5 1       1       +1      # nb_execute_loop                                                                                 
    6 1       1       +1      # ooo_engine_nb_front_end               [0]          [nb_ooo_engine]
    7 1       1       +1      # ooo_engine_nb_execute_loop            [0]          [nb_ooo_engine]
    8 1       1       +1      # execute_loop_nb_ooo_engine            [0]          [nb_execute_loop]
    9 1       1       +1      # nb_inst_decod                         [0]          [nb_front_end]   
    10 1       1       +1      # front_end_nb_inst_branch_complete     [0]          [nb_front_end]   
    11 1       1       +1      # ooo_engine_nb_inst_branch_complete    [0]          [nb_ooo_engine]
    12 1       1       +1      # nb_inst_insert                        [0]          [nb_ooo_engine] 
    13 1       1       +1      # nb_inst_issue                         [0]          [nb_ooo_engine] 
    14 1       1       +1      # nb_inst_execute                       [0][0]       [nb_ooo_engine][ooo_engine_nb_execute_loop]
    15 1       1       +1      # nb_read_unit                          [0]          [nb_execute_loop]
    16 1       1       +1      # nb_write_unit                         [0]          [nb_execute_loop]
     31       1       +1      # nb_context                            [0]                  [nb_front_end]
     41       1       +1      # nb_ooo_engine                                                                                           
     51       1       +1      # nb_execute_loop                                                                                         
     61       1       +1      # ooo_engine_nb_front_end               [0]                  [nb_ooo_engine]
     71       1       +1      # ooo_engine_nb_execute_loop            [0]                  [nb_ooo_engine]
     81       1       +1      # execute_loop_nb_ooo_engine            [0]                  [nb_execute_loop]
     91       1       +1      # nb_inst_decod                         [0]                  [nb_front_end]   
     101       1       +1      # front_end_nb_inst_branch_complete     [0]                  [nb_front_end]   
     111       1       +1      # ooo_engine_nb_inst_branch_complete    [0]                  [nb_ooo_engine]
     121       1       +1      # nb_inst_insert                        [0]                  [nb_ooo_engine] 
     131       1       +1      # nb_inst_issue                         [0]                  [nb_ooo_engine] 
     141       1       +1      # nb_inst_execute                       [0][0]               [nb_ooo_engine][ooo_engine_nb_execute_loop]
     151       1       +1      # nb_read_unit                          [0]                  [nb_execute_loop]
     161       1       +1      # nb_write_unit                         [0]                  [nb_execute_loop]
    17171       1       +1      # size_depth                                                                                       
    18181       1       +1      # size_rob_ptr                                                                                     
     
    25251       1       +1      # dispatch_priority                                                                               
    26261       1       +1      # dispatch_load_balancing                                                                         
    27 1       1       +1      # table_dispatch                        [0][0][0][0] [nb_ooo_engine][nb_inst_issue][execute_loop][nb_read_unit]
    28 0       0       +1      # translate_ooo_engine_num_front_end    [0][0]       [nb_ooo_engine][ooo_engine_nb_front_end]
    29 0       0       +1      # translate_ooo_engine_num_execute_loop [0][0]       [nb_ooo_engine][ooo_engine_nb_execute_loop]
    30 0       0       +1      # translate_execute_loop_num_ooo_engine [0][0]       [nb_execute_loop][execute_loop_nb_ooo_engine]
     271       1       +1      # table_dispatch                        [0][0][0][0]         [nb_ooo_engine][nb_inst_issue][execute_loop][nb_read_unit]
     280       0       +1      # translate_ooo_engine_num_front_end    [0][0]               [nb_ooo_engine][ooo_engine_nb_front_end]
     290       0       +1      # translate_ooo_engine_num_execute_loop [0][0]               [nb_ooo_engine][ooo_engine_nb_execute_loop]
     300       0       +1      # translate_execute_loop_num_ooo_engine [0][0]               [nb_execute_loop][execute_loop_nb_ooo_engine]
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/SelfTest/src/main.cpp

    r88 r117  
    2525  err (_(" * ooo_engine_nb_inst_branch_complete    [nb_ooo_engine]                                            (uint32_t         )\n"));
    2626  err (_(" * nb_inst_insert                        [nb_ooo_engine]                                            (uint32_t         )\n"));
    27   err (_(" * nb_inst_issue                         [nb_ooo_engine]                                            (uint32_t         )\n"));
     27//err (_(" * nb_inst_issue_queue                   [nb_ooo_engine]                                            (uint32_t         )\n"));
     28  err (_(" * nb_inst_issue_slot                    [nb_ooo_engine]                                            (uint32_t         )\n"));
    2829  err (_(" * nb_inst_execute                       [nb_ooo_engine][ooo_engine_nb_execute_loop]                (uint32_t         )\n"));
    2930  err (_(" * nb_read_unit                          [nb_execute_loop]                                          (uint32_t         )\n"));
     
    4041  err (_(" * dispatch_load_balancing                                                                          (Tload_balancing_t)\n"));
    4142  err (_(" * table_dispatch                        [nb_ooo_engine][nb_inst_issue][execute_loop][nb_read_unit] (bool             )\n"));
     43//   err (_(" * table_issue_type                      [execute_loop][nb_read_unit][MAX_TYPE]                      (bool             )\n"));
     44//   err (_("   * TYPE_ALU    \n"));
     45//   err (_("   * TYPE_SHIFT  \n"));
     46//   err (_("   * TYPE_MOVE   \n"));
     47//   err (_("   * TYPE_TEST   \n"));
     48//   err (_("   * TYPE_MUL    \n"));
     49//   err (_("   * TYPE_DIV    \n"));
     50//   err (_("   * TYPE_EXTEND \n"));
     51//   err (_("   * TYPE_FIND   \n"));
     52//   err (_("   * TYPE_SPECIAL\n"));
     53//   err (_("   * TYPE_CUSTOM \n"));
     54//   err (_("   * TYPE_BRANCH \n"));
     55//   err (_("   * TYPE_MEMORY \n"));
    4256  err (_(" * translate_ooo_engine_num_front_end    [nb_ooo_engine][ooo_engine_nb_front_end]                   (uint32_t         )\n"));
    4357  err (_(" * translate_ooo_engine_num_execute_loop [nb_ooo_engine][ooo_engine_nb_execute_loop]                (uint32_t         )\n"));
     
    7286  uint32_t              * ooo_engine_nb_inst_branch_complete   ;//[nb_ooo_engine]
    7387  uint32_t              * nb_inst_insert                       ;//[nb_ooo_engine]
    74   uint32_t              * nb_inst_issue                        ;//[nb_ooo_engine]
     88  uint32_t              * nb_inst_issue_slot                   ;//[nb_ooo_engine]
    7589  uint32_t             ** nb_inst_execute                      ;//[nb_ooo_engine][ooo_engine_nb_execute_loop]
    7690  uint32_t              * nb_read_unit                         ;//[nb_execute_loop]
     
    86100  Tpriority_t             dispatch_priority                    ;
    87101  Tload_balancing_t       dispatch_load_balancing              ;
    88   bool               **** table_dispatch                       ;//[nb_ooo_engine][nb_inst_issue][execute_loop][nb_read_unit]
     102  bool               **** table_dispatch                       ;//[nb_ooo_engine][nb_inst_issue_slot][execute_loop][nb_read_unit]
     103  bool                *** table_issue_type                     ;//                                   [execute_loop][nb_read_unit][MAX_TYPE]
    89104  uint32_t             ** translate_ooo_engine_num_front_end   ;//[nb_ooo_engine][ooo_engine_nb_front_end]
    90105  uint32_t             ** translate_ooo_engine_num_execute_loop;//[nb_ooo_engine][ooo_engine_nb_execute_loop]
     
    119134  SELFTEST1(ooo_engine_nb_inst_branch_complete   ,uint32_t         ,argv,x,nb_ooo_engine);
    120135  SELFTEST1(nb_inst_insert                       ,uint32_t         ,argv,x,nb_ooo_engine);
    121   SELFTEST1(nb_inst_issue                        ,uint32_t         ,argv,x,nb_ooo_engine);
     136  SELFTEST1(nb_inst_issue_slot                   ,uint32_t         ,argv,x,nb_ooo_engine);
    122137
    123138  uint32_t sum_ooo_engine_nb_front_end    = 0;
     
    129144      sum_ooo_engine_nb_front_end    += ooo_engine_nb_front_end    [i];
    130145      sum_ooo_engine_nb_execute_loop += ooo_engine_nb_execute_loop [i];
    131       sum_nb_inst_issue              += nb_inst_issue              [i];
     146      sum_nb_inst_issue              += nb_inst_issue_slot         [i];
    132147    }
    133148
     
    177192  SELFTEST0(dispatch_load_balancing              ,Tload_balancing_t,argv,x);
    178193
    179   SELFTEST4(table_dispatch                       ,bool             ,argv,x,nb_ooo_engine,nb_inst_issue[it1],nb_execute_loop,nb_read_unit[it3]);
     194  SELFTEST4(table_dispatch                       ,bool             ,argv,x,nb_ooo_engine,nb_inst_issue_slot[it1],nb_execute_loop,nb_read_unit[it3]);
     195
     196  ALLOC3   (table_issue_type                     ,bool                                                     ,nb_execute_loop,nb_read_unit[it1],MAX_TYPE);
     197
     198  for (uint32_t i=0; i<nb_execute_loop; ++i)
     199    for (uint32_t j=0; j<nb_read_unit[i]; ++j)
     200      for (uint32_t k=0; k<MAX_TYPE; ++k)
     201//         table_issue_type [i][j][k] = false;
     202        table_issue_type [i][j][k] = true;
     203
     204//   for (uint32_t i=0; i<nb_execute_loop; ++i)
     205//     for (uint32_t j=0; j<nb_read_unit[i]; ++j)
     206//       {
     207//         table_issue_type [i][j][TYPE_ALU    ] = fromString<bool>(argv[x++]);
     208//         table_issue_type [i][j][TYPE_SHIFT  ] = fromString<bool>(argv[x++]);
     209//         table_issue_type [i][j][TYPE_MOVE   ] = fromString<bool>(argv[x++]);
     210//         table_issue_type [i][j][TYPE_TEST   ] = fromString<bool>(argv[x++]);
     211//         table_issue_type [i][j][TYPE_MUL    ] = fromString<bool>(argv[x++]);
     212//         table_issue_type [i][j][TYPE_DIV    ] = fromString<bool>(argv[x++]);
     213//         table_issue_type [i][j][TYPE_EXTEND ] = fromString<bool>(argv[x++]);
     214//         table_issue_type [i][j][TYPE_FIND   ] = fromString<bool>(argv[x++]);
     215//         table_issue_type [i][j][TYPE_SPECIAL] = fromString<bool>(argv[x++]);
     216//         table_issue_type [i][j][TYPE_CUSTOM ] = fromString<bool>(argv[x++]);
     217//         table_issue_type [i][j][TYPE_BRANCH ] = fromString<bool>(argv[x++]);
     218//         table_issue_type [i][j][TYPE_MEMORY ] = fromString<bool>(argv[x++]);
     219//       }
     220
    180221  SELFTEST2(translate_ooo_engine_num_front_end   ,uint32_t         ,argv,x,nb_ooo_engine,ooo_engine_nb_front_end[it1]);
    181222  SELFTEST2(translate_ooo_engine_num_execute_loop,uint32_t         ,argv,x,nb_ooo_engine,ooo_engine_nb_execute_loop[it1]);
     
    198239         ooo_engine_nb_inst_branch_complete   ,//[nb_ooo_engine]
    199240         nb_inst_insert                       ,//[nb_ooo_engine]
    200          nb_inst_issue                        ,//[nb_ooo_engine]
     241         nb_inst_issue_slot                   ,//[nb_ooo_engine]
     242         nb_inst_issue_slot                   ,//[nb_ooo_engine]
    201243         nb_inst_execute                      ,//[nb_ooo_engine][ooo_engine_nb_execute_loop]
    202244         nb_read_unit                         ,//[nb_execute_loop]
     
    212254         dispatch_priority                    ,
    213255         dispatch_load_balancing              ,
    214          table_dispatch                       ,//[nb_ooo_engine][nb_inst_issue][execute_loop][nb_read_unit]
     256         table_dispatch                       ,//[nb_ooo_engine][nb_inst_issue_slot][execute_loop][nb_read_unit]
     257         table_issue_type                     ,//                                   [execute_loop][nb_read_unit][MAX_TYPE]
    215258         translate_ooo_engine_num_front_end   ,//[nb_ooo_engine][ooo_engine_nb_front_end]
    216259         translate_ooo_engine_num_execute_loop,//[nb_ooo_engine][ooo_engine_nb_execute_loop]
     
    245288  DELETE2(translate_ooo_engine_num_execute_loop,nb_ooo_engine,ooo_engine_nb_execute_loop[it1]);
    246289  DELETE2(translate_ooo_engine_num_front_end   ,nb_ooo_engine,ooo_engine_nb_front_end[it1]);
    247   DELETE4(table_dispatch                       ,nb_ooo_engine,nb_inst_issue[it1],nb_execute_loop,nb_read_unit[it2]);
     290  DELETE3(table_issue_type                                                           ,nb_execute_loop,nb_read_unit[it1],MAX_TYPE);
     291  DELETE4(table_dispatch                       ,nb_ooo_engine,nb_inst_issue_slot[it1],nb_execute_loop,nb_read_unit[it2]);
    248292  DELETE1(nb_write_unit                        ,nb_execute_loop);
    249293  DELETE1(nb_read_unit                         ,nb_execute_loop);
    250294  DELETE2(nb_inst_execute                      ,nb_ooo_engine,ooo_engine_nb_execute_loop[it1]);
    251   DELETE1(nb_inst_issue                        ,nb_ooo_engine);
     295  DELETE1(nb_inst_issue_slot                   ,nb_ooo_engine);
    252296  DELETE1(ooo_engine_nb_inst_branch_complete   ,nb_ooo_engine);
    253297  DELETE1(front_end_nb_inst_branch_complete    ,nb_front_end);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/SelfTest/src/test.cpp

    r105 r117  
    4848  sc_clock              *  in_CLOCK  = new sc_clock ("clock", 1.0, 0.5);         
    4949  sc_signal<Tcontrol_t> *  in_NRESET = new sc_signal<Tcontrol_t> ("NRESET");
     50
     51  sc_signal<Tcontext_t        >  *** out_RENAME_FRONT_END_ID                       ;
     52  sc_signal<Tcontrol_t        >  *** out_BRANCH_COMPLETE_FRONT_END_VAL             ;
     53  sc_signal<Tcontrol_t        >  ***  in_BRANCH_COMPLETE_FRONT_END_ACK             ;
     54  sc_signal<Tcontext_t        >  *** out_BRANCH_COMPLETE_FRONT_END_CONTEXT_ID      ;
     55  sc_signal<Tdepth_t          >  *** out_BRANCH_COMPLETE_FRONT_END_DEPTH           ;
     56  sc_signal<Taddress_t        >  *** out_BRANCH_COMPLETE_FRONT_END_ADDRESS         ;
     57  sc_signal<Tcontrol_t        >  *** out_BRANCH_COMPLETE_FRONT_END_NO_SEQUENCE     ;
     58  sc_signal<Tcontrol_t        >  ***  in_BRANCH_COMPLETE_FRONT_END_MISS_PREDICTION ;
     59  sc_signal<Tcontrol_t        >  ***  in_BRANCH_COMPLETE_OOO_ENGINE_VAL            ;
     60  sc_signal<Tcontrol_t        >  *** out_BRANCH_COMPLETE_OOO_ENGINE_ACK            ;
     61  sc_signal<Tcontext_t        >  ***  in_BRANCH_COMPLETE_OOO_ENGINE_FRONT_END_ID   ;
     62  sc_signal<Tcontext_t        >  ***  in_BRANCH_COMPLETE_OOO_ENGINE_CONTEXT_ID     ;
     63  sc_signal<Tdepth_t          >  ***  in_BRANCH_COMPLETE_OOO_ENGINE_DEPTH          ;
     64  sc_signal<Taddress_t        >  ***  in_BRANCH_COMPLETE_OOO_ENGINE_ADDRESS        ;
     65  sc_signal<Tcontrol_t        >  ***  in_BRANCH_COMPLETE_OOO_ENGINE_NO_SEQUENCE    ;
     66  sc_signal<Tcontrol_t        >  *** out_BRANCH_COMPLETE_OOO_ENGINE_MISS_PREDICTION;
     67  sc_signal<Tcontrol_t        >   ** out_COMMIT_EVENT_FRONT_END_VAL                ;
     68  sc_signal<Tcontrol_t        >   **  in_COMMIT_EVENT_FRONT_END_ACK                ;
     69  sc_signal<Tcontext_t        >   ** out_COMMIT_EVENT_FRONT_END_CONTEXT_ID         ;
     70  sc_signal<Tdepth_t          >   ** out_COMMIT_EVENT_FRONT_END_DEPTH              ;
     71  sc_signal<Tevent_type_t     >   ** out_COMMIT_EVENT_FRONT_END_TYPE               ;
     72  sc_signal<Tcontrol_t        >   ** out_COMMIT_EVENT_FRONT_END_IS_DELAY_SLOT      ;
     73  sc_signal<Taddress_t        >   ** out_COMMIT_EVENT_FRONT_END_ADDRESS            ;
     74  sc_signal<Tcontrol_t        >   ** out_COMMIT_EVENT_FRONT_END_ADDRESS_EPCR_VAL   ;
     75  sc_signal<Taddress_t        >   ** out_COMMIT_EVENT_FRONT_END_ADDRESS_EPCR       ;
     76  sc_signal<Tcontrol_t        >   ** out_COMMIT_EVENT_FRONT_END_ADDRESS_EEAR_VAL   ;
     77  sc_signal<Tgeneral_data_t   >   ** out_COMMIT_EVENT_FRONT_END_ADDRESS_EEAR       ;
     78  sc_signal<Tcontrol_t        >   **  in_COMMIT_EVENT_OOO_ENGINE_VAL               ;
     79  sc_signal<Tcontrol_t        >   ** out_COMMIT_EVENT_OOO_ENGINE_ACK               ;
     80  sc_signal<Tcontext_t        >   **  in_COMMIT_EVENT_OOO_ENGINE_FRONT_END_ID      ;
     81  sc_signal<Tcontext_t        >   **  in_COMMIT_EVENT_OOO_ENGINE_CONTEXT_ID        ;
     82  sc_signal<Tdepth_t          >   **  in_COMMIT_EVENT_OOO_ENGINE_DEPTH             ;
     83  sc_signal<Tevent_type_t     >   **  in_COMMIT_EVENT_OOO_ENGINE_TYPE              ;
     84  sc_signal<Tcontrol_t        >   **  in_COMMIT_EVENT_OOO_ENGINE_IS_DELAY_SLOT     ;
     85  sc_signal<Taddress_t        >   **  in_COMMIT_EVENT_OOO_ENGINE_ADDRESS           ;
     86  sc_signal<Tcontrol_t        >   **  in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EPCR_VAL  ;
     87  sc_signal<Taddress_t        >   **  in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EPCR      ;
     88  sc_signal<Tcontrol_t        >   **  in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR_VAL  ;
     89  sc_signal<Tgeneral_data_t   >   **  in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR      ;
     90  sc_signal<Tcontrol_t        >  ***  in_ISSUE_OOO_ENGINE_VAL                      ;
     91  sc_signal<Tcontrol_t        >  *** out_ISSUE_OOO_ENGINE_ACK                      ;
     92  sc_signal<Tcontext_t        >  ***  in_ISSUE_OOO_ENGINE_FRONT_END_ID             ;
     93  sc_signal<Tcontext_t        >  ***  in_ISSUE_OOO_ENGINE_CONTEXT_ID               ;
     94  sc_signal<Tpacket_t         >  ***  in_ISSUE_OOO_ENGINE_PACKET_ID                ;
     95  sc_signal<Ttype_t           >  ***  in_ISSUE_OOO_ENGINE_TYPE                     ;
     96  sc_signal<Toperation_t      >  ***  in_ISSUE_OOO_ENGINE_OPERATION                ;
     97  sc_signal<Tlsq_ptr_t        >  ***  in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE    ;
     98  sc_signal<Tlsq_ptr_t        >  ***  in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE     ;
     99  sc_signal<Tcontrol_t        >  ***  in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT             ;
     100  sc_signal<Tgeneral_data_t   >  ***  in_ISSUE_OOO_ENGINE_IMMEDIAT                 ;
     101  sc_signal<Tcontrol_t        >  ***  in_ISSUE_OOO_ENGINE_READ_RA                  ;
     102  sc_signal<Tgeneral_address_t>  ***  in_ISSUE_OOO_ENGINE_NUM_REG_RA               ;
     103  sc_signal<Tcontrol_t        >  ***  in_ISSUE_OOO_ENGINE_READ_RB                  ;
     104  sc_signal<Tgeneral_address_t>  ***  in_ISSUE_OOO_ENGINE_NUM_REG_RB               ;
     105  sc_signal<Tcontrol_t        >  ***  in_ISSUE_OOO_ENGINE_READ_RC                  ;
     106  sc_signal<Tspecial_address_t>  ***  in_ISSUE_OOO_ENGINE_NUM_REG_RC               ;
     107  sc_signal<Tcontrol_t        >  ***  in_ISSUE_OOO_ENGINE_WRITE_RD                 ;
     108  sc_signal<Tgeneral_address_t>  ***  in_ISSUE_OOO_ENGINE_NUM_REG_RD               ;
     109  sc_signal<Tcontrol_t        >  ***  in_ISSUE_OOO_ENGINE_WRITE_RE                 ;
     110  sc_signal<Tspecial_address_t>  ***  in_ISSUE_OOO_ENGINE_NUM_REG_RE               ;
     111  sc_signal<Tcontrol_t        >  *** out_ISSUE_EXECUTE_LOOP_VAL                    ;
     112  sc_signal<Tcontrol_t        >  ***  in_ISSUE_EXECUTE_LOOP_ACK                    ;
     113  sc_signal<Tcontext_t        >  *** out_ISSUE_EXECUTE_LOOP_CONTEXT_ID             ;
     114  sc_signal<Tcontext_t        >  *** out_ISSUE_EXECUTE_LOOP_FRONT_END_ID           ;
     115  sc_signal<Tcontext_t        >  *** out_ISSUE_EXECUTE_LOOP_OOO_ENGINE_ID          ;
     116  sc_signal<Tpacket_t         >  *** out_ISSUE_EXECUTE_LOOP_PACKET_ID              ;
     117  sc_signal<Toperation_t      >  *** out_ISSUE_EXECUTE_LOOP_OPERATION              ;
     118  sc_signal<Ttype_t           >  *** out_ISSUE_EXECUTE_LOOP_TYPE                   ;
     119  sc_signal<Tlsq_ptr_t        >  *** out_ISSUE_EXECUTE_LOOP_STORE_QUEUE_PTR_WRITE  ;
     120  sc_signal<Tlsq_ptr_t        >  *** out_ISSUE_EXECUTE_LOOP_LOAD_QUEUE_PTR_WRITE   ;
     121  sc_signal<Tcontrol_t        >  *** out_ISSUE_EXECUTE_LOOP_HAS_IMMEDIAT           ;
     122  sc_signal<Tgeneral_data_t   >  *** out_ISSUE_EXECUTE_LOOP_IMMEDIAT               ;
     123  sc_signal<Tcontrol_t        >  *** out_ISSUE_EXECUTE_LOOP_READ_RA                ;
     124  sc_signal<Tgeneral_address_t>  *** out_ISSUE_EXECUTE_LOOP_NUM_REG_RA             ;
     125  sc_signal<Tcontrol_t        >  *** out_ISSUE_EXECUTE_LOOP_READ_RB                ;
     126  sc_signal<Tgeneral_address_t>  *** out_ISSUE_EXECUTE_LOOP_NUM_REG_RB             ;
     127  sc_signal<Tcontrol_t        >  *** out_ISSUE_EXECUTE_LOOP_READ_RC                ;
     128  sc_signal<Tspecial_address_t>  *** out_ISSUE_EXECUTE_LOOP_NUM_REG_RC             ;
     129  sc_signal<Tcontrol_t        >  *** out_ISSUE_EXECUTE_LOOP_WRITE_RD               ;
     130  sc_signal<Tgeneral_address_t>  *** out_ISSUE_EXECUTE_LOOP_NUM_REG_RD             ;
     131  sc_signal<Tcontrol_t        >  *** out_ISSUE_EXECUTE_LOOP_WRITE_RE               ;
     132  sc_signal<Tspecial_address_t>  *** out_ISSUE_EXECUTE_LOOP_NUM_REG_RE             ;
     133  sc_signal<Tcontrol_t        > **** out_EXECUTE_OOO_ENGINE_VAL                    ;
     134  sc_signal<Tcontrol_t        > ****  in_EXECUTE_OOO_ENGINE_ACK                    ;
     135  sc_signal<Tcontext_t        > **** out_EXECUTE_OOO_ENGINE_FRONT_END_ID           ;
     136  sc_signal<Tcontext_t        > **** out_EXECUTE_OOO_ENGINE_CONTEXT_ID             ;
     137  sc_signal<Tpacket_t         > **** out_EXECUTE_OOO_ENGINE_PACKET_ID              ;
     138//sc_signal<Ttype_t           > **** out_EXECUTE_OOO_ENGINE_TYPE                   ;
     139//sc_signal<Toperation_t      > **** out_EXECUTE_OOO_ENGINE_OPERATION              ;
     140  sc_signal<Tspecial_data_t   > **** out_EXECUTE_OOO_ENGINE_FLAGS                  ;
     141  sc_signal<Texception_t      > **** out_EXECUTE_OOO_ENGINE_EXCEPTION              ;
     142  sc_signal<Tcontrol_t        > **** out_EXECUTE_OOO_ENGINE_NO_SEQUENCE            ;
     143  sc_signal<Taddress_t        > **** out_EXECUTE_OOO_ENGINE_ADDRESS                ;
     144  sc_signal<Tgeneral_data_t   > **** out_EXECUTE_OOO_ENGINE_DATA                   ;
     145  sc_signal<Tcontrol_t        >  ***  in_EXECUTE_EXECUTE_LOOP_VAL                  ;
     146  sc_signal<Tcontrol_t        >  *** out_EXECUTE_EXECUTE_LOOP_ACK                  ;
     147  sc_signal<Tcontext_t        >  ***  in_EXECUTE_EXECUTE_LOOP_CONTEXT_ID           ;
     148  sc_signal<Tcontext_t        >  ***  in_EXECUTE_EXECUTE_LOOP_FRONT_END_ID         ;
     149  sc_signal<Tcontext_t        >  ***  in_EXECUTE_EXECUTE_LOOP_OOO_ENGINE_ID        ;
     150  sc_signal<Tpacket_t         >  ***  in_EXECUTE_EXECUTE_LOOP_PACKET_ID            ;
     151//sc_signal<Toperation_t      >  ***  in_EXECUTE_EXECUTE_LOOP_OPERATION            ;
     152//sc_signal<Ttype_t           >  ***  in_EXECUTE_EXECUTE_LOOP_TYPE                 ;
     153  sc_signal<Tspecial_data_t   >  ***  in_EXECUTE_EXECUTE_LOOP_FLAGS                ;
     154  sc_signal<Texception_t      >  ***  in_EXECUTE_EXECUTE_LOOP_EXCEPTION            ;
     155  sc_signal<Tcontrol_t        >  ***  in_EXECUTE_EXECUTE_LOOP_NO_SEQUENCE          ;
     156  sc_signal<Taddress_t        >  ***  in_EXECUTE_EXECUTE_LOOP_ADDRESS              ;
     157  sc_signal<Tgeneral_data_t   >  ***  in_EXECUTE_EXECUTE_LOOP_DATA                 ;
     158  sc_signal<Tcontrol_t        >  ***  in_INSERT_OOO_ENGINE_VAL                     ;
     159  sc_signal<Tcontrol_t        >  *** out_INSERT_OOO_ENGINE_ACK                     ;
     160  sc_signal<Tcontrol_t        >  ***  in_INSERT_OOO_ENGINE_RD_USE                  ;
     161  sc_signal<Tgeneral_address_t>  ***  in_INSERT_OOO_ENGINE_RD_NUM_REG              ;
     162  sc_signal<Tcontrol_t        >  ***  in_INSERT_OOO_ENGINE_RE_USE                  ;
     163  sc_signal<Tspecial_address_t>  ***  in_INSERT_OOO_ENGINE_RE_NUM_REG              ;
     164  sc_signal<Tcontrol_t        > **** out_INSERT_EXECUTE_LOOP_VAL                   ;
     165  sc_signal<Tcontrol_t        > ****  in_INSERT_EXECUTE_LOOP_ACK                   ;
     166  sc_signal<Tcontrol_t        > **** out_INSERT_EXECUTE_LOOP_RD_USE                ;
     167  sc_signal<Tgeneral_address_t> **** out_INSERT_EXECUTE_LOOP_RD_NUM_REG            ;
     168  sc_signal<Tcontrol_t        > **** out_INSERT_EXECUTE_LOOP_RE_USE                ;
     169  sc_signal<Tspecial_address_t> **** out_INSERT_EXECUTE_LOOP_RE_NUM_REG            ;
    50170
    51171  ALLOC2_SC_SIGNAL(out_RENAME_FRONT_END_ID                       ,"out_RENAME_FRONT_END_ID                       ",Tcontext_t        ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
     
    88208  ALLOC1_SC_SIGNAL( in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR_VAL  ," in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR_VAL  ",Tcontrol_t        ,_param->_nb_ooo_engine);
    89209  ALLOC1_SC_SIGNAL( in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR      ," in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR      ",Tgeneral_data_t   ,_param->_nb_ooo_engine);
    90   ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_VAL                      ," in_ISSUE_OOO_ENGINE_VAL                      ",Tcontrol_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    91   ALLOC2_SC_SIGNAL(out_ISSUE_OOO_ENGINE_ACK                      ,"out_ISSUE_OOO_ENGINE_ACK                      ",Tcontrol_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    92   ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_FRONT_END_ID             ," in_ISSUE_OOO_ENGINE_FRONT_END_ID             ",Tcontext_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    93   ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_CONTEXT_ID               ," in_ISSUE_OOO_ENGINE_CONTEXT_ID               ",Tcontext_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    94   ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_PACKET_ID                ," in_ISSUE_OOO_ENGINE_PACKET_ID                ",Tpacket_t         ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    95   ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_TYPE                     ," in_ISSUE_OOO_ENGINE_TYPE                     ",Ttype_t           ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    96   ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_OPERATION                ," in_ISSUE_OOO_ENGINE_OPERATION                ",Toperation_t      ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    97   ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE    ," in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE    ",Tlsq_ptr_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    98   ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE     ," in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE     ",Tlsq_ptr_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    99   ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT             ," in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT             ",Tcontrol_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    100   ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_IMMEDIAT                 ," in_ISSUE_OOO_ENGINE_IMMEDIAT                 ",Tgeneral_data_t   ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    101   ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RA                  ," in_ISSUE_OOO_ENGINE_READ_RA                  ",Tcontrol_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    102   ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RA               ," in_ISSUE_OOO_ENGINE_NUM_REG_RA               ",Tgeneral_address_t,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    103   ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RB                  ," in_ISSUE_OOO_ENGINE_READ_RB                  ",Tcontrol_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    104   ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RB               ," in_ISSUE_OOO_ENGINE_NUM_REG_RB               ",Tgeneral_address_t,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    105   ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RC                  ," in_ISSUE_OOO_ENGINE_READ_RC                  ",Tcontrol_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    106   ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RC               ," in_ISSUE_OOO_ENGINE_NUM_REG_RC               ",Tspecial_address_t,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    107   ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RD                 ," in_ISSUE_OOO_ENGINE_WRITE_RD                 ",Tcontrol_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    108   ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RD               ," in_ISSUE_OOO_ENGINE_NUM_REG_RD               ",Tgeneral_address_t,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    109   ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RE                 ," in_ISSUE_OOO_ENGINE_WRITE_RE                 ",Tcontrol_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    110   ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RE               ," in_ISSUE_OOO_ENGINE_NUM_REG_RE               ",Tspecial_address_t,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
     210  ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_VAL                      ," in_ISSUE_OOO_ENGINE_VAL                      ",Tcontrol_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     211  ALLOC2_SC_SIGNAL(out_ISSUE_OOO_ENGINE_ACK                      ,"out_ISSUE_OOO_ENGINE_ACK                      ",Tcontrol_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     212  ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_FRONT_END_ID             ," in_ISSUE_OOO_ENGINE_FRONT_END_ID             ",Tcontext_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     213  ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_CONTEXT_ID               ," in_ISSUE_OOO_ENGINE_CONTEXT_ID               ",Tcontext_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     214  ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_PACKET_ID                ," in_ISSUE_OOO_ENGINE_PACKET_ID                ",Tpacket_t         ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     215  ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_TYPE                     ," in_ISSUE_OOO_ENGINE_TYPE                     ",Ttype_t           ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     216  ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_OPERATION                ," in_ISSUE_OOO_ENGINE_OPERATION                ",Toperation_t      ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     217  ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE    ," in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE    ",Tlsq_ptr_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     218  ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE     ," in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE     ",Tlsq_ptr_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     219  ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT             ," in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT             ",Tcontrol_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     220  ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_IMMEDIAT                 ," in_ISSUE_OOO_ENGINE_IMMEDIAT                 ",Tgeneral_data_t   ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     221  ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RA                  ," in_ISSUE_OOO_ENGINE_READ_RA                  ",Tcontrol_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     222  ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RA               ," in_ISSUE_OOO_ENGINE_NUM_REG_RA               ",Tgeneral_address_t,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     223  ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RB                  ," in_ISSUE_OOO_ENGINE_READ_RB                  ",Tcontrol_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     224  ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RB               ," in_ISSUE_OOO_ENGINE_NUM_REG_RB               ",Tgeneral_address_t,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     225  ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RC                  ," in_ISSUE_OOO_ENGINE_READ_RC                  ",Tcontrol_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     226  ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RC               ," in_ISSUE_OOO_ENGINE_NUM_REG_RC               ",Tspecial_address_t,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     227  ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RD                 ," in_ISSUE_OOO_ENGINE_WRITE_RD                 ",Tcontrol_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     228  ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RD               ," in_ISSUE_OOO_ENGINE_NUM_REG_RD               ",Tgeneral_address_t,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     229  ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RE                 ," in_ISSUE_OOO_ENGINE_WRITE_RE                 ",Tcontrol_t        ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     230  ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RE               ," in_ISSUE_OOO_ENGINE_NUM_REG_RE               ",Tspecial_address_t,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
    111231  ALLOC2_SC_SIGNAL(out_ISSUE_EXECUTE_LOOP_VAL                    ,"out_ISSUE_EXECUTE_LOOP_VAL                    ",Tcontrol_t        ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
    112232  ALLOC2_SC_SIGNAL( in_ISSUE_EXECUTE_LOOP_ACK                    ," in_ISSUE_EXECUTE_LOOP_ACK                    ",Tcontrol_t        ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
     
    168288  ALLOC3_SC_SIGNAL(out_INSERT_EXECUTE_LOOP_RE_USE                ,"out_INSERT_EXECUTE_LOOP_RE_USE                ",Tcontrol_t          ,_param->_nb_execute_loop,_param->_execute_loop_nb_ooo_engine[it1],_param->_execute_loop_nb_inst_insert[it1][it2]);
    169289  ALLOC3_SC_SIGNAL(out_INSERT_EXECUTE_LOOP_RE_NUM_REG            ,"out_INSERT_EXECUTE_LOOP_RE_NUM_REG            ",Tspecial_address_t  ,_param->_nb_execute_loop,_param->_execute_loop_nb_ooo_engine[it1],_param->_execute_loop_nb_inst_insert[it1][it2]);
    170 
    171290 
    172291  /********************************************************
     
    229348  INSTANCE1_SC_SIGNAL(_Core_Glue, in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR_VAL  ,_param->_nb_ooo_engine);
    230349  INSTANCE1_SC_SIGNAL(_Core_Glue, in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR      ,_param->_nb_ooo_engine);
    231   INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_VAL                      ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    232   INSTANCE2_SC_SIGNAL(_Core_Glue,out_ISSUE_OOO_ENGINE_ACK                      ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
     350  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_VAL                      ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     351  INSTANCE2_SC_SIGNAL(_Core_Glue,out_ISSUE_OOO_ENGINE_ACK                      ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
    233352  if (_param->_have_port_front_end_id)
    234   INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_FRONT_END_ID             ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
     353  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_FRONT_END_ID             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
    235354  if (_param->_have_port_context_id)
    236   INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_CONTEXT_ID               ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
     355  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_CONTEXT_ID               ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
    237356  if (_param->_have_port_rob_ptr)
    238   INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_PACKET_ID                ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    239   INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_TYPE                     ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    240   INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_OPERATION                ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    241   INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE    ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
     357  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_PACKET_ID                ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     358  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_TYPE                     ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     359  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_OPERATION                ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     360  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE    ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
    242361  if (_param->_have_port_load_queue_ptr)
    243   INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE     ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    244   INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT             ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    245   INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_IMMEDIAT                 ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    246   INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_READ_RA                  ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    247   INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_NUM_REG_RA               ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    248   INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_READ_RB                  ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    249   INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_NUM_REG_RB               ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    250   INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_READ_RC                  ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    251   INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_NUM_REG_RC               ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    252   INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_WRITE_RD                 ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    253   INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_NUM_REG_RD               ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    254   INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_WRITE_RE                 ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    255   INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_NUM_REG_RE               ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
     362  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE     ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     363  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     364  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_IMMEDIAT                 ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     365  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_READ_RA                  ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     366  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_NUM_REG_RA               ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     367  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_READ_RB                  ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     368  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_NUM_REG_RB               ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     369  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_READ_RC                  ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     370  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_NUM_REG_RC               ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     371  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_WRITE_RD                 ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     372  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_NUM_REG_RD               ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     373  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_WRITE_RE                 ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     374  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_NUM_REG_RE               ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
    256375  INSTANCE2_SC_SIGNAL(_Core_Glue,out_ISSUE_EXECUTE_LOOP_VAL                    ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
    257376  INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_EXECUTE_LOOP_ACK                    ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
     
    476595
    477596      for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
    478         for (uint32_t j=0; j<_param->_nb_inst_issue[i]; ++j)
     597        for (uint32_t j=0; j<_param->_nb_inst_issue_queue[i]; ++j)
    479598          {
    480599            Tcontext_t front_end_id   = rand() % _param->_ooo_engine_nb_front_end [i];
     
    714833  DELETE1_SC_SIGNAL( in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR_VAL  ,_param->_nb_ooo_engine);
    715834  DELETE1_SC_SIGNAL( in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR      ,_param->_nb_ooo_engine);
    716   DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_VAL                      ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    717   DELETE2_SC_SIGNAL(out_ISSUE_OOO_ENGINE_ACK                      ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    718   DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_FRONT_END_ID             ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    719   DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_CONTEXT_ID               ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    720   DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_PACKET_ID                ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    721   DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_TYPE                     ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    722   DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_OPERATION                ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    723   DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE    ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    724   DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE     ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    725   DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT             ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    726   DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_IMMEDIAT                 ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    727   DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RA                  ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    728   DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RA               ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    729   DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RB                  ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    730   DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RB               ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    731   DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RC                  ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    732   DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RC               ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    733   DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RD                 ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    734   DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RD               ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    735   DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RE                 ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    736   DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RE               ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
     835  DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_VAL                      ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     836  DELETE2_SC_SIGNAL(out_ISSUE_OOO_ENGINE_ACK                      ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     837  DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_FRONT_END_ID             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     838  DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_CONTEXT_ID               ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     839  DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_PACKET_ID                ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     840  DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_TYPE                     ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     841  DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_OPERATION                ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     842  DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE    ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     843  DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE     ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     844  DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     845  DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_IMMEDIAT                 ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     846  DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RA                  ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     847  DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RA               ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     848  DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RB                  ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     849  DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RB               ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     850  DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RC                  ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     851  DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RC               ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     852  DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RD                 ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     853  DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RD               ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     854  DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RE                 ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     855  DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RE               ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
    737856  DELETE2_SC_SIGNAL(out_ISSUE_EXECUTE_LOOP_VAL                    ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
    738857  DELETE2_SC_SIGNAL( in_ISSUE_EXECUTE_LOOP_ACK                    ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/include/Core_Glue.h

    r111 r117  
    204204
    205205    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    206   private   : generic::priority::Priority  ** _priority_ooo_engine;                         //[nb_execute_loop]
     206//private   : generic::priority::Priority  ** _priority_ooo_engine;                         //[nb_execute_loop]
     207  private   : generic::priority::Priority   * _priority_ooo_engine;
    207208  private   : generic::priority::Priority  ** _priority_read_unit ;                         //[nb_execute_loop]
    208209
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/include/Parameters.h

    r88 r117  
    1818namespace core_glue {
    1919
    20 
    2120  class Parameters : public morpheo::behavioural::Parameters
    2221  {
     
    3332  public : uint32_t              * _ooo_engine_nb_inst_branch_complete   ;//[nb_ooo_engine]
    3433  public : uint32_t              * _nb_inst_insert                       ;//[nb_ooo_engine]
    35   public : uint32_t              * _nb_inst_issue                        ;//[nb_ooo_engine]
     34  public : uint32_t              * _nb_inst_reexecute                    ;//[nb_ooo_engine]
     35  public : uint32_t              * _nb_inst_issue_queue                  ;//[nb_ooo_engine]
     36  public : uint32_t              * _nb_inst_issue_slot                   ;//[nb_ooo_engine]
    3637  public : uint32_t             ** _nb_inst_execute                      ;//[nb_ooo_engine][ooo_engine_nb_execute_loop]
     38  public : bool                  * _issue_queue_in_order                 ;//[nb_ooo_engine]
    3739  public : uint32_t              * _nb_read_unit                         ;//[nb_execute_loop]
    3840  public : uint32_t              * _nb_write_unit                        ;//[nb_execute_loop]
     
    5052  public : Tpriority_t             _dispatch_priority                    ;
    5153  public : Tload_balancing_t       _dispatch_load_balancing              ;
    52   public : bool               **** _table_dispatch                       ;//[nb_ooo_engine][nb_inst_issue][execute_loop][nb_read_unit]
     54  public : bool               **** _table_dispatch                       ;//[nb_ooo_engine][nb_inst_issue_slot][execute_loop][nb_read_unit]
     55  public : bool                *** _table_issue_type                     ;//                                   [execute_loop][nb_read_unit][nb_type]
    5356  public : uint32_t             ** _translate_ooo_engine_num_front_end   ;//[nb_ooo_engine][ooo_engine_nb_front_end]
    5457  public : uint32_t             ** _translate_ooo_engine_num_execute_loop;//[nb_ooo_engine][ooo_engine_nb_execute_loop]
     
    6164
    6265  public : uint32_t             ** _execute_loop_nb_inst_insert                             ;//[nb_execute_loop][execute_loop_nb_ooo_engine]
    63   public : uint32_t             ** _execute_loop_nb_inst_issue                              ;//[nb_execute_loop][execute_loop_nb_ooo_engine]
     66  public : uint32_t             ** _execute_loop_nb_inst_issue_slot                         ;//[nb_execute_loop][execute_loop_nb_ooo_engine]
    6467//public : uint32_t              * _link_execute_loop_with_ooo_engine                       ;//[nb_ooo_engine]
    6568
     
    7073  public : uint32_t                _max_nb_write_unit                     ;
    7174  public : uint32_t                _max_nb_inst_insert                    ;
    72   public : uint32_t                _max_nb_inst_issue                     ;
     75  public : uint32_t                _max_nb_inst_issue_queue               ;
     76  public : uint32_t                _max_nb_inst_issue_slot                ;
    7377  public : uint32_t                _max_nb_read_unit                      ;
    7478
     
    8690   uint32_t              * ooo_engine_nb_inst_branch_complete   ,//[nb_ooo_engine]
    8791   uint32_t              * nb_inst_insert                       ,//[nb_ooo_engine]
    88    uint32_t              * nb_inst_issue                        ,//[nb_ooo_engine]
     92   uint32_t              * nb_inst_reexecute                    ,//[nb_ooo_engine]
     93   uint32_t              * nb_inst_issue_queue                  ,//[nb_ooo_engine]
     94   uint32_t              * nb_inst_issue_slot                   ,//[nb_ooo_engine]
    8995   uint32_t             ** nb_inst_execute                      ,//[nb_ooo_engine][ooo_engine_nb_execute_loop]
     96   bool                  * issue_queue_in_order                 ,//[nb_ooo_engine]
    9097   uint32_t              * nb_read_unit                         ,//[nb_execute_loop]
    9198   uint32_t              * nb_write_unit                        ,//[nb_execute_loop]
     
    100107   Tpriority_t             dispatch_priority                    ,
    101108   Tload_balancing_t       dispatch_load_balancing              ,
    102    bool               **** table_dispatch                       ,//[nb_ooo_engine][nb_inst_issue][execute_loop][nb_read_unit]
     109   bool               **** table_dispatch                       ,//[nb_ooo_engine][nb_inst_issue_slot][execute_loop][nb_read_unit]
     110   bool                *** table_issue_type                     ,//                                   [execute_loop][nb_read_unit][nb_type]
     111// bool                *** table_issue_thread                   ,//                                   [execute_loop][nb_read_unit][nb_thread]
    103112   uint32_t             ** translate_ooo_engine_num_front_end   ,//[nb_ooo_engine][ooo_engine_nb_front_end]
    104113   uint32_t             ** translate_ooo_engine_num_execute_loop,//[nb_ooo_engine][ooo_engine_nb_execute_loop]
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue.cpp

    r105 r117  
    160160
    161161        for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
    162           for (uint32_t j=0; j<_param->_nb_inst_issue [i]; ++j)
     162          for (uint32_t j=0; j<_param->_nb_inst_issue_queue [i]; ++j)
    163163            {
    164164              sensitive << (*(in_ISSUE_OOO_ENGINE_VAL                   [i][j]))
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_allocation.cpp

    r112 r117  
    133133    // ~~~~~[ Interface : "issue" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    134134    {
    135       ALLOC2_INTERFACE_BEGIN("issue_ooo_engine",SOUTH,IN ,_("Issue : request between rename unit and execute loop"),_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    136 
    137       _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_VAL                      ,"VAL"                  ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    138       _ALLOC2_SIGNAL_OUT(out_ISSUE_OOO_ENGINE_ACK                      ,"ACK"                  ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    139       _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_FRONT_END_ID             ,"FRONT_END_ID"         ,Tcontext_t        ,_param->_size_front_end_id    ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    140       _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_CONTEXT_ID               ,"CONTEXT_ID"           ,Tcontext_t        ,_param->_size_context_id      ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    141       _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_PACKET_ID                ,"PACKET_ID"            ,Tpacket_t         ,_param->_size_rob_ptr         ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    142       _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_TYPE                     ,"TYPE"                 ,Ttype_t           ,_param->_size_type            ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    143       _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_OPERATION                ,"OPERATION"            ,Toperation_t      ,_param->_size_operation       ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    144       _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE    ,"STORE_QUEUE_PTR_WRITE",Tlsq_ptr_t        ,_param->_size_store_queue_ptr ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    145       _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE     ,"LOAD_QUEUE_PTR_WRITE" ,Tlsq_ptr_t        ,_param->_size_load_queue_ptr  ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    146       _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT             ,"HAS_IMMEDIAT"         ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    147       _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_IMMEDIAT                 ,"IMMEDIAT"             ,Tgeneral_data_t   ,_param->_size_general_data    ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    148       _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_READ_RA                  ,"READ_RA"              ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    149       _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RA               ,"NUM_REG_RA"           ,Tgeneral_address_t,_param->_size_general_register,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    150       _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_READ_RB                  ,"READ_RB"              ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    151       _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RB               ,"NUM_REG_RB"           ,Tgeneral_address_t,_param->_size_general_register,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    152       _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_READ_RC                  ,"READ_RC"              ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    153       _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RC               ,"NUM_REG_RC"           ,Tspecial_address_t,_param->_size_special_register,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    154       _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_WRITE_RD                 ,"WRITE_RD"             ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    155       _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RD               ,"NUM_REG_RD"           ,Tgeneral_address_t,_param->_size_general_register,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    156       _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_WRITE_RE                 ,"WRITE_RE"             ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    157       _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RE               ,"NUM_REG_RE"           ,Tspecial_address_t,_param->_size_special_register,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
    158 
    159       ALLOC2_INTERFACE_END(_param->_nb_ooo_engine,_param->_nb_inst_issue[it1]);
     135      ALLOC2_INTERFACE_BEGIN("issue_ooo_engine",SOUTH,IN ,_("Issue : request between rename unit and execute loop"),_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     136
     137      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_VAL                      ,"VAL"                  ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     138      _ALLOC2_SIGNAL_OUT(out_ISSUE_OOO_ENGINE_ACK                      ,"ACK"                  ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     139      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_FRONT_END_ID             ,"FRONT_END_ID"         ,Tcontext_t        ,_param->_size_front_end_id    ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     140      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_CONTEXT_ID               ,"CONTEXT_ID"           ,Tcontext_t        ,_param->_size_context_id      ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     141      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_PACKET_ID                ,"PACKET_ID"            ,Tpacket_t         ,_param->_size_rob_ptr         ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     142      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_TYPE                     ,"TYPE"                 ,Ttype_t           ,_param->_size_type            ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     143      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_OPERATION                ,"OPERATION"            ,Toperation_t      ,_param->_size_operation       ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     144      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE    ,"STORE_QUEUE_PTR_WRITE",Tlsq_ptr_t        ,_param->_size_store_queue_ptr ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     145      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE     ,"LOAD_QUEUE_PTR_WRITE" ,Tlsq_ptr_t        ,_param->_size_load_queue_ptr  ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     146      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT             ,"HAS_IMMEDIAT"         ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     147      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_IMMEDIAT                 ,"IMMEDIAT"             ,Tgeneral_data_t   ,_param->_size_general_data    ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     148      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_READ_RA                  ,"READ_RA"              ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     149      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RA               ,"NUM_REG_RA"           ,Tgeneral_address_t,_param->_size_general_register,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     150      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_READ_RB                  ,"READ_RB"              ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     151      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RB               ,"NUM_REG_RB"           ,Tgeneral_address_t,_param->_size_general_register,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     152      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_READ_RC                  ,"READ_RC"              ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     153      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RC               ,"NUM_REG_RC"           ,Tspecial_address_t,_param->_size_special_register,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     154      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_WRITE_RD                 ,"WRITE_RD"             ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     155      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RD               ,"NUM_REG_RD"           ,Tgeneral_address_t,_param->_size_general_register,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     156      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_WRITE_RE                 ,"WRITE_RE"             ,Tcontrol_t        ,1                             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     157      _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RE               ,"NUM_REG_RE"           ,Tspecial_address_t,_param->_size_special_register,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
     158
     159      ALLOC2_INTERFACE_END(_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]);
    160160    }
    161161
     
    257257
    258258    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    259     _priority_ooo_engine  = new generic::priority::Priority * [_param->_nb_execute_loop];
     259    _priority_ooo_engine = new generic::priority::Priority (_name+"_priority_ooo_engine",
     260                                                            _param->_dispatch_priority      ,
     261                                                            _param->_dispatch_load_balancing,
     262                                                            _param->_nb_ooo_engine          ,
     263                                                            _param->_nb_inst_issue_slot     ,
     264                                                            _param->_nb_ooo_engine         
     265                                                            );
     266
     267//  _priority_ooo_engine  = new generic::priority::Priority * [_param->_nb_execute_loop];
    260268    _priority_read_unit   = new generic::priority::Priority * [_param->_nb_execute_loop];
    261269
    262270    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
    263271      {
    264         _priority_ooo_engine [i] = new generic::priority::Priority (_name+"_priority_ooo_engine_"+toString(i),
    265                                                                     _param->_dispatch_priority      ,
    266                                                                     _param->_dispatch_load_balancing,
    267                                                                     _param->_execute_loop_nb_ooo_engine [i],
    268                                                                     _param->_execute_loop_nb_inst_issue [i],
    269                                                                     _param->_execute_loop_nb_ooo_engine [i]
    270                                                                     );
     272//         _priority_ooo_engine [i] = new generic::priority::Priority (_name+"_priority_ooo_engine_"+toString(i),
     273//                                                                     _param->_dispatch_priority      ,
     274//                                                                     _param->_dispatch_load_balancing,
     275//                                                                     _param->_execute_loop_nb_ooo_engine      [i],
     276//                                                                     _param->_execute_loop_nb_inst_issue_slot [i],
     277//                                                                     _param->_execute_loop_nb_ooo_engine      [i]
     278//                                                                     );
    271279
    272280        _priority_read_unit  [i] = new generic::priority::Priority (_name+"_priority_read_unit_"+toString(i),
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_deallocation.cpp

    r111 r117  
    7070        DELETE1_SIGNAL( in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR      ,_param->_nb_ooo_engine,_param->_size_spr);
    7171
    72         DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_VAL                      ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],1);
    73         DELETE2_SIGNAL(out_ISSUE_OOO_ENGINE_ACK                      ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],1);
    74         DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_FRONT_END_ID             ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],_param->_size_front_end_id);
    75         DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_CONTEXT_ID               ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],_param->_size_context_id);
    76         DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_PACKET_ID                ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],_param->_size_rob_ptr);
    77         DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_TYPE                     ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],_param->_size_type);
    78         DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_OPERATION                ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],_param->_size_operation);
    79         DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE    ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],_param->_size_store_queue_ptr);
    80         DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE     ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],_param->_size_load_queue_ptr);
    81         DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT             ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],1);
    82         DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_IMMEDIAT                 ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],_param->_size_general_data);
    83         DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RA                  ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],1);
    84         DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RA               ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],_param->_size_general_register);
    85         DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RB                  ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],1);
    86         DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RB               ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],_param->_size_general_register);
    87         DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RC                  ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],1);
    88         DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RC               ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],_param->_size_special_register);
    89         DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RD                 ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],1);
    90         DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RD               ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],_param->_size_general_register);
    91         DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RE                 ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],1);
    92         DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RE               ,_param->_nb_ooo_engine,_param->_nb_inst_issue[it1],_param->_size_special_register);
     72        DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_VAL                      ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],1);
     73        DELETE2_SIGNAL(out_ISSUE_OOO_ENGINE_ACK                      ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],1);
     74        DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_FRONT_END_ID             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_front_end_id);
     75        DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_CONTEXT_ID               ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_context_id);
     76        DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_PACKET_ID                ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_rob_ptr);
     77        DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_TYPE                     ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_type);
     78        DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_OPERATION                ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_operation);
     79        DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE    ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_store_queue_ptr);
     80        DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE     ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_load_queue_ptr);
     81        DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT             ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],1);
     82        DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_IMMEDIAT                 ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_general_data);
     83        DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RA                  ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],1);
     84        DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RA               ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_general_register);
     85        DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RB                  ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],1);
     86        DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RB               ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_general_register);
     87        DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RC                  ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],1);
     88        DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RC               ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_special_register);
     89        DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RD                 ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],1);
     90        DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RD               ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_general_register);
     91        DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RE                 ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],1);
     92        DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RE               ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_special_register);
    9393
    9494        DELETE2_SIGNAL(out_ISSUE_EXECUTE_LOOP_VAL                    ,_param->_nb_execute_loop,_param->_nb_read_unit[it1],1);
     
    160160    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
    161161      {
    162         delete _priority_ooo_engine [i];
     162//      delete _priority_ooo_engine [i];
    163163        delete _priority_read_unit  [i];
    164164      }
    165     delete [] _priority_ooo_engine;
     165//  delete [] _priority_ooo_engine;
    166166    delete [] _priority_read_unit ;
     167    delete    _priority_ooo_engine;
    167168
    168169    delete _component;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_genMealy_issue.cpp

    r115 r117  
    1515namespace core_glue {
    1616
     17  /*
     18      OOO        SLOT     Execute Loop                                 
     19    ---+                      +-----
     20       |  +-----+     +-----+ |     
     21      -+->|     |     |     |-+->   
     22       |  |     |-()->|     | |     
     23      -+->| _ _ |     |     |-+->   
     24       |  | _X_ |-()->|     | |     
     25      -+->|     |     |     | +-----
     26       |  |     |-()->|     |       
     27      -+->|     |     |     | +-----
     28       |  +-----+     |     | |     
     29    ---+  crossbar    | _ _ |-+->   
     30                      | _X_ | |     
     31    ---+              |     |-+->   
     32       |  +-----+     |     | |     
     33      -+->|     |     |     | +-----
     34       |  |     |-()->|     |       
     35      -+->| _ _ |     |     | +-----
     36       |  | _X_ |-()->|     | |     
     37      -+->|     |     |     |-+->   
     38       |  |     |-()->|     | |     
     39      -+->|     |     |     |-+->   
     40       |  +-----+     +-----+ |     
     41    ---+  crossbar   dispatch +-----
     42  */
     43
     44
     45// class num_read_unit_t
     46//   {
     47//   public : const uint32_t num_execute_loop;
     48//   public : const uint32_t num_read_unit;
     49   
     50//   public : num_read_unit_t (uint32_t num_execute_loop,
     51//                             uint32_t num_read_unit) :
     52//     this->num_execute_loop (num_execute_loop),
     53//     this->num_read_unit    (num_read_unit   )
     54//     {};
     55//   }
    1756
    1857#undef  FUNCTION
     
    2362    log_function(Core_Glue,FUNCTION,_name.c_str());
    2463
    25     Tcontrol_t ISSUE_OOO_ENGINE_ACK   [_param->_nb_ooo_engine  ][_param->_max_nb_inst_issue];
    26     Tcontrol_t ISSUE_EXECUTE_LOOP_VAL [_param->_nb_execute_loop][_param->_max_nb_read_unit ];
    27     bool       READ_UNIT_ENABLE       [_param->_nb_execute_loop][_param->_max_nb_read_unit ];
    28 
     64    Tcontrol_t ISSUE_OOO_ENGINE_ACK   [_param->_nb_ooo_engine  ][_param->_max_nb_inst_issue_queue];
     65    Tcontrol_t ISSUE_EXECUTE_LOOP_VAL [_param->_nb_execute_loop][_param->_max_nb_read_unit];
     66    Tcontrol_t READ_UNIT_ENABLE       [_param->_nb_execute_loop][_param->_max_nb_read_unit];
     67    Tcontrol_t SLOT_ENABLE            [_param->_nb_ooo_engine  ][_param->_max_nb_inst_issue_slot];
     68   
    2969    // Init -> all at 0
    3070    for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
    31       for (uint32_t j=0; j<_param->_nb_inst_issue[i]; ++j)
    32         ISSUE_OOO_ENGINE_ACK [i][j] = 0;
     71      {
     72        for (uint32_t j=0; j<_param->_nb_inst_issue_queue[i]; ++j)
     73          ISSUE_OOO_ENGINE_ACK [i][j] = 0;
     74        for (uint32_t j=0; j<_param->_nb_inst_issue_slot[i]; ++j)
     75          SLOT_ENABLE [i][j] = 1;         
     76      }
     77
    3378    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
    3479      for (uint32_t j=0; j<_param->_nb_read_unit[i]; ++j)
    3580        {
    3681          ISSUE_EXECUTE_LOOP_VAL [i][j] = 0;
     82
    3783          // Read unit is enable is signal ack is set
    3884          READ_UNIT_ENABLE       [i][j] = (PORT_READ(in_ISSUE_EXECUTE_LOOP_ACK [i][j]) == 1);
    39           log_printf(TRACE,Core_Glue,FUNCTION,"  * Read_unit [%d][%d] : %d",i,j,READ_UNIT_ENABLE[i][j]);
     85          log_printf(TRACE,Core_Glue,FUNCTION,"  * Read_unit [%d][%d].enable : %d",i,j,READ_UNIT_ENABLE[i][j]);
    4086        }
    4187
     88//     std::list<num_read_unit_t> SLOT_TYPE [_param->_nb_ooo_engine][_param->_max_nb_inst_issue_slot][_param->_nb_type];
     89
     90//     // for each read_unit
     91//     for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
     92//       for (uint32_t j=0; j<_param->_nb_read_unit[i]; ++j)
     93//         // test if this read_unit can receive an instruction
     94//         if (PORT_READ(in_ISSUE_EXECUTE_LOOP_ACK [i][j]) == 1)
     95//           for (uint32_t x=0; x<_nb_ooo_engine; ++x)
     96//             for (uint32_t y=0; y<_nb_inst_issue_slot[y]; ++y)
     97//               // test if can dispatch
     98//               if (_param->_table_dispatch [x][y][i][j])
     99//                 for (uint32_t k=0;k<_param->_nb_type; ++k)
     100//                   // Can receive this type
     101//                   if (_param->_table_dispatch [i][j][k])
     102//                     SLOT_TYPE[x][y][k].push_back(num_read_unit_t(i,j));
     103
     104//     // Select an issue_slot of an ooo_engine
     105//     std::list<generic::priority::select_t> * select_ooo_engine = _priority_ooo_engine->select();
     106//     for (std::list<generic::priority::select_t>::iterator it_ooo_engine=select_ooo_engine->begin();
     107//          it_ooo_engine!=select_ooo_engine->end();
     108//          ++it_ooo_engine)
     109//       {
     110//         // ... get id of the most priotary
     111//         const uint32_t num_ooo_engine      = it_ooo_engine->grp;
     112//         const uint32_t num_inst_issue_slot = it_ooo_engine->elt;
     113
     114//         // Test if this ooo_engine is enable (can be desable if issue in_order)
     115//         if (OOO_ENGINE_ENABLE[num_ooo_engine])
     116//           {
     117
     118//           }
     119//       }
     120
     121    for (uint32_t num_ooo_engine=0; num_ooo_engine<_param->_nb_ooo_engine; ++num_ooo_engine)
     122      for (uint32_t num_inst_issue_queue=0; num_inst_issue_queue<_param->_nb_inst_issue_queue[num_ooo_engine]; ++num_inst_issue_queue)
     123        {
     124          bool find = false;
     125
     126          Tcontrol_t val  = PORT_READ(in_ISSUE_OOO_ENGINE_VAL  [num_ooo_engine][num_inst_issue_queue]);
     127          Ttype_t    type = PORT_READ(in_ISSUE_OOO_ENGINE_TYPE [num_ooo_engine][num_inst_issue_queue]);
     128
     129          log_printf(TRACE,Core_Glue,FUNCTION,"  * num_ooo_engine                : %d",num_ooo_engine      );
     130          log_printf(TRACE,Core_Glue,FUNCTION,"  * num_inst_issue_queue          : %d",num_inst_issue_queue);
     131          log_printf(TRACE,Core_Glue,FUNCTION,"    * val                         : %d",val);
     132          log_printf(TRACE,Core_Glue,FUNCTION,"    * type                        : %d",type);
     133
     134          if (val)
     135            for (uint32_t num_inst_issue_slot=0; num_inst_issue_slot<_param->_nb_inst_issue_slot[num_ooo_engine]; ++num_inst_issue_slot)
     136              {
     137                log_printf(TRACE,Core_Glue,FUNCTION,"    * num_inst_issue_slot         : %d",num_inst_issue_slot);
     138               
     139                // scan all read_unit
     140               
     141                if (SLOT_ENABLE [num_ooo_engine][num_inst_issue_slot])
     142                  for (uint32_t num_execute_loop=0; num_execute_loop<_param->_nb_execute_loop; ++num_execute_loop)
     143                    {
     144                      for (uint32_t num_read_unit=0; num_read_unit<_param->_nb_read_unit[num_execute_loop]; ++num_read_unit)
     145                        {
     146                          Tcontrol_t ack = READ_UNIT_ENABLE [num_execute_loop][num_read_unit];
     147                         
     148                          log_printf(TRACE,Core_Glue,FUNCTION,"      * num_execute_loop          : %d",num_execute_loop);
     149                          log_printf(TRACE,Core_Glue,FUNCTION,"      * num_read_unit             : %d",num_read_unit   );
     150                          log_printf(TRACE,Core_Glue,FUNCTION,"        * read_unit_enable        : %d",ack             );
     151                         
     152                          // test if :
     153                          //  * read_unit can accept an instruction (valid and no previous instruction)
     154                          //  * slot can issue an instruction at this read_unit
     155                          //  * read_unit can accept this type
     156                          if (ack and
     157                              _param->_table_dispatch [num_ooo_engine][num_inst_issue_slot][num_execute_loop][num_read_unit] and
     158                              _param->_table_issue_type [num_execute_loop][num_read_unit][type])
     159                            {
     160                              log_printf(TRACE,Core_Glue,FUNCTION,"  * find !!!");
     161
     162                              // find !
     163                              // Transaction
     164                              READ_UNIT_ENABLE       [num_execute_loop][num_read_unit] = false; // now, this read_unit is busy
     165                              ISSUE_EXECUTE_LOOP_VAL [num_execute_loop][num_read_unit] = 1; // = val
     166                              ISSUE_OOO_ENGINE_ACK   [num_ooo_engine][num_inst_issue_queue] = 1; // = ack
     167                              SLOT_ENABLE            [num_ooo_engine][num_inst_issue_slot]  = false; // now this slot is used
     168                                     
     169                              if (_param->_have_port_context_id)
     170                              PORT_WRITE(out_ISSUE_EXECUTE_LOOP_CONTEXT_ID            [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_CONTEXT_ID            [num_ooo_engine][num_inst_issue_queue]));
     171                              if (_param->_have_port_front_end_id)
     172                              PORT_WRITE(out_ISSUE_EXECUTE_LOOP_FRONT_END_ID          [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_FRONT_END_ID          [num_ooo_engine][num_inst_issue_queue]));
     173                              if (_param->_have_port_ooo_engine_id)
     174                                {
     175                              Tcontext_t ooo_engine_id = 0;
     176                              PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OOO_ENGINE_ID         [num_execute_loop][num_read_unit],ooo_engine_id);
     177                                }
     178                              if (_param->_have_port_rob_ptr)
     179                              PORT_WRITE(out_ISSUE_EXECUTE_LOOP_PACKET_ID             [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_PACKET_ID             [num_ooo_engine][num_inst_issue_queue]));
     180                              PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OPERATION             [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_OPERATION             [num_ooo_engine][num_inst_issue_queue]));
     181                              PORT_WRITE(out_ISSUE_EXECUTE_LOOP_TYPE                  [num_execute_loop][num_read_unit],type);
     182                              PORT_WRITE(out_ISSUE_EXECUTE_LOOP_STORE_QUEUE_PTR_WRITE [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE [num_ooo_engine][num_inst_issue_queue]));
     183                              if (_param->_have_port_load_queue_ptr)
     184                              PORT_WRITE(out_ISSUE_EXECUTE_LOOP_LOAD_QUEUE_PTR_WRITE  [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE  [num_ooo_engine][num_inst_issue_queue]));
     185                              PORT_WRITE(out_ISSUE_EXECUTE_LOOP_HAS_IMMEDIAT          [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT          [num_ooo_engine][num_inst_issue_queue]));
     186                              PORT_WRITE(out_ISSUE_EXECUTE_LOOP_IMMEDIAT              [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_IMMEDIAT              [num_ooo_engine][num_inst_issue_queue]));
     187                              PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RA               [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RA               [num_ooo_engine][num_inst_issue_queue]));
     188                              PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RA            [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RA            [num_ooo_engine][num_inst_issue_queue]));
     189                              PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RB               [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RB               [num_ooo_engine][num_inst_issue_queue]));
     190                              PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RB            [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RB            [num_ooo_engine][num_inst_issue_queue]));
     191                              PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RC               [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RC               [num_ooo_engine][num_inst_issue_queue]));
     192                              PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RC            [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RC            [num_ooo_engine][num_inst_issue_queue]));
     193                              PORT_WRITE(out_ISSUE_EXECUTE_LOOP_WRITE_RD              [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_WRITE_RD              [num_ooo_engine][num_inst_issue_queue]));
     194                              PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RD            [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RD            [num_ooo_engine][num_inst_issue_queue]));
     195                              PORT_WRITE(out_ISSUE_EXECUTE_LOOP_WRITE_RE              [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_WRITE_RE              [num_ooo_engine][num_inst_issue_queue]));
     196                              PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RE            [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RE            [num_ooo_engine][num_inst_issue_queue]));
     197                             
     198                             
     199                              find = true;
     200                              break;
     201                            }
     202                          //if (find)
     203                          //  break;
     204                        }
     205                      if (find)
     206                        break;
     207                    }
     208                if (find)
     209                  break;
     210              }
     211         
     212          if (_param->_issue_queue_in_order [num_ooo_engine] and
     213              not find and
     214              (num_inst_issue_queue >= _param->_nb_inst_reexecute [num_ooo_engine]))
     215            {
     216              log_printf(TRACE,Core_Glue,FUNCTION,"  * stop scan !!!");
     217             
     218              break; // stop scan
     219            }
     220        }
     221
     222    // Write output
     223    for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
     224      for (uint32_t j=0; j<_param->_nb_inst_issue_queue[i]; ++j)
     225        PORT_WRITE(out_ISSUE_OOO_ENGINE_ACK [i][j], ISSUE_OOO_ENGINE_ACK [i][j]);
     226    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
     227      for (uint32_t j=0; j<_param->_nb_read_unit[i]; ++j)
     228        PORT_WRITE(out_ISSUE_EXECUTE_LOOP_VAL [i][j], ISSUE_EXECUTE_LOOP_VAL [i][j]);
     229
     230    log_end(Core_Glue,FUNCTION);
     231  };
     232
     233}; // end namespace core_glue
     234}; // end namespace core
     235
     236}; // end namespace behavioural
     237}; // end namespace morpheo             
     238#endif
     239
     240    /*
     241    bool       OOO_ENGINE_ENABLE      [_param->_nb_ooo_engine  ];
     242    Tcontrol_t SLOT_ENABLE            [_param->_nb_ooo_engine  ][_param->_max_nb_inst_issue_slot];
     243    bool       READ_UNIT_ENABLE       [_param->_nb_execute_loop][_param->_max_nb_read_unit];
     244
     245    // Init -> all at 0
     246    for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
     247      {
     248        OOO_ENGINE_ENABLE [i] = true;
     249
     250        for (uint32_t j=0; j<_param->_nb_inst_issue_slot[i]; ++j)
     251          SLOT_ENABLE [i][j] = 1;         
     252      }
     253
     254    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
     255      for (uint32_t j=0; j<_param->_nb_read_unit[i]; ++j)
     256        {
     257          // Read unit is enable is signal ack is set
     258          READ_UNIT_ENABLE       [i][j] = (PORT_READ(in_ISSUE_EXECUTE_LOOP_ACK [i][j]) == 1);
     259          log_printf(TRACE,Core_Glue,FUNCTION,"  * Read_unit [%d][%d].enable : %d",i,j,READ_UNIT_ENABLE[i][j]);
     260        }
     261
     262
     263    // for each execute_loop
    42264    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
    43265      {
    44         log_printf(TRACE,Core_Glue,FUNCTION,"  * execute_loop [%d]",i);
    45 
    46         // for each issue of each ooo_engine ...
    47         std::list<generic::priority::select_t> * select_ooo_engine = _priority_ooo_engine[i]->select();
    48         for (std::list<generic::priority::select_t>::iterator it_ooo_engine=select_ooo_engine->begin();
    49              it_ooo_engine!=select_ooo_engine->end();
    50              ++it_ooo_engine)
     266        // Scan all read_unit
     267        std::list<generic::priority::select_t> * select_read_unit = _priority_read_unit[i]->select();
     268        for (std::list<generic::priority::select_t>::iterator it_read_unit=select_read_unit->begin();
     269             it_read_unit!=select_read_unit->end();
     270             ++it_read_unit)
    51271          {
    52             // get id
    53             const uint32_t ooo_engine_id  = it_ooo_engine->grp;
    54             const uint32_t num_ooo_engine = _param->_translate_execute_loop_num_ooo_engine [i][ooo_engine_id];
    55             const uint32_t num_inst_issue = it_ooo_engine->elt;
    56 
    57             log_printf(TRACE,Core_Glue,FUNCTION,"    * num_ooo_engine [%d] (id -> %d)",num_ooo_engine, ooo_engine_id);
    58             log_printf(TRACE,Core_Glue,FUNCTION,"    * num_inst_issue          : %d",num_inst_issue);
    59 
    60             Tcontrol_t ooo_engine_val = PORT_READ(in_ISSUE_OOO_ENGINE_VAL [num_ooo_engine][num_inst_issue]);
    61 
    62             log_printf(TRACE,Core_Glue,FUNCTION,"    * ISSUE_OOO_ENGINE_VAL    : %d",ooo_engine_val);
    63 
    64             // test if have a request ?
    65 //          if (ooo_engine_val)
     272            // get the most priotary ...
     273            uint32_t num_read_unit = it_read_unit->grp;
     274           
     275            log_printf(TRACE,Core_Glue,FUNCTION,"  * read_unit [%d][%d]",i,num_read_unit);
     276
     277            // ... and test if this read_unit is valid
     278            if (READ_UNIT_ENABLE [i][num_read_unit])
    66279              {
    67 //              // If ooo_engine can issue instruction on multiple execute_loop
    68 //              if (not ISSUE_OOO_ENGINE_ACK [num_ooo_engine][num_inst_issue])
    69 
    70                 // Scan all read_unit
    71                 std::list<generic::priority::select_t> * select_read_unit = _priority_read_unit[i]->select();
    72                 for (std::list<generic::priority::select_t>::iterator it_read_unit=select_read_unit->begin();
    73                      it_read_unit!=select_read_unit->end();
    74                      ++it_read_unit)
    75                   {
    76                     uint32_t num_read_unit = it_read_unit->grp;
    77                    
    78                     // Test if have an link and read unit is enable
    79                     log_printf(TRACE,Core_Glue,FUNCTION,"      * read_unit             : %d",num_read_unit);
    80                     log_printf(TRACE,Core_Glue,FUNCTION,"        * READ_UNIT_ENABLE    : %d",READ_UNIT_ENABLE [i][num_read_unit]);
    81                     log_printf(TRACE,Core_Glue,FUNCTION,"        * table_dispatch      : %d",_param->_table_dispatch [num_ooo_engine][num_inst_issue][i][num_read_unit]);
    82                    
    83                     Tcontrol_t read_unit_enable = READ_UNIT_ENABLE [i][num_read_unit];
    84 
    85                     // Test if the read_unit is not busy and if an link is between the issue slot and read_unit
    86                     if (read_unit_enable and
    87                         _param->_table_dispatch [num_ooo_engine][num_inst_issue][i][num_read_unit])
    88                       {
    89                         log_printf(TRACE,Core_Glue,FUNCTION,"        * find !!!");
    90                        
    91                         // Transaction
    92                         READ_UNIT_ENABLE       [i][num_read_unit] = false; // now, this read_unit is busy
    93                         ISSUE_EXECUTE_LOOP_VAL [i][num_read_unit] = ooo_engine_val; // = 1
    94                         ISSUE_OOO_ENGINE_ACK   [num_ooo_engine][num_inst_issue] = read_unit_enable; // = 1
    95                        
    96                         if (_param->_have_port_context_id)
    97                         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_CONTEXT_ID            [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_CONTEXT_ID            [num_ooo_engine][num_inst_issue]));
    98                         if (_param->_have_port_front_end_id)
    99                         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_FRONT_END_ID          [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_FRONT_END_ID          [num_ooo_engine][num_inst_issue]));
    100                         if (_param->_have_port_ooo_engine_id)
    101                         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OOO_ENGINE_ID         [i][num_read_unit],ooo_engine_id);
    102                         if (_param->_have_port_rob_ptr)
    103                         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_PACKET_ID             [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_PACKET_ID             [num_ooo_engine][num_inst_issue]));
    104                         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OPERATION             [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_OPERATION             [num_ooo_engine][num_inst_issue]));
    105                         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_TYPE                  [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_TYPE                  [num_ooo_engine][num_inst_issue]));
    106                         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_STORE_QUEUE_PTR_WRITE [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE [num_ooo_engine][num_inst_issue]));
    107                         if (_param->_have_port_load_queue_ptr)
    108                         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_LOAD_QUEUE_PTR_WRITE  [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE  [num_ooo_engine][num_inst_issue]));
    109                         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_HAS_IMMEDIAT          [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT          [num_ooo_engine][num_inst_issue]));
    110                         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_IMMEDIAT              [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_IMMEDIAT              [num_ooo_engine][num_inst_issue]));
    111                         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RA               [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RA               [num_ooo_engine][num_inst_issue]));
    112                         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RA            [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RA            [num_ooo_engine][num_inst_issue]));
    113                         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RB               [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RB               [num_ooo_engine][num_inst_issue]));
    114                         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RB            [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RB            [num_ooo_engine][num_inst_issue]));
    115                         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RC               [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RC               [num_ooo_engine][num_inst_issue]));
    116                         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RC            [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RC            [num_ooo_engine][num_inst_issue]));
    117                         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_WRITE_RD              [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_WRITE_RD              [num_ooo_engine][num_inst_issue]));
    118                         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RD            [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RD            [num_ooo_engine][num_inst_issue]));
    119                         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_WRITE_RE              [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_WRITE_RE              [num_ooo_engine][num_inst_issue]));
    120                         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RE            [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RE            [num_ooo_engine][num_inst_issue]));
    121 
    122                         break; // find : stop scan read_unit
    123                       }
     280                bool find = false;
     281               
     282                // This read_unit is valid, now find an valid instruction
     283                // for each issue of each ooo_engine ...
     284                std::list<generic::priority::select_t> * select_ooo_engine = _priority_ooo_engine[i]->select();
     285                for (std::list<generic::priority::select_t>::iterator it_ooo_engine=select_ooo_engine->begin();
     286                     it_ooo_engine!=select_ooo_engine->end();
     287                     ++it_ooo_engine)
     288                  {
     289                    // ... get id of the most priotary
     290                    const uint32_t ooo_engine_id       = it_ooo_engine->grp;
     291                    const uint32_t num_ooo_engine      = _param->_translate_execute_loop_num_ooo_engine [i][ooo_engine_id];
     292                    const uint32_t num_inst_issue_slot = it_ooo_engine->elt;
     293                   
     294                    log_printf(TRACE,Core_Glue,FUNCTION,"    * num_ooo_engine [%d (%d)][%d]",num_ooo_engine, ooo_engine_id,num_inst_issue_slot);
     295                   
     296                    if (OOO_ENGINE_ENABLE [num_ooo_engine] and SLOT_ENABLE [num_ooo_engine][num_inst_issue_slot])
     297                      {
     298                        uint32_t num_inst_issue_queue = 0;
     299                        for (; num_inst_issue_queue < _param->_nb_inst_issue_queue [num_ooo_engine]; num_inst_issue_queue ++)
     300                          {
     301                            // Test if this instruction is not previously send at a read_unit
     302                            if (not ISSUE_OOO_ENGINE_ACK [num_ooo_engine][num_inst_issue_queue])
     303                              {
     304                                Tcontrol_t ooo_engine_val = PORT_READ(in_ISSUE_OOO_ENGINE_VAL  [num_ooo_engine][num_inst_issue_queue]);
     305                                Ttype_t    type           = PORT_READ(in_ISSUE_OOO_ENGINE_TYPE [num_ooo_engine][num_inst_issue_queue]);
     306                                // Test if have an link and read unit is enable
     307                                bool can_dispatch   = _param->_table_dispatch [num_ooo_engine][num_inst_issue_slot][i][num_read_unit];
     308                                bool can_issue_type = _param->_table_issue_type [i][num_read_unit][type];
     309                               
     310                                log_printf(TRACE,Core_Glue,FUNCTION,"      * num_ooo_engine_queue  : %d",num_inst_issue_queue);
     311                                log_printf(TRACE,Core_Glue,FUNCTION,"      * type                  : %s",toString(type).c_str());
     312                                log_printf(TRACE,Core_Glue,FUNCTION,"      * ISSUE_OOO_ENGINE_VAL  : %d",ooo_engine_val);
     313                                log_printf(TRACE,Core_Glue,FUNCTION,"      * table_dispatch        : %d",can_dispatch);
     314                                log_printf(TRACE,Core_Glue,FUNCTION,"      * table_issue_type      : %d",can_issue_type);
     315                               
     316                               
     317                                // test if have a request ?
     318                                // and test if have a link between the issue slot and read_unit
     319                                // and if the read_unit accept this instruction's type
     320                                if (ooo_engine_val and
     321                                    can_dispatch   and
     322                                    can_issue_type)
     323                                  {
     324//                                     log_printf(TRACE,Core_Glue,FUNCTION,"          * find !!!");
     325                                   
     326                                    // Transaction
     327                                    READ_UNIT_ENABLE       [i][num_read_unit] = false; // now, this read_unit is busy
     328                                    ISSUE_EXECUTE_LOOP_VAL [i][num_read_unit] = ooo_engine_val;
     329                                    ISSUE_OOO_ENGINE_ACK   [num_ooo_engine][num_inst_issue_queue] = 1;
     330                                    SLOT_ENABLE            [num_ooo_engine][num_inst_issue_slot]  = 0; // now this slot is used
     331                                     
     332                                    if (_param->_have_port_context_id)
     333                                    PORT_WRITE(out_ISSUE_EXECUTE_LOOP_CONTEXT_ID            [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_CONTEXT_ID            [num_ooo_engine][num_inst_issue_queue]));
     334                                    if (_param->_have_port_front_end_id)
     335                                    PORT_WRITE(out_ISSUE_EXECUTE_LOOP_FRONT_END_ID          [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_FRONT_END_ID          [num_ooo_engine][num_inst_issue_queue]));
     336                                    if (_param->_have_port_ooo_engine_id)
     337                                    PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OOO_ENGINE_ID         [i][num_read_unit],ooo_engine_id);
     338                                    if (_param->_have_port_rob_ptr)
     339                                    PORT_WRITE(out_ISSUE_EXECUTE_LOOP_PACKET_ID             [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_PACKET_ID             [num_ooo_engine][num_inst_issue_queue]));
     340                                    PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OPERATION             [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_OPERATION             [num_ooo_engine][num_inst_issue_queue]));
     341                                    PORT_WRITE(out_ISSUE_EXECUTE_LOOP_TYPE                  [i][num_read_unit],type);
     342                                    PORT_WRITE(out_ISSUE_EXECUTE_LOOP_STORE_QUEUE_PTR_WRITE [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE [num_ooo_engine][num_inst_issue_queue]));
     343                                    if (_param->_have_port_load_queue_ptr)
     344                                    PORT_WRITE(out_ISSUE_EXECUTE_LOOP_LOAD_QUEUE_PTR_WRITE  [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE  [num_ooo_engine][num_inst_issue_queue]));
     345                                    PORT_WRITE(out_ISSUE_EXECUTE_LOOP_HAS_IMMEDIAT          [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT          [num_ooo_engine][num_inst_issue_queue]));
     346                                    PORT_WRITE(out_ISSUE_EXECUTE_LOOP_IMMEDIAT              [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_IMMEDIAT              [num_ooo_engine][num_inst_issue_queue]));
     347                                    PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RA               [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RA               [num_ooo_engine][num_inst_issue_queue]));
     348                                    PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RA            [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RA            [num_ooo_engine][num_inst_issue_queue]));
     349                                    PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RB               [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RB               [num_ooo_engine][num_inst_issue_queue]));
     350                                    PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RB            [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RB            [num_ooo_engine][num_inst_issue_queue]));
     351                                    PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RC               [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RC               [num_ooo_engine][num_inst_issue_queue]));
     352                                    PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RC            [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RC            [num_ooo_engine][num_inst_issue_queue]));
     353                                    PORT_WRITE(out_ISSUE_EXECUTE_LOOP_WRITE_RD              [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_WRITE_RD              [num_ooo_engine][num_inst_issue_queue]));
     354                                    PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RD            [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RD            [num_ooo_engine][num_inst_issue_queue]));
     355                                    PORT_WRITE(out_ISSUE_EXECUTE_LOOP_WRITE_RE              [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_WRITE_RE              [num_ooo_engine][num_inst_issue_queue]));
     356                                    PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RE            [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RE            [num_ooo_engine][num_inst_issue_queue]));
     357                                   
     358                                    find = true;// find : stop scan read_unit
     359                                  }
     360                              }
     361                            if (find)
     362                              break;
     363                          }
     364
     365                        if (find)
     366                          {
     367                            log_printf(TRACE,Core_Glue,FUNCTION,"    * find !!!");
     368                            break;
     369                          }
     370                        else
     371                          {
     372                            log_printf(TRACE,Core_Glue,FUNCTION,"    * not find !!!");
     373                            log_printf(TRACE,Core_Glue,FUNCTION,"      * issue_queue_in_order: %d",_param->_issue_queue_in_order [num_ooo_engine]);
     374                            log_printf(TRACE,Core_Glue,FUNCTION,"      * num_inst_issue_queue: %d",num_inst_issue_queue);
     375                            log_printf(TRACE,Core_Glue,FUNCTION,"      * nb_inst_reexecute   : %d",_param->_nb_inst_reexecute [num_ooo_engine]);
     376
     377                            if (_param->_issue_queue_in_order [num_ooo_engine] and
     378                                (num_inst_issue_queue >= _param->_nb_inst_reexecute [num_ooo_engine]))
     379                                OOO_ENGINE_ENABLE [num_ooo_engine] = false;
     380                          }
     381                      }
    124382                  }
    125383              }
    126384          }
    127385      }
    128 
    129     // Write output
    130     for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i)
    131       for (uint32_t j=0; j<_param->_nb_inst_issue[i]; ++j)
    132         PORT_WRITE(out_ISSUE_OOO_ENGINE_ACK [i][j], ISSUE_OOO_ENGINE_ACK [i][j]);
    133     for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
    134       for (uint32_t j=0; j<_param->_nb_read_unit[i]; ++j)
    135         PORT_WRITE(out_ISSUE_EXECUTE_LOOP_VAL [i][j], ISSUE_EXECUTE_LOOP_VAL [i][j]);
    136 
    137     log_end(Core_Glue,FUNCTION);
    138   };
    139 
    140 }; // end namespace core_glue
    141 }; // end namespace core
    142 
    143 }; // end namespace behavioural
    144 }; // end namespace morpheo             
    145 #endif
     386    */
     387
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_transition.cpp

    r111 r117  
    2525        for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
    2626          {
    27             _priority_ooo_engine [i]->reset();
     27//          _priority_ooo_engine [i]->reset();
    2828            _priority_read_unit  [i]->reset();
    2929          }
     30        _priority_ooo_engine->reset();
     31 
    3032      }
    3133    else
     
    3436        for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
    3537          {
    36             _priority_ooo_engine [i]->transition();
     38//          _priority_ooo_engine [i]->transition();
    3739            _priority_read_unit  [i]->transition();
    3840          }
     41        _priority_ooo_engine->transition();
    3942      }
    4043
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Parameters.cpp

    r88 r117  
    3030   uint32_t              * ooo_engine_nb_inst_branch_complete   ,//[nb_ooo_engine]
    3131   uint32_t              * nb_inst_insert                       ,//[nb_ooo_engine]
    32    uint32_t              * nb_inst_issue                        ,//[nb_ooo_engine]
     32   uint32_t              * nb_inst_reexecute                    ,//[nb_ooo_engine]
     33   uint32_t              * nb_inst_issue_queue                  ,//[nb_ooo_engine]
     34   uint32_t              * nb_inst_issue_slot                   ,//[nb_ooo_engine]
    3335   uint32_t             ** nb_inst_execute                      ,//[nb_ooo_engine][ooo_engine_nb_execute_loop]
     36   bool                  * issue_queue_in_order                 ,//[nb_ooo_engine]
    3437   uint32_t              * nb_read_unit                         ,//[nb_execute_loop]
    3538   uint32_t              * nb_write_unit                        ,//[nb_execute_loop]
     
    4447   Tpriority_t             dispatch_priority                    ,
    4548   Tload_balancing_t       dispatch_load_balancing              ,
    46    bool               **** table_dispatch                       ,//[nb_ooo_engine][nb_inst_issue][execute_loop][nb_read_unit]
     49   bool               **** table_dispatch                       ,//[nb_ooo_engine][nb_inst_issue_slot][execute_loop][nb_read_unit]
     50   bool                *** table_issue_type                     ,//                                   [execute_loop][nb_read_unit][nb_type]
    4751   uint32_t             ** translate_ooo_engine_num_front_end   ,//[nb_ooo_engine][ooo_engine_nb_front_end]
    4852   uint32_t             ** translate_ooo_engine_num_execute_loop,//[nb_ooo_engine][ooo_engine_nb_execute_loop]
     
    6367    _ooo_engine_nb_inst_branch_complete    = ooo_engine_nb_inst_branch_complete   ;
    6468    _nb_inst_insert                        = nb_inst_insert                       ;
    65     _nb_inst_issue                         = nb_inst_issue                        ;
     69    _nb_inst_reexecute                     = nb_inst_reexecute                    ;
     70    _nb_inst_issue_queue                   = nb_inst_issue_queue                  ;
     71    _nb_inst_issue_slot                    = nb_inst_issue_slot                   ;
    6672    _nb_inst_execute                       = nb_inst_execute                      ;
     73    _issue_queue_in_order                  = issue_queue_in_order                 ;
    6774    _nb_read_unit                          = nb_read_unit                         ;
    6875    _nb_write_unit                         = nb_write_unit                        ;
     
    7077    _dispatch_load_balancing               = dispatch_load_balancing              ;
    7178    _table_dispatch                        = table_dispatch                       ;
     79    _table_issue_type                      = table_issue_type                     ;
    7280    _translate_ooo_engine_num_front_end    = translate_ooo_engine_num_front_end   ;
    7381    _translate_ooo_engine_num_execute_loop = translate_ooo_engine_num_execute_loop;
     
    7886    ALLOC1(_link_ooo_engine_with_front_end,uint32_t,_nb_front_end);
    7987    ALLOC1(_translate_num_front_end_to_ooo_engine_front_end_id,uint32_t,_nb_front_end);
    80 
    8188    for (uint32_t i=0; i<_nb_ooo_engine; ++i)
    8289      for (uint32_t j=0; j<_ooo_engine_nb_front_end[i]; ++j)
     
    102109
    103110    ALLOC2(_execute_loop_nb_inst_insert,uint32_t,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
    104     ALLOC2(_execute_loop_nb_inst_issue ,uint32_t,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
     111    ALLOC2(_execute_loop_nb_inst_issue_slot ,uint32_t,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
    105112
    106113    for (uint32_t i=0; i<_nb_execute_loop; ++i)
     
    108115        {
    109116          uint32_t num_ooo_engine = _translate_execute_loop_num_ooo_engine [i][j];
    110           _execute_loop_nb_inst_issue  [i][j] = _nb_inst_issue [num_ooo_engine];
    111           _execute_loop_nb_inst_insert [i][j] = _nb_inst_insert [num_ooo_engine];
     117          _execute_loop_nb_inst_issue_slot [i][j] = _nb_inst_issue_slot [num_ooo_engine];
     118          _execute_loop_nb_inst_insert     [i][j] = _nb_inst_insert    [num_ooo_engine];
    112119        }
    113120
     
    118125    _max_nb_write_unit                      = max<uint32_t>(_nb_write_unit             ,_nb_execute_loop);
    119126    _max_nb_inst_insert                     = max<uint32_t>(_nb_inst_insert            ,_nb_ooo_engine);
    120     _max_nb_inst_issue                      = max<uint32_t>(_nb_inst_issue             ,_nb_ooo_engine);
     127    _max_nb_inst_issue_queue                = max<uint32_t>(_nb_inst_issue_queue       ,_nb_ooo_engine);
     128    _max_nb_inst_issue_slot                 = max<uint32_t>(_nb_inst_issue_slot        ,_nb_ooo_engine);
    121129    _max_nb_read_unit                       = max<uint32_t>(_nb_read_unit              ,_nb_execute_loop);
    122130
     
    171179    log_begin(Core_Glue,FUNCTION);
    172180
    173     DELETE2(_execute_loop_nb_inst_issue,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
     181    DELETE2(_execute_loop_nb_inst_issue_slot,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
    174182    DELETE2(_execute_loop_nb_inst_insert,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
    175183    DELETE2(_translate_num_execute_loop_to_ooo_engine_execute_loop_id, _nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
Note: See TracChangeset for help on using the changeset viewer.