Ignore:
Timestamp:
Apr 23, 2010, 4:41:46 PM (15 years ago)
Author:
guthmull
Message:

Add SC randomization to V1

Location:
trunk/modules/vci_mem_cache_v1/caba/source
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/modules/vci_mem_cache_v1/caba/source/include/vci_mem_cache_v1.h

    r2 r32  
    489489      sc_signal<int>       r_llsc_fsm;          // FSM state
    490490      sc_signal<data_t>    r_llsc_data;             // read data word
     491      sc_signal<uint32_t>  r_llsc_lfsr;         // lfsr for random introducing
    491492      sc_signal<copy_t>    r_llsc_i_copies;         // bit_vector of copies
    492493      sc_signal<copy_t>    r_llsc_d_copies;         // bit_vector of copies
  • trunk/modules/vci_mem_cache_v1/caba/source/src/vci_mem_cache_v1.cpp

    r19 r32  
    3333//#define IDEBUG
    3434//#define DEBUG_VCI_MEM_CACHE 2
     35#define RANDOMIZE_SC
    3536
    3637namespace soclib { namespace caba {
     
    469470      r_init_rsp_to_tgt_rsp_req = false;
    470471
     472      r_llsc_lfsr                       = -1;
    471473      r_llsc_to_tgt_rsp_req         = false;
    472474      r_llsc_to_ixr_cmd_req         = false;
     
    23642366                r_llsc_i_copies = entry.i_copies;
    23652367                r_llsc_count    = entry.count;
    2366                 if ( entry.valid )  r_llsc_fsm = SC_DIR_LOCK;
    2367                 else                r_llsc_fsm = LLSC_TRT_LOCK;
     2368              /* to avoid livelock, force the atomic access to fail (pseudo-)randomly */
     2369                bool fail = (r_llsc_lfsr % (64) == 0);
     2370                r_llsc_lfsr = (r_llsc_lfsr >> 1) ^ ((-(r_llsc_lfsr & 1)) & 0xd0000001);
     2371#ifdef RANDOMIZE_SC
     2372                if(fail){
     2373#else
     2374                if(0){
     2375#endif
     2376                  r_llsc_fsm = SC_RSP_FALSE;
     2377                } else {
     2378                  if ( entry.valid )  r_llsc_fsm = SC_DIR_LOCK;
     2379                  else                r_llsc_fsm = LLSC_TRT_LOCK;
     2380                }
    23682381              } else {
    23692382                r_llsc_fsm = SC_RSP_FALSE;
Note: See TracChangeset for help on using the changeset viewer.