Ignore:
Timestamp:
Jul 30, 2010, 4:47:27 PM (14 years ago)
Author:
rosiere
Message:
  • Add test for all configuration
  • RAT : add rat scheme (depth_save)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_genMealy_retire.cpp

    r133 r139  
    6060          spr_write_sr_cy     [i][j] = 0; // not necessary
    6161          spr_write_sr_ov     [i][j] = 0; // not necessary
     62
     63          // Init internal update table
     64         
     65          // Test if an event occure
     66          // bool event = (PORT_READ(in_RETIRE_EVENT_STATE [i][j]) != EVENT_STATE_NO_EVENT);
     67          bool reset_update_table = (commit_event_state_to_event_state(reg_EVENT_STATE[i][j]) == EVENT_STATE_EVENT);
     68
     69          log_printf(TRACE,Register_Address_Translation_unit,FUNCTION,"    * reset_update_table : %d",reset_update_table);
     70
     71          // not event -> update_table == 1 -> always update
     72          // event     -> update_table and not reset
     73          for (uint32_t k=0; k<_param->_nb_general_register_logic; ++k)
     74            internal_rat_gpr_update_table [i][j][k] = // not event or
     75                                                      (not reset_update_table and rat_gpr_update_table [i][j][k]);
     76          for (uint32_t k=0; k<_param->_nb_special_register_logic; ++k)
     77            internal_rat_spr_update_table [i][j][k] = // not event or
     78                                                      (not reset_update_table and rat_spr_update_table [i][j][k]);
    6279        }
    6380
     
    116133                        )
    117134                      {
     135                        Tcontrol_t         write_rd       = entry->write_rd;
    118136                        Tcontrol_t         write_re       = entry->write_re;
     137                        Tgeneral_address_t num_reg_rd_log = entry->num_reg_rd_log;
    119138                        Tspecial_address_t num_reg_re_log = entry->num_reg_re_log;
    120139                       
     
    172191                          }
    173192                       
    174                         internal_BANK_RETIRE_NUM_RENAME_UNIT [num_bank] = x;
    175                         internal_BANK_RETIRE_NUM_INST        [num_bank] = y;
     193                        // Restore Old Register
     194                        Tcontrol_t retire_restore = (commit_event_state_to_event_state(reg_EVENT_STATE[front_end_id][context_id]) != EVENT_STATE_NO_EVENT);
     195
     196                        // Test if event -> need restore ?
     197                        if (retire_restore)
     198                          {
     199                            log_printf(TRACE,Commit_unit,FUNCTION,"      * Restore");
     200                           
     201                            // Test and update update table
     202                            if (write_rd)
     203                              {
     204                                internal_BANK_RETIRE_RESTORE_RD_PHY_OLD [num_bank] = (internal_rat_gpr_update_table[front_end_id][context_id][num_reg_rd_log] == 0);
     205
     206                                internal_rat_gpr_update_table[front_end_id][context_id][num_reg_rd_log] = 1;
     207                              }
     208                            if (write_re)
     209                              {
     210                                internal_BANK_RETIRE_RESTORE_RE_PHY_OLD [num_bank] = (internal_rat_spr_update_table[front_end_id][context_id][num_reg_re_log] == 0);
     211                               
     212                                internal_rat_spr_update_table[front_end_id][context_id][num_reg_re_log] = 1;
     213                              }
     214
     215                            log_printf(TRACE,Commit_unit,FUNCTION,"      * restore_rd_phy_old   : %d",internal_BANK_RETIRE_RESTORE_RD_PHY_OLD [num_bank]);
     216                            log_printf(TRACE,Commit_unit,FUNCTION,"      * restore_re_phy_old   : %d",internal_BANK_RETIRE_RESTORE_RE_PHY_OLD [num_bank]);
     217                          }
     218
     219                        internal_BANK_RETIRE_NUM_RENAME_UNIT    [num_bank] = x;
     220                        internal_BANK_RETIRE_NUM_INST           [num_bank] = y;
    176221                       
    177222                        if (_param->_have_port_front_end_id)
     
    199244                        PORT_WRITE(out_RETIRE_NUM_REG_RE_PHY_OLD    [x][y], entry->num_reg_re_phy_old   );
    200245                        PORT_WRITE(out_RETIRE_NUM_REG_RE_PHY_NEW    [x][y], entry->num_reg_re_phy_new   );
     246                        PORT_WRITE(out_RETIRE_RESTORE               [x][y],retire_restore);
     247                        PORT_WRITE(out_RETIRE_RESTORE_RD_PHY_OLD    [x][y],internal_BANK_RETIRE_RESTORE_RD_PHY_OLD [num_bank]);
     248                        PORT_WRITE(out_RETIRE_RESTORE_RE_PHY_OLD    [x][y],internal_BANK_RETIRE_RESTORE_RE_PHY_OLD [num_bank]);
    201249                       
    202250                        // Event -> rob must be manage this event
Note: See TracChangeset for help on using the changeset viewer.