Ignore:
Timestamp:
Jan 28, 2013, 1:59:32 PM (11 years ago)
Author:
joannou
Message:

Introducing new generic_llsc_local_table and generic_llsc_global_table components :
These two tables implement the new scalable LL/SC mechanism for TSAR.

  • generic_llsc_local_table, integrated in the vci_cc_vache_wrapper_v4 component. The table is accessed by the DCACHE_FSM. A two step registration (LL cmd/ LL rsp) sets a signature allocated by the global table for the pending LL/SC operation. An SC operation consumes the registration.
  • generic_llsc_global_table, integrated in the vci_mem_cache_v4 component. The table is accessed by the READ_FSM, WRITE_FSM, CAS_FSM, when accessing the directory. It generates a signature for LL registrations and performs SC operation by checking registration's valididty with that signature. SW operations simply invalidate a registrations.

N.B. :

  • The sizes of the tables are parameters, and are NOT a function of the architecture's size (scalable mechanism).
  • The LL are handled by the MEMCACHE in the READ_FSM.
  • The SC are handled by the MEMCACHE in the WRITE_FSM, and are no longer CAS emulated. CAS operation is now only performed by hardware mechanisms.
  • An extra field is added to the xram transaction table to save a pending LL's signature.
File:
1 edited

Legend:

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

    r253 r291  
    3232    std::vector<be_t>   wdata_be;       // be for each data in the write buffer
    3333    bool                rerror;         // error returned by xram
     34    data_t              ll_key;         // LL key returned by the llsc_global_table
    3435
    3536    /////////////////////////////////////////////////////////////////////
     
    127128        wdata.assign(source.wdata.begin(),source.wdata.end()); 
    128129        rerror      = source.rerror;
     130        ll_key      = source.ll_key;
    129131    }
    130132
     
    325327    // - data : the data to write (in case of write)
    326328    // - data_be : the mask of the data to write (in case of write)
     329    // - ll_key  : the ll key (if any) returned by the llsc_global_table
    327330    /////////////////////////////////////////////////////////////////////
    328331    void set(const size_t index,
     
    336339            const size_t word_index,
    337340            const std::vector<be_t> &data_be,
    338             const std::vector<data_t> &data)
     341            const std::vector<data_t> &data,
     342            const data_t ll_key = 0)
    339343    {
    340344        assert( (index < size_tab)
     
    354358        tab[index].read_length      = read_length;
    355359        tab[index].word_index       = word_index;
     360        tab[index].ll_key           = ll_key;
    356361        for(size_t i=0; i<tab[index].wdata.size(); i++)
    357362        {
Note: See TracChangeset for help on using the changeset viewer.