Ignore:
Timestamp:
Dec 17, 2013, 3:21:07 PM (10 years ago)
Author:
devigne
Message:

Merge with the latest trunk (concurrent access to a register CONFIG_FSM)
Modification processing software invalidations to memcache level.

When a software memcache invalidation, it does not write the dirty data in the
XRAM (and therefore does not reserve space in the TRT). This poses a problem
when processing CLEANUP_DATA on a line NCC because CLEANUP_FSM expects to find
a placeholder in the TRT.

To overcome this problem, the flit DSPIN a multi-inval now contains a bit to
indicate that the invalidation from a control configuration (software
invalidation level memcache).

At the reception of this message invalidation in the L1 cache, it retrieves the
value of the field DSPIN IS_CONFIG. When processing invalidation (
DCACHE_CC_INVAL ), the value of this field is checked. Two scenarios are
possible:

  • 1st case : The INVAL concerns a line NCC but not from a software invalidation (IS_CONFIG = 0), the CLEANUP sent then follows the classical treatment of invalidation of a line NCC (sends a CLEANUP_NCC with or without data).
  • 2nd case : The INVAL provides a line NCC from a software invalidation (IS_CONFIG = 1) : same treatment as was CLEANUP line CC.

Thus in the case of interest (software invalidation on a line NCC), the CLEANUP
received by the memcache will be treated as one line CC.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/RWT/communication/dspin_dhccp_param/caba/source/include/dspin_dhccp_param.h

    r477 r604  
    9494 *
    9595 * flit 1
    96  * ----------------------------------------------------------------------------------------------
    97  * EOP:0 | DEST(14 bits) | X(4 bits) | MEMC_ID(14 bits) | UPDT_INDEX(4 bits) | TYPE:0b1X  | BC:0
    98  * ----------------------------------------------------------------------------------------------
    99  *                                                                           | X: 0 DATA  |
    100  *                                                                           |    1 INST  |
     96 * ------------------------------------------------------------------------------------------------------------------
     97 * EOP:0 | DEST(14 bits) | X (3 bits) | IS_CONFIG (1 bit) | MEMC_ID(14 bits) | UPDT_INDEX(4 bits) | TYPE:0b1X  | BC:0
     98 * ------------------------------------------------------------------------------------------------------------------
     99 *                                                                                                | X: 0 DATA  |
     100 *                                                                                                |    1 INST  |
    101101 * flit 2
    102102 * ----------------------------------------------------------------------------------------------
     
    182182    static const uint8_t  CLEANUP_DATA_UPDT_SHIFT      = 0;
    183183    static const uint64_t CLEANUP_DATA_UPDT_MASK       = ((1ULL<<32)-1);
    184     static const uint8_t  CLEANUP_NCC_SHIFT  = 5;
    185     static const uint64_t CLEANUP_NCC_MASK   = 1;
     184    static const uint8_t  CLEANUP_NCC_SHIFT            = 5;
     185    static const uint64_t CLEANUP_NCC_MASK             = 1;
    186186
    187187    static const uint8_t  MULTI_ACK_DEST_SHIFT         = CLEANUP_DEST_SHIFT;
     
    205205    static const uint8_t  MULTI_INVAL_NLINE_SHIFT      = 0;
    206206    static const uint64_t MULTI_INVAL_NLINE_MASK       = ((1ULL<<NLINE_WIDTH)-1);
     207    static const uint8_t  MULTI_INVAL_IS_CONFIG_SHIFT  = 21;
     208    static const uint64_t MULTI_INVAL_IS_CONFIG_MASK   = 1;
    207209
    208210    static const uint8_t  MULTI_UPDT_DEST_SHIFT        = MULTI_INVAL_DEST_SHIFT;
     
    300302      MULTI_INVAL_UPDT_INDEX,
    301303      MULTI_INVAL_NLINE,
     304      MULTI_INVAL_IS_CONFIG,
    302305
    303306      MULTI_UPDT_DEST,
     
    343346        GET_FIELD(flit,MULTI_INVAL_UPDT_INDEX);
    344347        GET_FIELD(flit,MULTI_INVAL_NLINE);
     348        GET_FIELD(flit,MULTI_INVAL_IS_CONFIG);
    345349        GET_FIELD(flit,MULTI_UPDT_DEST);
    346350        GET_FIELD(flit,MULTI_UPDT_SRCID);
     
    385389        SET_FIELD(flit,value,MULTI_INVAL_UPDT_INDEX);
    386390        SET_FIELD(flit,value,MULTI_INVAL_NLINE);
     391        SET_FIELD(flit,value,MULTI_INVAL_IS_CONFIG);
    387392        SET_FIELD(flit,value,MULTI_UPDT_DEST);
    388393        SET_FIELD(flit,value,MULTI_UPDT_SRCID);
Note: See TracChangeset for help on using the changeset viewer.