Ignore:
Timestamp:
Dec 12, 2007, 5:02:47 PM (17 years ago)
Author:
rosiere
Message:

Station de reservation : systemC et VHDL ok

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/SelfTest/src/test.cpp

    r55 r69  
    1010#include "Common/include/Test.h"
    1111
    12 #define NB_ITERATION  16
    13 #define CYCLE_MAX     (512*NB_ITERATION)
     12#define NB_ITERATION  2
     13#define CYCLE_MAX     (2048*NB_ITERATION)
    1414
    1515#define LABEL(str)                                                                       \
     
    6464  sc_signal<Tcontrol_t> * in_NRESET = new sc_signal<Tcontrol_t> ("NRESET");
    6565
    66   sc_signal<Tcontrol_t        > *  in_RESERVATION_STATION_IN_VAL            = new sc_signal<Tcontrol_t        >;
    67   sc_signal<Tcontrol_t        > * out_RESERVATION_STATION_IN_ACK            = new sc_signal<Tcontrol_t        >;
    68   sc_signal<Tcontext_t        > *  in_RESERVATION_STATION_IN_CONTEXT_ID     = new sc_signal<Tcontext_t        >;
    69   sc_signal<Tpacket_t         > *  in_RESERVATION_STATION_IN_PACKET_ID      = new sc_signal<Tpacket_t         >;
    70   sc_signal<Toperation_t      > *  in_RESERVATION_STATION_IN_OPERATION      = new sc_signal<Toperation_t      >;
    71   sc_signal<Ttype_t           > *  in_RESERVATION_STATION_IN_TYPE           = new sc_signal<Ttype_t           >;
    72   sc_signal<Tcontrol_t        > *  in_RESERVATION_STATION_IN_HAS_IMMEDIAT   = new sc_signal<Tcontrol_t        >;
    73   sc_signal<Tgeneral_data_t   > *  in_RESERVATION_STATION_IN_IMMEDIAT       = new sc_signal<Tgeneral_data_t   >;
    74 //sc_signal<Tcontrol_t        > *  in_RESERVATION_STATION_IN_READ_RA        = new sc_signal<Tcontrol_t        >;
    75   sc_signal<Tgeneral_address_t> *  in_RESERVATION_STATION_IN_NUM_REG_RA     = new sc_signal<Tgeneral_address_t>;
    76   sc_signal<Tcontrol_t        > *  in_RESERVATION_STATION_IN_DATA_RA_VAL    = new sc_signal<Tcontrol_t        >;
    77   sc_signal<Tgeneral_data_t   > *  in_RESERVATION_STATION_IN_DATA_RA        = new sc_signal<Tgeneral_data_t   >;
    78 //sc_signal<Tcontrol_t        > *  in_RESERVATION_STATION_IN_READ_RB        = new sc_signal<Tcontrol_t        >;
    79   sc_signal<Tgeneral_address_t> *  in_RESERVATION_STATION_IN_NUM_REG_RB     = new sc_signal<Tgeneral_address_t>;
    80   sc_signal<Tcontrol_t        > *  in_RESERVATION_STATION_IN_DATA_RB_VAL    = new sc_signal<Tcontrol_t        >;
    81   sc_signal<Tgeneral_data_t   > *  in_RESERVATION_STATION_IN_DATA_RB        = new sc_signal<Tgeneral_data_t   >;
    82 //sc_signal<Tcontrol_t        > *  in_RESERVATION_STATION_IN_READ_RC        = new sc_signal<Tcontrol_t        >;
    83   sc_signal<Tspecial_address_t> *  in_RESERVATION_STATION_IN_NUM_REG_RC     = new sc_signal<Tspecial_address_t>;
    84   sc_signal<Tcontrol_t        > *  in_RESERVATION_STATION_IN_DATA_RC_VAL    = new sc_signal<Tcontrol_t        >;
    85   sc_signal<Tspecial_data_t   > *  in_RESERVATION_STATION_IN_DATA_RC        = new sc_signal<Tspecial_data_t   >;
    86   sc_signal<Tcontrol_t        > *  in_RESERVATION_STATION_IN_WRITE_RD       = new sc_signal<Tcontrol_t        >;
    87   sc_signal<Tgeneral_address_t> *  in_RESERVATION_STATION_IN_NUM_REG_RD     = new sc_signal<Tgeneral_address_t>;
    88   sc_signal<Tcontrol_t        > *  in_RESERVATION_STATION_IN_WRITE_RE       = new sc_signal<Tcontrol_t        >;
    89   sc_signal<Tspecial_address_t> *  in_RESERVATION_STATION_IN_NUM_REG_RE     = new sc_signal<Tspecial_address_t>;
    90 
    91   sc_signal<Tcontrol_t        > ** out_RESERVATION_STATION_OUT_VAL         = new sc_signal<Tcontrol_t        > * [_param->_size_queue];
    92   sc_signal<Tcontrol_t        > **  in_RESERVATION_STATION_OUT_ACK         = new sc_signal<Tcontrol_t        > * [_param->_size_queue];
    93   sc_signal<Tcontext_t        > ** out_RESERVATION_STATION_OUT_CONTEXT_ID  = new sc_signal<Tcontext_t        > * [_param->_size_queue];
    94   sc_signal<Tpacket_t         > ** out_RESERVATION_STATION_OUT_PACKET_ID   = new sc_signal<Tpacket_t         > * [_param->_size_queue];
    95   sc_signal<Toperation_t      > ** out_RESERVATION_STATION_OUT_OPERATION   = new sc_signal<Toperation_t      > * [_param->_size_queue];
    96   sc_signal<Ttype_t           > ** out_RESERVATION_STATION_OUT_TYPE        = new sc_signal<Ttype_t           > * [_param->_size_queue];
    97   sc_signal<Tcontrol_t        > ** out_RESERVATION_STATION_OUT_HAS_IMMEDIAT= new sc_signal<Tcontrol_t        > * [_param->_size_queue];
    98   sc_signal<Tgeneral_data_t   > ** out_RESERVATION_STATION_OUT_IMMEDIAT    = new sc_signal<Tgeneral_data_t   > * [_param->_size_queue];
    99   sc_signal<Tgeneral_data_t   > ** out_RESERVATION_STATION_OUT_DATA_RA     = new sc_signal<Tgeneral_data_t   > * [_param->_size_queue];
    100   sc_signal<Tgeneral_data_t   > ** out_RESERVATION_STATION_OUT_DATA_RB     = new sc_signal<Tgeneral_data_t   > * [_param->_size_queue];
    101   sc_signal<Tspecial_data_t   > ** out_RESERVATION_STATION_OUT_DATA_RC     = new sc_signal<Tspecial_data_t   > * [_param->_size_queue];
    102   sc_signal<Tcontrol_t        > ** out_RESERVATION_STATION_OUT_WRITE_RD    = new sc_signal<Tcontrol_t        > * [_param->_size_queue];
    103   sc_signal<Tgeneral_address_t> ** out_RESERVATION_STATION_OUT_NUM_REG_RD  = new sc_signal<Tgeneral_address_t> * [_param->_size_queue];
    104   sc_signal<Tcontrol_t        > ** out_RESERVATION_STATION_OUT_WRITE_RE    = new sc_signal<Tcontrol_t        > * [_param->_size_queue];
    105   sc_signal<Tspecial_address_t> ** out_RESERVATION_STATION_OUT_NUM_REG_RE  = new sc_signal<Tspecial_address_t> * [_param->_size_queue];
     66  sc_signal<Tcontrol_t        > *  in_INSERT_VAL            = new sc_signal<Tcontrol_t        >;
     67  sc_signal<Tcontrol_t        > * out_INSERT_ACK            = new sc_signal<Tcontrol_t        >;
     68  sc_signal<Tcontext_t        > *  in_INSERT_CONTEXT_ID     = new sc_signal<Tcontext_t        >;
     69  sc_signal<Tcontext_t        > *  in_INSERT_FRONT_END_ID   = new sc_signal<Tcontext_t        >;
     70  sc_signal<Tcontext_t        > *  in_INSERT_OOO_ENGINE_ID  = new sc_signal<Tcontext_t        >;
     71  sc_signal<Tpacket_t         > *  in_INSERT_ROB_ID         = new sc_signal<Tpacket_t         >;
     72  sc_signal<Toperation_t      > *  in_INSERT_OPERATION      = new sc_signal<Toperation_t      >;
     73  sc_signal<Ttype_t           > *  in_INSERT_TYPE           = new sc_signal<Ttype_t           >;
     74  sc_signal<Tcontrol_t        > *  in_INSERT_HAS_IMMEDIAT   = new sc_signal<Tcontrol_t        >;
     75  sc_signal<Tgeneral_data_t   > *  in_INSERT_IMMEDIAT       = new sc_signal<Tgeneral_data_t   >;
     76//sc_signal<Tcontrol_t        > *  in_INSERT_READ_RA        = new sc_signal<Tcontrol_t        >;
     77  sc_signal<Tgeneral_address_t> *  in_INSERT_NUM_REG_RA     = new sc_signal<Tgeneral_address_t>;
     78  sc_signal<Tcontrol_t        > *  in_INSERT_DATA_RA_VAL    = new sc_signal<Tcontrol_t        >;
     79  sc_signal<Tgeneral_data_t   > *  in_INSERT_DATA_RA        = new sc_signal<Tgeneral_data_t   >;
     80//sc_signal<Tcontrol_t        > *  in_INSERT_READ_RB        = new sc_signal<Tcontrol_t        >;
     81  sc_signal<Tgeneral_address_t> *  in_INSERT_NUM_REG_RB     = new sc_signal<Tgeneral_address_t>;
     82  sc_signal<Tcontrol_t        > *  in_INSERT_DATA_RB_VAL    = new sc_signal<Tcontrol_t        >;
     83  sc_signal<Tgeneral_data_t   > *  in_INSERT_DATA_RB        = new sc_signal<Tgeneral_data_t   >;
     84//sc_signal<Tcontrol_t        > *  in_INSERT_READ_RC        = new sc_signal<Tcontrol_t        >;
     85  sc_signal<Tspecial_address_t> *  in_INSERT_NUM_REG_RC     = new sc_signal<Tspecial_address_t>;
     86  sc_signal<Tcontrol_t        > *  in_INSERT_DATA_RC_VAL    = new sc_signal<Tcontrol_t        >;
     87  sc_signal<Tspecial_data_t   > *  in_INSERT_DATA_RC        = new sc_signal<Tspecial_data_t   >;
     88  sc_signal<Tcontrol_t        > *  in_INSERT_WRITE_RD       = new sc_signal<Tcontrol_t        >;
     89  sc_signal<Tgeneral_address_t> *  in_INSERT_NUM_REG_RD     = new sc_signal<Tgeneral_address_t>;
     90  sc_signal<Tcontrol_t        > *  in_INSERT_WRITE_RE       = new sc_signal<Tcontrol_t        >;
     91  sc_signal<Tspecial_address_t> *  in_INSERT_NUM_REG_RE     = new sc_signal<Tspecial_address_t>;
     92
     93  sc_signal<Tcontrol_t        > ** out_RETIRE_VAL            = new sc_signal<Tcontrol_t        > * [_param->_nb_inst_retire];
     94  sc_signal<Tcontrol_t        > **  in_RETIRE_ACK            = new sc_signal<Tcontrol_t        > * [_param->_nb_inst_retire];
     95  sc_signal<Tcontext_t        > ** out_RETIRE_CONTEXT_ID     = new sc_signal<Tcontext_t        > * [_param->_nb_inst_retire];
     96  sc_signal<Tcontext_t        > ** out_RETIRE_FRONT_END_ID   = new sc_signal<Tcontext_t        > * [_param->_nb_inst_retire];
     97  sc_signal<Tcontext_t        > ** out_RETIRE_OOO_ENGINE_ID  = new sc_signal<Tcontext_t        > * [_param->_nb_inst_retire];
     98  sc_signal<Tpacket_t         > ** out_RETIRE_ROB_ID         = new sc_signal<Tpacket_t         > * [_param->_nb_inst_retire];
     99  sc_signal<Toperation_t      > ** out_RETIRE_OPERATION      = new sc_signal<Toperation_t      > * [_param->_nb_inst_retire];
     100  sc_signal<Ttype_t           > ** out_RETIRE_TYPE           = new sc_signal<Ttype_t           > * [_param->_nb_inst_retire];
     101  sc_signal<Tcontrol_t        > ** out_RETIRE_HAS_IMMEDIAT   = new sc_signal<Tcontrol_t        > * [_param->_nb_inst_retire];
     102  sc_signal<Tgeneral_data_t   > ** out_RETIRE_IMMEDIAT       = new sc_signal<Tgeneral_data_t   > * [_param->_nb_inst_retire];
     103  sc_signal<Tgeneral_data_t   > ** out_RETIRE_DATA_RA        = new sc_signal<Tgeneral_data_t   > * [_param->_nb_inst_retire];
     104  sc_signal<Tgeneral_data_t   > ** out_RETIRE_DATA_RB        = new sc_signal<Tgeneral_data_t   > * [_param->_nb_inst_retire];
     105  sc_signal<Tspecial_data_t   > ** out_RETIRE_DATA_RC        = new sc_signal<Tspecial_data_t   > * [_param->_nb_inst_retire];
     106  sc_signal<Tcontrol_t        > ** out_RETIRE_WRITE_RD       = new sc_signal<Tcontrol_t        > * [_param->_nb_inst_retire];
     107  sc_signal<Tgeneral_address_t> ** out_RETIRE_NUM_REG_RD     = new sc_signal<Tgeneral_address_t> * [_param->_nb_inst_retire];
     108  sc_signal<Tcontrol_t        > ** out_RETIRE_WRITE_RE       = new sc_signal<Tcontrol_t        > * [_param->_nb_inst_retire];
     109  sc_signal<Tspecial_address_t> ** out_RETIRE_NUM_REG_RE     = new sc_signal<Tspecial_address_t> * [_param->_nb_inst_retire];
    106110   
    107   for (uint32_t i=0; i<_param->_size_queue; i++)
     111  for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
    108112    {
    109       out_RESERVATION_STATION_OUT_VAL          [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
    110        in_RESERVATION_STATION_OUT_ACK          [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
    111       out_RESERVATION_STATION_OUT_CONTEXT_ID   [i] = new sc_signal<Tcontext_t        > (rename.c_str());
    112       out_RESERVATION_STATION_OUT_PACKET_ID    [i] = new sc_signal<Tpacket_t         > (rename.c_str());
    113       out_RESERVATION_STATION_OUT_OPERATION    [i] = new sc_signal<Toperation_t      > (rename.c_str());
    114       out_RESERVATION_STATION_OUT_TYPE         [i] = new sc_signal<Ttype_t           > (rename.c_str());
    115       out_RESERVATION_STATION_OUT_HAS_IMMEDIAT [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
    116       out_RESERVATION_STATION_OUT_IMMEDIAT     [i] = new sc_signal<Tgeneral_data_t   > (rename.c_str());
    117       out_RESERVATION_STATION_OUT_DATA_RA      [i] = new sc_signal<Tgeneral_data_t   > (rename.c_str());
    118       out_RESERVATION_STATION_OUT_DATA_RB      [i] = new sc_signal<Tgeneral_data_t   > (rename.c_str());
    119       out_RESERVATION_STATION_OUT_DATA_RC      [i] = new sc_signal<Tspecial_data_t   > (rename.c_str());
    120       out_RESERVATION_STATION_OUT_WRITE_RD     [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
    121       out_RESERVATION_STATION_OUT_NUM_REG_RD   [i] = new sc_signal<Tgeneral_address_t> (rename.c_str());
    122       out_RESERVATION_STATION_OUT_WRITE_RE     [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
    123       out_RESERVATION_STATION_OUT_NUM_REG_RE   [i] = new sc_signal<Tspecial_address_t> (rename.c_str());
     113      out_RETIRE_VAL             [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
     114       in_RETIRE_ACK             [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
     115      out_RETIRE_CONTEXT_ID      [i] = new sc_signal<Tcontext_t        > (rename.c_str());
     116      out_RETIRE_FRONT_END_ID    [i] = new sc_signal<Tcontext_t        > (rename.c_str());
     117      out_RETIRE_OOO_ENGINE_ID   [i] = new sc_signal<Tcontext_t        > (rename.c_str());
     118      out_RETIRE_ROB_ID          [i] = new sc_signal<Tpacket_t         > (rename.c_str());
     119      out_RETIRE_OPERATION       [i] = new sc_signal<Toperation_t      > (rename.c_str());
     120      out_RETIRE_TYPE            [i] = new sc_signal<Ttype_t           > (rename.c_str());
     121      out_RETIRE_HAS_IMMEDIAT    [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
     122      out_RETIRE_IMMEDIAT        [i] = new sc_signal<Tgeneral_data_t   > (rename.c_str());
     123      out_RETIRE_DATA_RA         [i] = new sc_signal<Tgeneral_data_t   > (rename.c_str());
     124      out_RETIRE_DATA_RB         [i] = new sc_signal<Tgeneral_data_t   > (rename.c_str());
     125      out_RETIRE_DATA_RC         [i] = new sc_signal<Tspecial_data_t   > (rename.c_str());
     126      out_RETIRE_WRITE_RD        [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
     127      out_RETIRE_NUM_REG_RD      [i] = new sc_signal<Tgeneral_address_t> (rename.c_str());
     128      out_RETIRE_WRITE_RE        [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
     129      out_RETIRE_NUM_REG_RE      [i] = new sc_signal<Tspecial_address_t> (rename.c_str());
    124130    }
    125131
    126   sc_signal<Tcontrol_t        > ** in_GPR_WRITE_VAL        = new sc_signal<Tcontrol_t        > * [_param->_nb_gpr_write];
    127   sc_signal<Tcontext_t        > ** in_GPR_WRITE_CONTEXT_ID = new sc_signal<Tcontext_t        > * [_param->_nb_gpr_write];
    128   sc_signal<Tgeneral_address_t> ** in_GPR_WRITE_NUM_REG    = new sc_signal<Tgeneral_address_t> * [_param->_nb_gpr_write];
    129   sc_signal<Tgeneral_data_t   > ** in_GPR_WRITE_DATA       = new sc_signal<Tgeneral_data_t   > * [_param->_nb_gpr_write];
     132  sc_signal<Tcontrol_t        > ** in_GPR_WRITE_VAL           = new sc_signal<Tcontrol_t        > * [_param->_nb_gpr_write];
     133  sc_signal<Tcontext_t        > ** in_GPR_WRITE_OOO_ENGINE_ID = new sc_signal<Tcontext_t        > * [_param->_nb_gpr_write];
     134  sc_signal<Tgeneral_address_t> ** in_GPR_WRITE_NUM_REG       = new sc_signal<Tgeneral_address_t> * [_param->_nb_gpr_write];
     135  sc_signal<Tgeneral_data_t   > ** in_GPR_WRITE_DATA          = new sc_signal<Tgeneral_data_t   > * [_param->_nb_gpr_write];
    130136   
    131137  for (uint32_t i=0; i<_param->_nb_gpr_write; i++)
    132138    {
    133       in_GPR_WRITE_VAL        [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
    134       in_GPR_WRITE_CONTEXT_ID [i] = new sc_signal<Tcontext_t        > (rename.c_str());
    135       in_GPR_WRITE_NUM_REG    [i] = new sc_signal<Tgeneral_address_t> (rename.c_str());
    136       in_GPR_WRITE_DATA       [i] = new sc_signal<Tgeneral_data_t   > (rename.c_str());
     139      in_GPR_WRITE_VAL           [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
     140      in_GPR_WRITE_OOO_ENGINE_ID [i] = new sc_signal<Tcontext_t        > (rename.c_str());
     141      in_GPR_WRITE_NUM_REG       [i] = new sc_signal<Tgeneral_address_t> (rename.c_str());
     142      in_GPR_WRITE_DATA          [i] = new sc_signal<Tgeneral_data_t   > (rename.c_str());
    137143    }
    138144 
    139   sc_signal<Tcontrol_t        > ** in_SPR_WRITE_VAL       = new sc_signal<Tcontrol_t        > * [_param->_nb_spr_write];
    140   sc_signal<Tcontext_t        > ** in_SPR_WRITE_CONTEXT_ID= new sc_signal<Tcontext_t        > * [_param->_nb_spr_write];
    141   sc_signal<Tspecial_address_t> ** in_SPR_WRITE_NUM_REG   = new sc_signal<Tspecial_address_t> * [_param->_nb_spr_write];
    142   sc_signal<Tspecial_data_t   > ** in_SPR_WRITE_DATA      = new sc_signal<Tspecial_data_t   > * [_param->_nb_spr_write];
     145  sc_signal<Tcontrol_t        > ** in_SPR_WRITE_VAL          = new sc_signal<Tcontrol_t        > * [_param->_nb_spr_write];
     146  sc_signal<Tcontext_t        > ** in_SPR_WRITE_OOO_ENGINE_ID= new sc_signal<Tcontext_t        > * [_param->_nb_spr_write];
     147  sc_signal<Tspecial_address_t> ** in_SPR_WRITE_NUM_REG      = new sc_signal<Tspecial_address_t> * [_param->_nb_spr_write];
     148  sc_signal<Tspecial_data_t   > ** in_SPR_WRITE_DATA         = new sc_signal<Tspecial_data_t   > * [_param->_nb_spr_write];
    143149   
    144150  for (uint32_t i=0; i<_param->_nb_spr_write; i++)
    145151    {
    146       in_SPR_WRITE_VAL        [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
    147       in_SPR_WRITE_CONTEXT_ID [i] = new sc_signal<Tcontext_t        > (rename.c_str());
    148       in_SPR_WRITE_NUM_REG    [i] = new sc_signal<Tspecial_address_t> (rename.c_str());
    149       in_SPR_WRITE_DATA       [i] = new sc_signal<Tspecial_data_t   > (rename.c_str());
     152      in_SPR_WRITE_VAL           [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
     153      in_SPR_WRITE_OOO_ENGINE_ID [i] = new sc_signal<Tcontext_t        > (rename.c_str());
     154      in_SPR_WRITE_NUM_REG       [i] = new sc_signal<Tspecial_address_t> (rename.c_str());
     155      in_SPR_WRITE_DATA          [i] = new sc_signal<Tspecial_data_t   > (rename.c_str());
    150156    }
    151157
    152   sc_signal<Tcontext_t        > ** in_BYPASS_WRITE_CONTEXT_ID  = new sc_signal<Tcontext_t        > * [_param->_nb_bypass_write];
    153   sc_signal<Tcontrol_t        > ** in_BYPASS_WRITE_GPR_VAL     = new sc_signal<Tcontrol_t        > * [_param->_nb_bypass_write];
    154   sc_signal<Tgeneral_address_t> ** in_BYPASS_WRITE_GPR_NUM_REG = new sc_signal<Tgeneral_address_t> * [_param->_nb_bypass_write];
    155   sc_signal<Tgeneral_data_t   > ** in_BYPASS_WRITE_GPR_DATA    = new sc_signal<Tgeneral_data_t   > * [_param->_nb_bypass_write];
    156   sc_signal<Tcontrol_t        > ** in_BYPASS_WRITE_SPR_VAL     = new sc_signal<Tcontrol_t        > * [_param->_nb_bypass_write];
    157   sc_signal<Tspecial_address_t> ** in_BYPASS_WRITE_SPR_NUM_REG = new sc_signal<Tspecial_address_t> * [_param->_nb_bypass_write];
    158   sc_signal<Tspecial_data_t   > ** in_BYPASS_WRITE_SPR_DATA    = new sc_signal<Tspecial_data_t   > * [_param->_nb_bypass_write];
     158  sc_signal<Tcontext_t        > ** in_BYPASS_WRITE_OOO_ENGINE_ID  = new sc_signal<Tcontext_t        > * [_param->_nb_bypass_write];
     159  sc_signal<Tcontrol_t        > ** in_BYPASS_WRITE_GPR_VAL        = new sc_signal<Tcontrol_t        > * [_param->_nb_bypass_write];
     160  sc_signal<Tgeneral_address_t> ** in_BYPASS_WRITE_GPR_NUM_REG    = new sc_signal<Tgeneral_address_t> * [_param->_nb_bypass_write];
     161  sc_signal<Tgeneral_data_t   > ** in_BYPASS_WRITE_GPR_DATA       = new sc_signal<Tgeneral_data_t   > * [_param->_nb_bypass_write];
     162  sc_signal<Tcontrol_t        > ** in_BYPASS_WRITE_SPR_VAL        = new sc_signal<Tcontrol_t        > * [_param->_nb_bypass_write];
     163  sc_signal<Tspecial_address_t> ** in_BYPASS_WRITE_SPR_NUM_REG    = new sc_signal<Tspecial_address_t> * [_param->_nb_bypass_write];
     164  sc_signal<Tspecial_data_t   > ** in_BYPASS_WRITE_SPR_DATA       = new sc_signal<Tspecial_data_t   > * [_param->_nb_bypass_write];
    159165
    160166  for (uint32_t i=0; i<_param->_nb_bypass_write; i++)
    161167    {
    162       in_BYPASS_WRITE_CONTEXT_ID [i] = new sc_signal<Tcontext_t        > (rename.c_str());
    163       in_BYPASS_WRITE_GPR_VAL    [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
    164       in_BYPASS_WRITE_GPR_NUM_REG[i] = new sc_signal<Tgeneral_address_t> (rename.c_str());
    165       in_BYPASS_WRITE_GPR_DATA   [i] = new sc_signal<Tgeneral_data_t   > (rename.c_str());
    166       in_BYPASS_WRITE_SPR_VAL    [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
    167       in_BYPASS_WRITE_SPR_NUM_REG[i] = new sc_signal<Tspecial_address_t> (rename.c_str());
    168       in_BYPASS_WRITE_SPR_DATA   [i] = new sc_signal<Tspecial_data_t   > (rename.c_str());
     168      in_BYPASS_WRITE_OOO_ENGINE_ID [i] = new sc_signal<Tcontext_t        > (rename.c_str());
     169      in_BYPASS_WRITE_GPR_VAL       [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
     170      in_BYPASS_WRITE_GPR_NUM_REG   [i] = new sc_signal<Tgeneral_address_t> (rename.c_str());
     171      in_BYPASS_WRITE_GPR_DATA      [i] = new sc_signal<Tgeneral_data_t   > (rename.c_str());
     172      in_BYPASS_WRITE_SPR_VAL       [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
     173      in_BYPASS_WRITE_SPR_NUM_REG   [i] = new sc_signal<Tspecial_address_t> (rename.c_str());
     174      in_BYPASS_WRITE_SPR_DATA      [i] = new sc_signal<Tspecial_data_t   > (rename.c_str());
    169175    }
    170   sc_signal<Tcontrol_t        > ** in_BYPASS_MEMORY_VAL         = new sc_signal<Tcontrol_t        > * [_param->_nb_bypass_memory];
    171   sc_signal<Tcontext_t        > ** in_BYPASS_MEMORY_CONTEXT_ID  = new sc_signal<Tcontext_t        > * [_param->_nb_bypass_memory];
    172   sc_signal<Tgeneral_address_t> ** in_BYPASS_MEMORY_NUM_REG     = new sc_signal<Tgeneral_address_t> * [_param->_nb_bypass_memory];
    173   sc_signal<Tgeneral_data_t   > ** in_BYPASS_MEMORY_DATA        = new sc_signal<Tgeneral_data_t   > * [_param->_nb_bypass_memory];
     176  sc_signal<Tcontrol_t        > ** in_BYPASS_MEMORY_VAL            = new sc_signal<Tcontrol_t        > * [_param->_nb_bypass_memory];
     177  sc_signal<Tcontext_t        > ** in_BYPASS_MEMORY_OOO_ENGINE_ID  = new sc_signal<Tcontext_t        > * [_param->_nb_bypass_memory];
     178  sc_signal<Tgeneral_address_t> ** in_BYPASS_MEMORY_NUM_REG        = new sc_signal<Tgeneral_address_t> * [_param->_nb_bypass_memory];
     179  sc_signal<Tgeneral_data_t   > ** in_BYPASS_MEMORY_DATA           = new sc_signal<Tgeneral_data_t   > * [_param->_nb_bypass_memory];
    174180
    175181  for (uint32_t i=0; i<_param->_nb_bypass_memory; i++)
    176182    {
    177       in_BYPASS_MEMORY_VAL        [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
    178       in_BYPASS_MEMORY_CONTEXT_ID [i] = new sc_signal<Tcontext_t        > (rename.c_str());
    179       in_BYPASS_MEMORY_NUM_REG    [i] = new sc_signal<Tgeneral_address_t> (rename.c_str());
    180       in_BYPASS_MEMORY_DATA       [i] = new sc_signal<Tgeneral_data_t   > (rename.c_str());
     183      in_BYPASS_MEMORY_VAL           [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
     184      in_BYPASS_MEMORY_OOO_ENGINE_ID [i] = new sc_signal<Tcontext_t        > (rename.c_str());
     185      in_BYPASS_MEMORY_NUM_REG       [i] = new sc_signal<Tgeneral_address_t> (rename.c_str());
     186      in_BYPASS_MEMORY_DATA          [i] = new sc_signal<Tgeneral_data_t   > (rename.c_str());
    181187    }
    182188   
     
    190196  (*(_Reservation_station->in_NRESET))       (*(in_NRESET));
    191197
    192   (*(_Reservation_station-> in_RESERVATION_STATION_IN_VAL              )) (*( in_RESERVATION_STATION_IN_VAL              ));
    193   (*(_Reservation_station->out_RESERVATION_STATION_IN_ACK              )) (*(out_RESERVATION_STATION_IN_ACK              ));
    194   (*(_Reservation_station-> in_RESERVATION_STATION_IN_CONTEXT_ID       )) (*( in_RESERVATION_STATION_IN_CONTEXT_ID       ));
    195   (*(_Reservation_station-> in_RESERVATION_STATION_IN_PACKET_ID        )) (*( in_RESERVATION_STATION_IN_PACKET_ID        ));
    196   (*(_Reservation_station-> in_RESERVATION_STATION_IN_OPERATION        )) (*( in_RESERVATION_STATION_IN_OPERATION        ));
    197   (*(_Reservation_station-> in_RESERVATION_STATION_IN_TYPE             )) (*( in_RESERVATION_STATION_IN_TYPE             ));
    198   (*(_Reservation_station-> in_RESERVATION_STATION_IN_HAS_IMMEDIAT     )) (*( in_RESERVATION_STATION_IN_HAS_IMMEDIAT     ));
    199   (*(_Reservation_station-> in_RESERVATION_STATION_IN_IMMEDIAT         )) (*( in_RESERVATION_STATION_IN_IMMEDIAT         ));
    200 //   (*(_Reservation_station-> in_RESERVATION_STATION_IN_READ_RA          )) (*( in_RESERVATION_STATION_IN_READ_RA          ));
    201   (*(_Reservation_station-> in_RESERVATION_STATION_IN_NUM_REG_RA       )) (*( in_RESERVATION_STATION_IN_NUM_REG_RA       ));
    202   (*(_Reservation_station-> in_RESERVATION_STATION_IN_DATA_RA_VAL      )) (*( in_RESERVATION_STATION_IN_DATA_RA_VAL      ));
    203   (*(_Reservation_station-> in_RESERVATION_STATION_IN_DATA_RA          )) (*( in_RESERVATION_STATION_IN_DATA_RA          ));
    204 //   (*(_Reservation_station-> in_RESERVATION_STATION_IN_READ_RB          )) (*( in_RESERVATION_STATION_IN_READ_RB          ));
    205   (*(_Reservation_station-> in_RESERVATION_STATION_IN_NUM_REG_RB       )) (*( in_RESERVATION_STATION_IN_NUM_REG_RB       ));
    206   (*(_Reservation_station-> in_RESERVATION_STATION_IN_DATA_RB_VAL      )) (*( in_RESERVATION_STATION_IN_DATA_RB_VAL      ));
    207   (*(_Reservation_station-> in_RESERVATION_STATION_IN_DATA_RB          )) (*( in_RESERVATION_STATION_IN_DATA_RB          ));
    208 //   (*(_Reservation_station-> in_RESERVATION_STATION_IN_READ_RC          )) (*( in_RESERVATION_STATION_IN_READ_RC          ));
    209   (*(_Reservation_station-> in_RESERVATION_STATION_IN_NUM_REG_RC       )) (*( in_RESERVATION_STATION_IN_NUM_REG_RC       ));
    210   (*(_Reservation_station-> in_RESERVATION_STATION_IN_DATA_RC_VAL      )) (*( in_RESERVATION_STATION_IN_DATA_RC_VAL      ));
    211   (*(_Reservation_station-> in_RESERVATION_STATION_IN_DATA_RC          )) (*( in_RESERVATION_STATION_IN_DATA_RC          ));
    212   (*(_Reservation_station-> in_RESERVATION_STATION_IN_WRITE_RD         )) (*( in_RESERVATION_STATION_IN_WRITE_RD         ));
    213   (*(_Reservation_station-> in_RESERVATION_STATION_IN_NUM_REG_RD       )) (*( in_RESERVATION_STATION_IN_NUM_REG_RD       ));
    214   (*(_Reservation_station-> in_RESERVATION_STATION_IN_WRITE_RE         )) (*( in_RESERVATION_STATION_IN_WRITE_RE         ));
    215   (*(_Reservation_station-> in_RESERVATION_STATION_IN_NUM_REG_RE       )) (*( in_RESERVATION_STATION_IN_NUM_REG_RE       ));
    216 
    217     for (uint32_t i=0; i<_param->_size_queue; i++)
     198  (*(_Reservation_station-> in_INSERT_VAL              )) (*( in_INSERT_VAL              ));
     199  (*(_Reservation_station->out_INSERT_ACK              )) (*(out_INSERT_ACK              ));
     200  if (_param->_have_port_context_id)
     201  (*(_Reservation_station-> in_INSERT_CONTEXT_ID       )) (*( in_INSERT_CONTEXT_ID       ));
     202  if (_param->_have_port_front_end_id)
     203  (*(_Reservation_station-> in_INSERT_FRONT_END_ID     )) (*( in_INSERT_FRONT_END_ID     ));
     204  if (_param->_have_port_ooo_engine_id)
     205  (*(_Reservation_station-> in_INSERT_OOO_ENGINE_ID    )) (*( in_INSERT_OOO_ENGINE_ID    ));
     206  if (_param->_have_port_rob_id)
     207  (*(_Reservation_station-> in_INSERT_ROB_ID           )) (*( in_INSERT_ROB_ID           ));
     208  (*(_Reservation_station-> in_INSERT_OPERATION        )) (*( in_INSERT_OPERATION        ));
     209  (*(_Reservation_station-> in_INSERT_TYPE             )) (*( in_INSERT_TYPE             ));
     210  (*(_Reservation_station-> in_INSERT_HAS_IMMEDIAT     )) (*( in_INSERT_HAS_IMMEDIAT     ));
     211  (*(_Reservation_station-> in_INSERT_IMMEDIAT         )) (*( in_INSERT_IMMEDIAT         ));
     212//   (*(_Reservation_station-> in_INSERT_READ_RA          )) (*( in_INSERT_READ_RA          ));
     213  (*(_Reservation_station-> in_INSERT_NUM_REG_RA       )) (*( in_INSERT_NUM_REG_RA       ));
     214  (*(_Reservation_station-> in_INSERT_DATA_RA_VAL      )) (*( in_INSERT_DATA_RA_VAL      ));
     215  (*(_Reservation_station-> in_INSERT_DATA_RA          )) (*( in_INSERT_DATA_RA          ));
     216//   (*(_Reservation_station-> in_INSERT_READ_RB          )) (*( in_INSERT_READ_RB          ));
     217  (*(_Reservation_station-> in_INSERT_NUM_REG_RB       )) (*( in_INSERT_NUM_REG_RB       ));
     218  (*(_Reservation_station-> in_INSERT_DATA_RB_VAL      )) (*( in_INSERT_DATA_RB_VAL      ));
     219  (*(_Reservation_station-> in_INSERT_DATA_RB          )) (*( in_INSERT_DATA_RB          ));
     220//   (*(_Reservation_station-> in_INSERT_READ_RC          )) (*( in_INSERT_READ_RC          ));
     221  (*(_Reservation_station-> in_INSERT_NUM_REG_RC       )) (*( in_INSERT_NUM_REG_RC       ));
     222  (*(_Reservation_station-> in_INSERT_DATA_RC_VAL      )) (*( in_INSERT_DATA_RC_VAL      ));
     223  (*(_Reservation_station-> in_INSERT_DATA_RC          )) (*( in_INSERT_DATA_RC          ));
     224  (*(_Reservation_station-> in_INSERT_WRITE_RD         )) (*( in_INSERT_WRITE_RD         ));
     225  (*(_Reservation_station-> in_INSERT_NUM_REG_RD       )) (*( in_INSERT_NUM_REG_RD       ));
     226  (*(_Reservation_station-> in_INSERT_WRITE_RE         )) (*( in_INSERT_WRITE_RE         ));
     227  (*(_Reservation_station-> in_INSERT_NUM_REG_RE       )) (*( in_INSERT_NUM_REG_RE       ));
     228
     229    for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
    218230      {
    219   (*(_Reservation_station->out_RESERVATION_STATION_OUT_VAL          [i])) (*(out_RESERVATION_STATION_OUT_VAL          [i]));
    220   (*(_Reservation_station-> in_RESERVATION_STATION_OUT_ACK          [i])) (*( in_RESERVATION_STATION_OUT_ACK          [i]));
    221   (*(_Reservation_station->out_RESERVATION_STATION_OUT_CONTEXT_ID   [i])) (*(out_RESERVATION_STATION_OUT_CONTEXT_ID   [i]));
    222   (*(_Reservation_station->out_RESERVATION_STATION_OUT_PACKET_ID    [i])) (*(out_RESERVATION_STATION_OUT_PACKET_ID    [i]));
    223   (*(_Reservation_station->out_RESERVATION_STATION_OUT_OPERATION    [i])) (*(out_RESERVATION_STATION_OUT_OPERATION    [i]));
    224   (*(_Reservation_station->out_RESERVATION_STATION_OUT_TYPE         [i])) (*(out_RESERVATION_STATION_OUT_TYPE         [i]));
    225   (*(_Reservation_station->out_RESERVATION_STATION_OUT_HAS_IMMEDIAT [i])) (*(out_RESERVATION_STATION_OUT_HAS_IMMEDIAT [i]));
    226   (*(_Reservation_station->out_RESERVATION_STATION_OUT_IMMEDIAT     [i])) (*(out_RESERVATION_STATION_OUT_IMMEDIAT     [i]));
    227   (*(_Reservation_station->out_RESERVATION_STATION_OUT_DATA_RA      [i])) (*(out_RESERVATION_STATION_OUT_DATA_RA      [i]));
    228   (*(_Reservation_station->out_RESERVATION_STATION_OUT_DATA_RB      [i])) (*(out_RESERVATION_STATION_OUT_DATA_RB      [i]));
    229   (*(_Reservation_station->out_RESERVATION_STATION_OUT_DATA_RC      [i])) (*(out_RESERVATION_STATION_OUT_DATA_RC      [i]));
    230   (*(_Reservation_station->out_RESERVATION_STATION_OUT_WRITE_RD     [i])) (*(out_RESERVATION_STATION_OUT_WRITE_RD     [i]));
    231   (*(_Reservation_station->out_RESERVATION_STATION_OUT_NUM_REG_RD   [i])) (*(out_RESERVATION_STATION_OUT_NUM_REG_RD   [i]));
    232   (*(_Reservation_station->out_RESERVATION_STATION_OUT_WRITE_RE     [i])) (*(out_RESERVATION_STATION_OUT_WRITE_RE     [i]));
    233   (*(_Reservation_station->out_RESERVATION_STATION_OUT_NUM_REG_RE   [i])) (*(out_RESERVATION_STATION_OUT_NUM_REG_RE   [i]));
     231  (*(_Reservation_station->out_RETIRE_VAL            [i])) (*(out_RETIRE_VAL            [i]));
     232  (*(_Reservation_station-> in_RETIRE_ACK            [i])) (*( in_RETIRE_ACK            [i]));
     233  if (_param->_have_port_context_id)
     234  (*(_Reservation_station->out_RETIRE_CONTEXT_ID     [i])) (*(out_RETIRE_CONTEXT_ID     [i]));
     235  if (_param->_have_port_front_end_id)
     236  (*(_Reservation_station->out_RETIRE_FRONT_END_ID   [i])) (*(out_RETIRE_FRONT_END_ID   [i]));
     237  if (_param->_have_port_ooo_engine_id)
     238  (*(_Reservation_station->out_RETIRE_OOO_ENGINE_ID  [i])) (*(out_RETIRE_OOO_ENGINE_ID  [i]));
     239  if (_param->_have_port_rob_id)
     240  (*(_Reservation_station->out_RETIRE_ROB_ID         [i])) (*(out_RETIRE_ROB_ID         [i]));
     241  (*(_Reservation_station->out_RETIRE_OPERATION      [i])) (*(out_RETIRE_OPERATION      [i]));
     242  (*(_Reservation_station->out_RETIRE_TYPE           [i])) (*(out_RETIRE_TYPE           [i]));
     243  (*(_Reservation_station->out_RETIRE_HAS_IMMEDIAT   [i])) (*(out_RETIRE_HAS_IMMEDIAT   [i]));
     244  (*(_Reservation_station->out_RETIRE_IMMEDIAT       [i])) (*(out_RETIRE_IMMEDIAT       [i]));
     245  (*(_Reservation_station->out_RETIRE_DATA_RA        [i])) (*(out_RETIRE_DATA_RA        [i]));
     246  (*(_Reservation_station->out_RETIRE_DATA_RB        [i])) (*(out_RETIRE_DATA_RB        [i]));
     247  (*(_Reservation_station->out_RETIRE_DATA_RC        [i])) (*(out_RETIRE_DATA_RC        [i]));
     248  (*(_Reservation_station->out_RETIRE_WRITE_RD       [i])) (*(out_RETIRE_WRITE_RD       [i]));
     249  (*(_Reservation_station->out_RETIRE_NUM_REG_RD     [i])) (*(out_RETIRE_NUM_REG_RD     [i]));
     250  (*(_Reservation_station->out_RETIRE_WRITE_RE       [i])) (*(out_RETIRE_WRITE_RE       [i]));
     251  (*(_Reservation_station->out_RETIRE_NUM_REG_RE     [i])) (*(out_RETIRE_NUM_REG_RE     [i]));
    234252      }
    235253    for (uint32_t i=0; i<_param->_nb_gpr_write; i++)
    236254      {
    237255  (*(_Reservation_station-> in_GPR_WRITE_VAL                        [i])) (*( in_GPR_WRITE_VAL                        [i]));
    238   (*(_Reservation_station-> in_GPR_WRITE_CONTEXT_ID                 [i])) (*( in_GPR_WRITE_CONTEXT_ID                 [i]));
     256  if (_param->_have_port_ooo_engine_id)
     257  (*(_Reservation_station-> in_GPR_WRITE_OOO_ENGINE_ID              [i])) (*( in_GPR_WRITE_OOO_ENGINE_ID              [i]));
    239258  (*(_Reservation_station-> in_GPR_WRITE_NUM_REG                    [i])) (*( in_GPR_WRITE_NUM_REG                    [i]));
    240259  (*(_Reservation_station-> in_GPR_WRITE_DATA                       [i])) (*( in_GPR_WRITE_DATA                       [i]));
     
    243262      {
    244263  (*(_Reservation_station-> in_SPR_WRITE_VAL                        [i])) (*( in_SPR_WRITE_VAL                        [i]));
    245   (*(_Reservation_station-> in_SPR_WRITE_CONTEXT_ID                 [i])) (*( in_SPR_WRITE_CONTEXT_ID                 [i]));
     264  if (_param->_have_port_ooo_engine_id)
     265  (*(_Reservation_station-> in_SPR_WRITE_OOO_ENGINE_ID              [i])) (*( in_SPR_WRITE_OOO_ENGINE_ID              [i]));
    246266  (*(_Reservation_station-> in_SPR_WRITE_NUM_REG                    [i])) (*( in_SPR_WRITE_NUM_REG                    [i]));
    247267  (*(_Reservation_station-> in_SPR_WRITE_DATA                       [i])) (*( in_SPR_WRITE_DATA                       [i]));
     
    249269    for (uint32_t i=0; i<_param->_nb_bypass_write; i++)
    250270      {
    251   (*(_Reservation_station-> in_BYPASS_WRITE_CONTEXT_ID              [i])) (*( in_BYPASS_WRITE_CONTEXT_ID              [i]));
     271  if (_param->_have_port_ooo_engine_id)
     272  (*(_Reservation_station-> in_BYPASS_WRITE_OOO_ENGINE_ID           [i])) (*( in_BYPASS_WRITE_OOO_ENGINE_ID           [i]));
    252273  (*(_Reservation_station-> in_BYPASS_WRITE_GPR_VAL                 [i])) (*( in_BYPASS_WRITE_GPR_VAL                 [i]));
    253274  (*(_Reservation_station-> in_BYPASS_WRITE_GPR_NUM_REG             [i])) (*( in_BYPASS_WRITE_GPR_NUM_REG             [i]));
     
    260281      {
    261282  (*(_Reservation_station-> in_BYPASS_MEMORY_VAL                    [i])) (*( in_BYPASS_MEMORY_VAL                    [i]));
    262   (*(_Reservation_station-> in_BYPASS_MEMORY_CONTEXT_ID             [i])) (*( in_BYPASS_MEMORY_CONTEXT_ID             [i]));
     283  if (_param->_have_port_ooo_engine_id)
     284  (*(_Reservation_station-> in_BYPASS_MEMORY_OOO_ENGINE_ID          [i])) (*( in_BYPASS_MEMORY_OOO_ENGINE_ID          [i]));
    263285  (*(_Reservation_station-> in_BYPASS_MEMORY_NUM_REG                [i])) (*( in_BYPASS_MEMORY_NUM_REG                [i]));
    264286  (*(_Reservation_station-> in_BYPASS_MEMORY_DATA                   [i])) (*( in_BYPASS_MEMORY_DATA                   [i]));
     
    275297
    276298  const uint32_t nb_request = _param->_nb_packet;
    277 //const uint32_t seed = 0;
    278   const uint32_t seed = static_cast<uint32_t>(time(NULL));
     299  const uint32_t seed = 0;
     300//const uint32_t seed = static_cast<uint32_t>(time(NULL));
    279301  srand(seed);
    280302
    281   Tcontext_t         _context_id [nb_request];
     303  Tcontext_t         _ooo_engine_id [nb_request];
    282304  Tcontrol_t         _read_ra    [nb_request];
    283305  Tgeneral_address_t _num_reg_ra [nb_request];
     
    288310
    289311  // emulation of registerFile
    290   Tcontrol_t         _gpr_val    [_param->_nb_general_register][_param->_nb_context];
    291   Tgeneral_data_t    _gpr        [_param->_nb_general_register][_param->_nb_context];
    292   Tcontrol_t         _spr_val    [_param->_nb_special_register][_param->_nb_context];
    293   Tspecial_data_t    _spr        [_param->_nb_special_register][_param->_nb_context];
     312  Tcontrol_t         _gpr_val    [_param->_nb_general_register][_param->_nb_ooo_engine];
     313  Tgeneral_data_t    _gpr        [_param->_nb_general_register][_param->_nb_ooo_engine];
     314  Tcontrol_t         _spr_val    [_param->_nb_special_register][_param->_nb_ooo_engine];
     315  Tspecial_data_t    _spr        [_param->_nb_special_register][_param->_nb_ooo_engine];
    294316
    295317  SC_START(0);
    296318
    297319  LABEL("Initialisation");
    298   in_RESERVATION_STATION_IN_VAL ->write(0);
    299   for (uint32_t i=0; i<_param->_size_queue      ; i++)
    300     in_RESERVATION_STATION_OUT_ACK [i]->write(0);
     320  in_INSERT_VAL ->write(0);
     321  for (uint32_t i=0; i<_param->_nb_inst_retire  ; i++)
     322    in_RETIRE_ACK [i]->write(0);
    301323  for (uint32_t i=0; i<_param->_nb_gpr_write    ; i++)
    302324    in_GPR_WRITE_VAL               [i]->write(0);
     
    331353      for (uint32_t i=0; i<nb_request; i++)
    332354        {
    333           _context_id   [i] = rand()% _param->_nb_context            ;
     355          _ooo_engine_id   [i] = rand()% _param->_nb_ooo_engine            ;
    334356          _read_ra      [i] = rand()% 2                              ;
    335357          _num_reg_ra   [i] = rand()% _param->_nb_general_register   ;
     
    341363     
    342364      // emulation of registerFile
    343       for (uint32_t j=0; j<_param->_nb_context; j++)
     365      for (uint32_t j=0; j<_param->_nb_ooo_engine; j++)
    344366        {
    345367          for (uint32_t i=0; i<_param->_nb_general_register; i++)
    346368            {
    347369              _gpr_val      [i][j] = ((rand()%100) < percent_registerfile_valid);
    348               _gpr          [i][j] = rand()%(1<<_param->_size_general_data);
     370              _gpr          [i][j] = rand()%((1<<_param->_size_general_data)-1);
    349371            }
    350372          for (uint32_t i=0; i<_param->_nb_special_register; i++)
     
    362384      for (uint32_t i=0; i<nb_request; i++)
    363385        request_out_wait [i] = true;
     386     
     387      bool can_gpr_use [_param->_nb_ooo_engine][_param->_nb_general_register];
     388      bool can_spr_use [_param->_nb_ooo_engine][_param->_nb_special_register];
     389      bool need_gpr    [_param->_nb_ooo_engine][_param->_nb_general_register];
     390      bool need_spr    [_param->_nb_ooo_engine][_param->_nb_special_register];
     391
     392     
     393      for (uint32_t j=0; j<_param->_nb_ooo_engine; j++)
     394        {
     395          for (uint32_t i=0; i<_param->_nb_general_register; i++)
     396            need_gpr [j][i] = false;
     397          for (uint32_t i=0; i<_param->_nb_special_register; i++)
     398            need_spr [j][i] = false;
     399        }
    364400
    365401      while (request_out < nb_request)
    366402        {
    367           if ((request_in < nb_request) and
    368               ((rand()%100) < percent_transaction_queue_in))
     403          for (uint32_t j=0; j<_param->_nb_ooo_engine; j++)
     404            {
     405              for (uint32_t i=0; i<_param->_nb_general_register; i++)
     406                can_gpr_use [j][i] = true;
     407              for (uint32_t i=0; i<_param->_nb_special_register; i++)
     408                can_spr_use [j][i] = true;
     409            }
     410
     411          Tcontrol_t         insert_val = (request_in < nb_request) and ((rand()%100) < percent_transaction_queue_in);
     412          Tcontext_t         insert_ooo_engine_id;
     413          Tgeneral_address_t insert_num_reg_ra;
     414          Tgeneral_address_t insert_num_reg_rb;
     415          Tspecial_address_t insert_num_reg_rc;
     416
     417          in_INSERT_VAL         ->write(insert_val);
     418          if (insert_val)
    369419            {
    370420              bool               data_val;
    371               Tgeneral_address_t gpr_addr;
    372               Tspecial_address_t spr_addr;
    373               Tcontext_t         ctxt    = _context_id [request_in];
    374               in_RESERVATION_STATION_IN_VAL         ->write(1);
    375               in_RESERVATION_STATION_IN_CONTEXT_ID  ->write(ctxt);
    376               in_RESERVATION_STATION_IN_PACKET_ID   ->write(request_in);
    377               in_RESERVATION_STATION_IN_OPERATION   ->write(0);
    378               in_RESERVATION_STATION_IN_TYPE        ->write(0);
    379               in_RESERVATION_STATION_IN_HAS_IMMEDIAT->write(0);
    380               in_RESERVATION_STATION_IN_IMMEDIAT    ->write(0);
    381 //            in_RESERVATION_STATION_IN_READ_RA     ->write(_read_ra[request_in]);
    382               gpr_addr = _num_reg_ra [request_in];
    383               data_val = not(_read_ra[request_in]) or _gpr_val[gpr_addr][ctxt];
    384               in_RESERVATION_STATION_IN_NUM_REG_RA  ->write(gpr_addr);
    385               in_RESERVATION_STATION_IN_DATA_RA_VAL ->write(data_val);
    386               in_RESERVATION_STATION_IN_DATA_RA     ->write((data_val)?_gpr[gpr_addr][ctxt]:0);
    387 //            in_RESERVATION_STATION_IN_READ_RB     ->write(_read_rb[request_in]);
    388               gpr_addr = _num_reg_rb [request_in];
    389               data_val = not(_read_rb[request_in]) or _gpr_val[gpr_addr][ctxt];
    390               in_RESERVATION_STATION_IN_NUM_REG_RB  ->write(gpr_addr);                         
    391               in_RESERVATION_STATION_IN_DATA_RB_VAL ->write(data_val);                         
    392               in_RESERVATION_STATION_IN_DATA_RB     ->write((data_val)?_gpr[gpr_addr][ctxt]:0);
    393 //            in_RESERVATION_STATION_IN_READ_RC     ->write(_read_rc[request_in]);
    394               spr_addr = _num_reg_rc [request_in];
    395               data_val = not(_read_rc[request_in]) or _spr_val[spr_addr][ctxt];
    396               in_RESERVATION_STATION_IN_NUM_REG_RC  ->write(spr_addr);                         
    397               in_RESERVATION_STATION_IN_DATA_RC_VAL ->write(data_val);                         
    398               in_RESERVATION_STATION_IN_DATA_RC     ->write((data_val)?_spr[spr_addr][ctxt]:0);
    399               in_RESERVATION_STATION_IN_WRITE_RD    ->write(0);
    400               in_RESERVATION_STATION_IN_NUM_REG_RD  ->write(0);
    401               in_RESERVATION_STATION_IN_WRITE_RE    ->write(0);
    402               in_RESERVATION_STATION_IN_NUM_REG_RE  ->write(0);
    403             }
    404           else
    405             {
    406               in_RESERVATION_STATION_IN_VAL         ->write(0);
    407             }
    408 
    409           for (uint32_t i=0; i<_param->_size_queue      ; i++)
    410             in_RESERVATION_STATION_OUT_ACK[i]->write((rand()%100)<percent_transaction_queue_out);
    411 
     421              insert_ooo_engine_id = _ooo_engine_id [request_in];
     422              insert_num_reg_ra    = _num_reg_ra [request_in];
     423              insert_num_reg_rb    = _num_reg_rb [request_in];
     424              insert_num_reg_rc    = _num_reg_rc [request_in];
     425
     426              if (_param->_have_port_context_id)
     427              in_INSERT_CONTEXT_ID     ->write((2*insert_ooo_engine_id)%_param->_nb_context  );
     428              if (_param->_have_port_front_end_id)
     429              in_INSERT_FRONT_END_ID   ->write((3*insert_ooo_engine_id)%_param->_nb_front_end);
     430              if (_param->_have_port_ooo_engine_id)
     431              in_INSERT_OOO_ENGINE_ID  ->write(insert_ooo_engine_id);
     432              if (_param->_have_port_rob_id)
     433              in_INSERT_ROB_ID      ->write(request_in);
     434              in_INSERT_OPERATION   ->write(0);
     435              in_INSERT_TYPE        ->write(0);
     436              in_INSERT_HAS_IMMEDIAT->write(0);
     437              in_INSERT_IMMEDIAT    ->write(0);
     438//            in_INSERT_READ_RA     ->write(_read_ra[request_in]);
     439              data_val = not(_read_ra[request_in]) or _gpr_val[insert_num_reg_ra][insert_ooo_engine_id];
     440
     441              need_gpr [insert_ooo_engine_id][insert_num_reg_ra] |= not data_val;
     442
     443              in_INSERT_NUM_REG_RA  ->write(insert_num_reg_ra);
     444              in_INSERT_DATA_RA_VAL ->write(data_val);
     445              in_INSERT_DATA_RA     ->write((data_val)?_gpr[insert_num_reg_ra][insert_ooo_engine_id]:0);
     446//            in_INSERT_READ_RB     ->write(_read_rb[request_in]);
     447              data_val = not(_read_rb[request_in]) or _gpr_val[insert_num_reg_rb][insert_ooo_engine_id];
     448
     449              need_gpr [insert_ooo_engine_id][insert_num_reg_rb] |= not data_val;
     450
     451              in_INSERT_NUM_REG_RB  ->write(insert_num_reg_rb);                       
     452              in_INSERT_DATA_RB_VAL ->write(data_val);                         
     453              in_INSERT_DATA_RB     ->write((data_val)?_gpr[insert_num_reg_rb][insert_ooo_engine_id]:0);
     454//            in_INSERT_READ_RC     ->write(_read_rc[request_in]);
     455              data_val = not(_read_rc[request_in]) or _spr_val[insert_num_reg_rc][insert_ooo_engine_id];
     456
     457              need_spr [insert_ooo_engine_id][insert_num_reg_rc] |= not data_val;
     458
     459              in_INSERT_NUM_REG_RC  ->write(insert_num_reg_rc);                       
     460              in_INSERT_DATA_RC_VAL ->write(data_val);                         
     461              in_INSERT_DATA_RC     ->write((data_val)?_spr[insert_num_reg_rc][insert_ooo_engine_id]:0);
     462              in_INSERT_WRITE_RD    ->write(0);
     463              in_INSERT_NUM_REG_RD  ->write(0);
     464              in_INSERT_WRITE_RE    ->write(0);
     465              in_INSERT_NUM_REG_RE  ->write(0);
     466
     467              can_gpr_use [insert_ooo_engine_id][insert_num_reg_ra] = false;
     468              can_gpr_use [insert_ooo_engine_id][insert_num_reg_rb] = false;
     469              can_spr_use [insert_ooo_engine_id][insert_num_reg_rc] = false;
     470            }
     471                 
     472          for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
     473            in_RETIRE_ACK[i]->write((rand()%100)<percent_transaction_queue_out);
    412474
    413475          LABEL("Bypass Network :");
     
    415477            {
    416478              Tgeneral_address_t num_reg = rand()% _param->_nb_general_register;
    417               Tcontext_t         context = rand()% _param->_nb_context;
    418               Tcontrol_t         val     = (_gpr_val [num_reg][context]== 0)?((rand()%100) < percent_transaction_registerfile):0;
    419               Tgeneral_data_t    data    = rand()%(1<<_param->_size_general_data);
    420              
    421               in_GPR_WRITE_VAL        [i]->write(val);       
    422               in_GPR_WRITE_CONTEXT_ID [i]->write(context);
    423               in_GPR_WRITE_NUM_REG    [i]->write(num_reg);
    424               in_GPR_WRITE_DATA       [i]->write(data);
     479              Tcontext_t         ooo_engine = rand()% _param->_nb_ooo_engine;
     480              Tcontrol_t         val     = (_gpr_val [num_reg][ooo_engine]== 0)?((rand()%100) < percent_transaction_registerfile):0;
     481              Tgeneral_data_t    data    = rand()%((1<<_param->_size_general_data)-1);
     482           
     483              val = (val and can_gpr_use [ooo_engine][num_reg] and need_gpr [ooo_engine][num_reg]);
     484
     485              in_GPR_WRITE_VAL            [i]->write(val);           
     486              if (_param->_have_port_ooo_engine_id)
     487              in_GPR_WRITE_OOO_ENGINE_ID  [i]->write(ooo_engine);
     488              in_GPR_WRITE_NUM_REG        [i]->write(num_reg);
     489              in_GPR_WRITE_DATA           [i]->write(data);
    425490
    426491              if (val)
    427492                {
    428                   LABEL(" * GPR_WRITE     ["+toString(i)+"] - gpr["+toString(num_reg)+"]["+toString(context)+"] <- "+toString(data));
    429                   _gpr     [num_reg][context] = data;
    430                   _gpr_val [num_reg][context] = 1;
     493                  LABEL(" * GPR_WRITE     ["+toString(i)+"] - gpr["+toString(num_reg)+"]["+toString(ooo_engine)+"] <- "+toString(data));
     494                  can_gpr_use [ooo_engine][num_reg] = false;
     495                  need_gpr [ooo_engine][num_reg]    = false;
     496
     497
     498                  _gpr     [num_reg][ooo_engine] = data;
     499                  _gpr_val [num_reg][ooo_engine] = 1;
    431500                }
    432501            }
     
    434503            {
    435504              Tspecial_address_t num_reg = rand()% _param->_nb_special_register;
    436               Tcontext_t         context = rand()% _param->_nb_context;
    437               Tcontrol_t         val     = (_spr_val [num_reg][context]== 0)?((rand()%100) < percent_transaction_registerfile):0;
     505              Tcontext_t         ooo_engine = rand()% _param->_nb_ooo_engine;
     506              Tcontrol_t         val     = (_spr_val [num_reg][ooo_engine]== 0)?((rand()%100) < percent_transaction_registerfile):0;
    438507              Tspecial_data_t    data    = rand()%(1<<_param->_size_special_data);
    439              
    440               in_SPR_WRITE_VAL        [i]->write(val);       
    441               in_SPR_WRITE_CONTEXT_ID [i]->write(context);
    442               in_SPR_WRITE_NUM_REG    [i]->write(num_reg);
    443               in_SPR_WRITE_DATA       [i]->write(data);
     508
     509              val = (val and can_spr_use [ooo_engine][num_reg] and need_spr[ooo_engine][num_reg]);
     510
     511              in_SPR_WRITE_VAL            [i]->write(val);           
     512              if (_param->_have_port_ooo_engine_id)
     513              in_SPR_WRITE_OOO_ENGINE_ID  [i]->write(ooo_engine);
     514              in_SPR_WRITE_NUM_REG        [i]->write(num_reg);
     515              in_SPR_WRITE_DATA           [i]->write(data);
    444516
    445517              if (val == 1)
    446518                {
    447                   LABEL(" * SPR_WRITE     ["+toString(i)+"] - spr["+toString(num_reg)+"]["+toString(context)+"] <- "+toString(data));
    448                   _spr     [num_reg][context] = data;
    449                   _spr_val [num_reg][context] = 1;
     519                  LABEL(" * SPR_WRITE     ["+toString(i)+"] - spr["+toString(num_reg)+"]["+toString(ooo_engine)+"] <- "+toString(data));
     520                  can_spr_use [ooo_engine][num_reg] = false;
     521                  need_spr[ooo_engine][num_reg]     = false;
     522
     523                  _spr     [num_reg][ooo_engine] = data;
     524                  _spr_val [num_reg][ooo_engine] = 1;
    450525                }
    451526            }
     
    453528          for (uint32_t i=0; i<_param->_nb_bypass_write; i++)
    454529            {
    455               Tcontext_t         context     = rand()% _param->_nb_context;
    456               in_BYPASS_WRITE_CONTEXT_ID [i]->write(context);
     530              Tcontext_t         ooo_engine     = rand()% _param->_nb_ooo_engine;
     531              if (_param->_have_port_ooo_engine_id)
     532              in_BYPASS_WRITE_OOO_ENGINE_ID [i]->write(ooo_engine);
    457533
    458534              Tgeneral_address_t gpr_num_reg = rand()% _param->_nb_general_register;
    459               Tcontrol_t         gpr_val     = (_gpr_val [gpr_num_reg][context]== 0)?((rand()%100) < percent_transaction_bypass):0;
    460               Tgeneral_data_t    gpr_data    = rand()%(1<<_param->_size_general_data);
     535              Tcontrol_t         gpr_val     = (_gpr_val [gpr_num_reg][ooo_engine]== 0)?((rand()%100) < percent_transaction_bypass):0;
     536              Tgeneral_data_t    gpr_data    = rand()%((1<<_param->_size_general_data)-1);
    461537             
     538              gpr_val = (gpr_val and can_gpr_use [ooo_engine][gpr_num_reg] and need_gpr[ooo_engine][gpr_num_reg]);
     539
    462540              in_BYPASS_WRITE_GPR_VAL    [i]->write(gpr_val);         
    463541              in_BYPASS_WRITE_GPR_NUM_REG[i]->write(gpr_num_reg);
     
    466544              if (gpr_val)
    467545                {
    468                   LABEL(" * BYPASS_WRITE  ["+toString(i)+"] - gpr["+toString(gpr_num_reg)+"]["+toString(context)+"] <- "+toString(gpr_data));
    469                   _gpr     [gpr_num_reg][context] = gpr_data;
    470                   _gpr_val [gpr_num_reg][context] = 1;
     546                  LABEL(" * BYPASS_WRITE  ["+toString(i)+"] - gpr["+toString(gpr_num_reg)+"]["+toString(ooo_engine)+"] <- "+toString(gpr_data));
     547                  can_gpr_use [ooo_engine][gpr_num_reg] = false;
     548                  need_gpr[ooo_engine][gpr_num_reg]     = false;
     549
     550                  _gpr     [gpr_num_reg][ooo_engine] = gpr_data;
     551                  _gpr_val [gpr_num_reg][ooo_engine] = 1;
    471552                }
    472553
    473554              Tspecial_address_t spr_num_reg = rand()% _param->_nb_special_register;
    474               Tcontrol_t         spr_val     = (_spr_val [spr_num_reg][context]== 0)?((rand()%100) < percent_transaction_bypass):0;
     555              Tcontrol_t         spr_val     = (_spr_val [spr_num_reg][ooo_engine]== 0)?((rand()%100) < percent_transaction_bypass):0;
    475556              Tspecial_data_t    spr_data    = rand()%(1<<_param->_size_special_data);
    476557             
     558              spr_val = (spr_val and can_spr_use [ooo_engine][spr_num_reg] and need_spr[ooo_engine][spr_num_reg]);
     559
    477560              in_BYPASS_WRITE_SPR_VAL    [i]->write(spr_val);         
    478561              in_BYPASS_WRITE_SPR_NUM_REG[i]->write(spr_num_reg);
     
    481564              if (spr_val)
    482565                {
    483                   LABEL(" * BYPASS_WRITE  ["+toString(i)+"] - spr["+toString(spr_num_reg)+"]["+toString(context)+"] <- "+toString(spr_data));
    484                   _spr     [spr_num_reg][context] = spr_data;
    485                   _spr_val [spr_num_reg][context] = 1;
     566                  LABEL(" * BYPASS_WRITE  ["+toString(i)+"] - spr["+toString(spr_num_reg)+"]["+toString(ooo_engine)+"] <- "+toString(spr_data));
     567                  can_spr_use [ooo_engine][spr_num_reg] = false;
     568                  need_spr[ooo_engine][spr_num_reg]     = false;
     569
     570                  _spr     [spr_num_reg][ooo_engine] = spr_data;
     571                  _spr_val [spr_num_reg][ooo_engine] = 1;
    486572                }
    487573
     
    490576          for (uint32_t i=0; i<_param->_nb_bypass_memory; i++)
    491577            {
    492               Tcontext_t         context     = rand()% _param->_nb_context;
    493               in_BYPASS_MEMORY_CONTEXT_ID [i]->write(context);
    494 
    495               Tgeneral_address_t gpr_num_reg = rand()% _param->_nb_general_register;
    496               Tcontrol_t         gpr_val     = (_gpr_val [gpr_num_reg][context]== 0)?((rand()%100) < percent_transaction_bypass):0;
    497               Tgeneral_data_t    gpr_data    = rand()%(1<<_param->_size_general_data);
     578              Tcontext_t         ooo_engine     = rand()% _param->_nb_ooo_engine;
     579              if (_param->_have_port_ooo_engine_id)
     580              in_BYPASS_MEMORY_OOO_ENGINE_ID [i]->write(ooo_engine);
     581
     582              Tgeneral_address_t num_reg = rand()% _param->_nb_general_register;
     583              Tcontrol_t         val     = (_gpr_val [num_reg][ooo_engine]== 0)?((rand()%100) < percent_transaction_bypass):0;
     584              Tgeneral_data_t    data    = rand()%((1<<_param->_size_general_data)-1);
    498585             
    499               in_BYPASS_MEMORY_VAL    [i]->write(gpr_val);           
    500               in_BYPASS_MEMORY_NUM_REG[i]->write(gpr_num_reg);
    501               in_BYPASS_MEMORY_DATA   [i]->write(gpr_data);
    502 
    503               if (gpr_val)
     586              val = (val and can_gpr_use [ooo_engine][num_reg] and need_gpr [ooo_engine][num_reg]);
     587
     588              in_BYPASS_MEMORY_VAL    [i]->write(val);       
     589              in_BYPASS_MEMORY_NUM_REG[i]->write(num_reg);
     590              in_BYPASS_MEMORY_DATA   [i]->write(data);
     591
     592              if (val)
    504593                {
    505                   LABEL(" * BYPASS_MEMORY ["+toString(i)+"] - gpr["+toString(gpr_num_reg)+"]["+toString(context)+"] <- "+toString(gpr_data));
    506                   _gpr     [gpr_num_reg][context] = gpr_data;
    507                   _gpr_val [gpr_num_reg][context] = 1;
     594                  LABEL(" * BYPASS_MEMORY ["+toString(i)+"] - gpr["+toString(num_reg)+"]["+toString(ooo_engine)+"] <- "+toString(data));
     595                  can_gpr_use [ooo_engine][num_reg] = false;
     596                  need_gpr [ooo_engine][num_reg] = false;
     597
     598                  _gpr     [num_reg][ooo_engine] = data;
     599                  _gpr_val [num_reg][ooo_engine] = 1;
    508600                }
    509601            }
    510602          SC_START(0); // to mealy function
    511603         
    512 //        LABEL("Test     RESERVATION_STATION_IN  : "+toString(in_RESERVATION_STATION_IN_VAL->read())+","+toString(out_RESERVATION_STATION_IN_ACK->read()));
    513           if (( in_RESERVATION_STATION_IN_VAL->read() == 1) and
    514               (out_RESERVATION_STATION_IN_ACK->read() == 1))
    515             {
    516               LABEL("Accepted RESERVATION_STATION_IN  n°"+toString(request_in));
     604//        LABEL("Test     INSERT  : "+toString(in_INSERT_VAL->read())+","+toString(out_INSERT_ACK->read()));
     605          if (( in_INSERT_VAL->read() == 1) and
     606              (out_INSERT_ACK->read() == 1))
     607            {
     608              LABEL("Accepted INSERT  number : "+toString(request_in));
    517609              request_in  ++;
    518610            }
    519611
    520           for (uint32_t i=0; i<_param->_size_queue      ; i++)
    521             {
    522               LABEL("Test     RESERVATION_STATION_OUT "+toString(i)+" : "+toString(out_RESERVATION_STATION_OUT_VAL[i]->read())+","+toString(in_RESERVATION_STATION_OUT_ACK[i]->read()));
    523               if ((out_RESERVATION_STATION_OUT_VAL [i]->read() == 1) and
    524                   ( in_RESERVATION_STATION_OUT_ACK [i]->read() == 1))
     612          for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
     613            {
     614              LABEL("Test     RETIRE "+toString(i)+" : "+toString(out_RETIRE_VAL[i]->read())+","+toString(in_RETIRE_ACK[i]->read()));
     615              if ((out_RETIRE_VAL [i]->read() == 1) and
     616                  ( in_RETIRE_ACK [i]->read() == 1))
    525617                {
    526                   Tpacket_t  packet_id  = out_RESERVATION_STATION_OUT_PACKET_ID [i]->read();
    527 
    528                   LABEL("Accepted RESERVATION_STATION_OUT ["+toString(i)+"] n°"+toString(packet_id)+", request n°"+toString(request_out));
    529                   TEST(bool, request_out_wait [packet_id] , true);
     618                  Tpacket_t  rob_id;
     619                  if (_param->_have_port_rob_id)
     620                    rob_id = out_RETIRE_ROB_ID [i]->read();
     621                  else
     622                    rob_id = 0;
     623                  LABEL("Accepted RETIRE ["+toString(i)+"] number : "+toString(rob_id)+", request number : "+toString(request_out));
     624                  TEST(bool, request_out_wait [rob_id] , true);
    530625
    531626                  request_out ++;
    532                   request_out_wait [packet_id] = false;
    533 
    534                   Tcontext_t context_id = _context_id [packet_id];
     627                  request_out_wait [rob_id] = false;
     628
     629                  Tcontext_t ooo_engine_id = _ooo_engine_id [rob_id];
    535630                 
    536                   TEST(Tcontext_t        ,out_RESERVATION_STATION_OUT_CONTEXT_ID[i]->read(),context_id);
    537                   if (_read_ra [packet_id])
    538                   TEST(Tgeneral_data_t   ,out_RESERVATION_STATION_OUT_DATA_RA   [i]->read(),_gpr[_num_reg_ra[packet_id]][context_id]);
     631                  if (_param->_have_port_context_id)
     632                  TEST(Tcontext_t        ,out_RETIRE_CONTEXT_ID   [i]->read(),(2*ooo_engine_id)%_param->_nb_context  );
     633                  if (_param->_have_port_front_end_id)
     634                  TEST(Tcontext_t        ,out_RETIRE_FRONT_END_ID [i]->read(),(3*ooo_engine_id)%_param->_nb_front_end);
     635                  if (_param->_have_port_ooo_engine_id)
     636                  TEST(Tcontext_t        ,out_RETIRE_OOO_ENGINE_ID[i]->read(),ooo_engine_id);
     637
     638                  if (_read_ra [rob_id])
     639                  TEST(Tgeneral_data_t   ,out_RETIRE_DATA_RA   [i]->read(),_gpr[_num_reg_ra[rob_id]][ooo_engine_id]);
    539640                 
    540                   if (_read_rb [packet_id])
    541                   TEST(Tgeneral_data_t   ,out_RESERVATION_STATION_OUT_DATA_RB   [i]->read(),_gpr[_num_reg_rb[packet_id]][context_id]);
     641                  if (_read_rb [rob_id])
     642                  TEST(Tgeneral_data_t   ,out_RETIRE_DATA_RB   [i]->read(),_gpr[_num_reg_rb[rob_id]][ooo_engine_id]);
    542643                 
    543                   if (_read_rc [packet_id])
    544                   TEST(Tspecial_data_t   ,out_RESERVATION_STATION_OUT_DATA_RC   [i]->read(),_spr[_num_reg_rc[packet_id]][context_id]);
     644                  if (_read_rc [rob_id])
     645                  TEST(Tspecial_data_t   ,out_RETIRE_DATA_RC   [i]->read(),_spr[_num_reg_rc[rob_id]][ooo_engine_id]);
     646
     647//                need_gpr [ooo_engine_id][_num_reg_ra[rob_id]]= true;
     648//                need_gpr [ooo_engine_id][_num_reg_rb[rob_id]]= true;
     649//                need_spr [ooo_engine_id][_num_reg_rc[rob_id]]= true;
    545650                }
    546651            }
     
    561666  delete     in_NRESET;
    562667
    563   delete     in_RESERVATION_STATION_IN_VAL         ;
    564   delete    out_RESERVATION_STATION_IN_ACK         ;
    565   delete     in_RESERVATION_STATION_IN_CONTEXT_ID  ;
    566   delete     in_RESERVATION_STATION_IN_PACKET_ID   ;
    567   delete     in_RESERVATION_STATION_IN_OPERATION   ;
    568   delete     in_RESERVATION_STATION_IN_TYPE        ;
    569   delete     in_RESERVATION_STATION_IN_HAS_IMMEDIAT;
    570   delete     in_RESERVATION_STATION_IN_IMMEDIAT    ;
    571 //delete     in_RESERVATION_STATION_IN_READ_RA     ;
    572   delete     in_RESERVATION_STATION_IN_NUM_REG_RA  ;
    573   delete     in_RESERVATION_STATION_IN_DATA_RA_VAL ;
    574   delete     in_RESERVATION_STATION_IN_DATA_RA     ;
    575 //delete     in_RESERVATION_STATION_IN_READ_RB     ;
    576   delete     in_RESERVATION_STATION_IN_NUM_REG_RB  ;
    577   delete     in_RESERVATION_STATION_IN_DATA_RB_VAL ;
    578   delete     in_RESERVATION_STATION_IN_DATA_RB     ;
    579 //delete     in_RESERVATION_STATION_IN_READ_RC     ;
    580   delete     in_RESERVATION_STATION_IN_NUM_REG_RC  ;
    581   delete     in_RESERVATION_STATION_IN_DATA_RC_VAL ;
    582   delete     in_RESERVATION_STATION_IN_DATA_RC     ;
    583   delete     in_RESERVATION_STATION_IN_WRITE_RD    ;
    584   delete     in_RESERVATION_STATION_IN_NUM_REG_RD  ;
    585   delete     in_RESERVATION_STATION_IN_WRITE_RE    ;
    586   delete     in_RESERVATION_STATION_IN_NUM_REG_RE  ;
    587  
    588   delete [] out_RESERVATION_STATION_OUT_VAL         ;
    589   delete []  in_RESERVATION_STATION_OUT_ACK         ;
    590   delete [] out_RESERVATION_STATION_OUT_CONTEXT_ID  ;
    591   delete [] out_RESERVATION_STATION_OUT_PACKET_ID   ;
    592   delete [] out_RESERVATION_STATION_OUT_OPERATION   ;
    593   delete [] out_RESERVATION_STATION_OUT_TYPE        ;
    594   delete [] out_RESERVATION_STATION_OUT_HAS_IMMEDIAT;
    595   delete [] out_RESERVATION_STATION_OUT_IMMEDIAT    ;
    596   delete [] out_RESERVATION_STATION_OUT_DATA_RA     ;
    597   delete [] out_RESERVATION_STATION_OUT_DATA_RB     ;
    598   delete [] out_RESERVATION_STATION_OUT_DATA_RC     ;
    599   delete [] out_RESERVATION_STATION_OUT_WRITE_RD    ;
    600   delete [] out_RESERVATION_STATION_OUT_NUM_REG_RD  ;
    601   delete [] out_RESERVATION_STATION_OUT_WRITE_RE    ;
    602   delete [] out_RESERVATION_STATION_OUT_NUM_REG_RE  ;
     668  delete     in_INSERT_VAL         ;
     669  delete    out_INSERT_ACK         ;
     670  if (_param->_have_port_context_id) 
     671  delete     in_INSERT_CONTEXT_ID  ;
     672  if (_param->_have_port_front_end_id) 
     673  delete     in_INSERT_FRONT_END_ID   ;
     674  if (_param->_have_port_ooo_engine_id) 
     675  delete     in_INSERT_OOO_ENGINE_ID  ;
     676  if (_param->_have_port_rob_id) 
     677  delete     in_INSERT_ROB_ID      ;
     678  delete     in_INSERT_OPERATION   ;
     679  delete     in_INSERT_TYPE        ;
     680  delete     in_INSERT_HAS_IMMEDIAT;
     681  delete     in_INSERT_IMMEDIAT    ;
     682//delete     in_INSERT_READ_RA     ;
     683  delete     in_INSERT_NUM_REG_RA  ;
     684  delete     in_INSERT_DATA_RA_VAL ;
     685  delete     in_INSERT_DATA_RA     ;
     686//delete     in_INSERT_READ_RB     ;
     687  delete     in_INSERT_NUM_REG_RB  ;
     688  delete     in_INSERT_DATA_RB_VAL ;
     689  delete     in_INSERT_DATA_RB     ;
     690//delete     in_INSERT_READ_RC     ;
     691  delete     in_INSERT_NUM_REG_RC  ;
     692  delete     in_INSERT_DATA_RC_VAL ;
     693  delete     in_INSERT_DATA_RC     ;
     694  delete     in_INSERT_WRITE_RD    ;
     695  delete     in_INSERT_NUM_REG_RD  ;
     696  delete     in_INSERT_WRITE_RE    ;
     697  delete     in_INSERT_NUM_REG_RE  ;
     698 
     699  delete [] out_RETIRE_VAL         ;
     700  delete []  in_RETIRE_ACK         ;
     701  if (_param->_have_port_context_id) 
     702  delete [] out_RETIRE_CONTEXT_ID  ;
     703  if (_param->_have_port_front_end_id) 
     704  delete [] out_RETIRE_FRONT_END_ID;
     705  if (_param->_have_port_ooo_engine_id) 
     706  delete [] out_RETIRE_OOO_ENGINE_ID  ;
     707  if (_param->_have_port_rob_id) 
     708  delete [] out_RETIRE_ROB_ID   ;
     709  delete [] out_RETIRE_OPERATION   ;
     710  delete [] out_RETIRE_TYPE        ;
     711  delete [] out_RETIRE_HAS_IMMEDIAT;
     712  delete [] out_RETIRE_IMMEDIAT    ;
     713  delete [] out_RETIRE_DATA_RA     ;
     714  delete [] out_RETIRE_DATA_RB     ;
     715  delete [] out_RETIRE_DATA_RC     ;
     716  delete [] out_RETIRE_WRITE_RD    ;
     717  delete [] out_RETIRE_NUM_REG_RD  ;
     718  delete [] out_RETIRE_WRITE_RE    ;
     719  delete [] out_RETIRE_NUM_REG_RE  ;
    603720 
    604721  delete []  in_GPR_WRITE_VAL       ;
    605   delete []  in_GPR_WRITE_CONTEXT_ID;
     722  if (_param->_have_port_ooo_engine_id) 
     723  delete []  in_GPR_WRITE_OOO_ENGINE_ID;
    606724  delete []  in_GPR_WRITE_NUM_REG   ;
    607725  delete []  in_GPR_WRITE_DATA      ;
    608726 
    609727  delete []  in_SPR_WRITE_VAL       ;
    610   delete []  in_SPR_WRITE_CONTEXT_ID;
     728  if (_param->_have_port_ooo_engine_id) 
     729  delete []  in_SPR_WRITE_OOO_ENGINE_ID;
    611730  delete []  in_SPR_WRITE_NUM_REG   ;
    612731  delete []  in_SPR_WRITE_DATA      ;
    613732 
    614   delete []  in_BYPASS_WRITE_CONTEXT_ID ;
     733  if (_param->_have_port_ooo_engine_id) 
     734  delete []  in_BYPASS_WRITE_OOO_ENGINE_ID ;
    615735  delete []  in_BYPASS_WRITE_GPR_VAL    ;
    616736  delete []  in_BYPASS_WRITE_GPR_NUM_REG;
     
    621741 
    622742  delete []  in_BYPASS_MEMORY_VAL       ;
    623   delete []  in_BYPASS_MEMORY_CONTEXT_ID;
     743  if (_param->_have_port_ooo_engine_id) 
     744  delete []  in_BYPASS_MEMORY_OOO_ENGINE_ID;
    624745  delete []  in_BYPASS_MEMORY_NUM_REG   ;
    625746  delete []  in_BYPASS_MEMORY_DATA      ;
Note: See TracChangeset for help on using the changeset viewer.