#ifndef DSPIN_DHCCP_PARAMS_H #define DSPIN_DHCCP_PARAMS_H #include #include namespace soclib { namespace caba { /* * L1 cache to Memory Cache command packets * * CLEANUP * * flit 1 * ---------------------------------------------------------------------------------------------- * EOP:0 | DEST(10 bits) | SRCID(14 bits) | NLINE MSB(2 bits) | WAY_INDEX(4 bits) | TYPE:0b1X * ---------------------------------------------------------------------------------------------- * | X: 0 DATA | * | 1 INST | * flit 2 * ---------------------------------------------------------------------------------------------- * EOP:1 | NLINE(32 bits) * ---------------------------------------------------------------------------------------------- * * MULTICAST ACKNOWLEDGEMENT * * flit 1 * ---------------------------------------------------------------------------------------------- * EOP:1 | DEST(10 bits) | X(16 bits) | UPDT_INDEX(4 bits) | TYPE:0b00 * ---------------------------------------------------------------------------------------------- */ /* * Memory Cache to L1 cache command packets * * CLEANUP ACKNOWLEDGEMENT * * flit 1 * ---------------------------------------------------------------------------------------------- * EOP:1 | DEST(14 bits) | X | SET_INDEX(16 bits) | WAY_INDEX(4 bits) | TYPE:0b100(3 bits) | BC:0 * ---------------------------------------------------------------------------------------------- * * MULTICAST UPDATE * * flit 1 * ---------------------------------------------------------------------------------------------- * EOP:0 | DEST(14 bits) | X(3 bits) | MEMC_ID(14 bits) | UPDT_INDEX(4 bits) | TYPE:0b01X | BC:0 * ---------------------------------------------------------------------------------------------- * | X: 0 DATA | * | 1 INST | * flit 2 * ---------------------------------------------------------------------------------------------- * EOP:0 | X | WORD_INDEX(4 bits) | NLINE (34 bits) * ---------------------------------------------------------------------------------------------- * * flit 3 * ---------------------------------------------------------------------------------------------- * EOP:0 | X(3 bits) | BE(4 bits) | WDATA(32 bits) * ---------------------------------------------------------------------------------------------- * * flit N * ---------------------------------------------------------------------------------------------- * EOP:1 | X(3 bits) | BE(4 bits) | WDATA(32 bits) * ---------------------------------------------------------------------------------------------- * * MULTICAST INVALIDATE * * flit 1 * ---------------------------------------------------------------------------------------------- * EOP:0 | DEST(14 bits) | X(3 bits) | MEMC_ID(14 bits) | UPDT_INDEX(4 bits) | TYPE:0b00X | BC:0 * ---------------------------------------------------------------------------------------------- * | X: 0 DATA | * | 1 INST | * flit 2 * ---------------------------------------------------------------------------------------------- * EOP:1 | X(5 bits) | NLINE (34 bits) * ---------------------------------------------------------------------------------------------- * * BROADCAST INVALIDATE * * flit 1 * | BOUNDING BOX(20 bits) | * ---------------------------------------------------------------------------------------------- * EOP:0 | XMIN | XMAX | YMIN | YMAX | MEMC_ID(14 bits) | NETWORK_RESERVED(4 bits) | BC:1 * ---------------------------------------------------------------------------------------------- * * flit 2 * ---------------------------------------------------------------------------------------------- * EOP:1 | X | UPDT_INDEX(4 bits) | NLINE (34 bits) * ---------------------------------------------------------------------------------------------- */ /* * Utility MACROS */ #define GET_FIELD(x,y)\ case y: return ((x >> y##_SHIFT) & y##_MASK) #define SET_FIELD(x,y,z)\ case z: x |= ((y & z##_MASK) << z##_SHIFT);break template class DspinDhccpParam { public: static const uint8_t from_memc_flit_width = 40; static const uint8_t from_l1_flit_width = 33; static const uint8_t UPDT_INDEX_WIDTH = 4; static const uint8_t NLINE_WIDTH = 34; static const uint8_t SRCID_WIDTH = 14; static const uint8_t GLOBALID_WIDTH = 10; static const uint8_t MEMC_TYPE_WIDTH = 3; static const uint8_t WORD_INDEX_WIDTH = 4; static const uint8_t BE_WIDTH = 4; static const uint8_t DATA_WIDTH = 32; static const uint8_t SET_INDEX_WIDTH = 16; static const uint8_t WAY_INDEX_WIDTH = 4; static const uint8_t BROADCAST_BOX_WIDTH = 20; static const uint8_t L1_TYPE_WIDTH = 2; static const uint8_t FROM_L1_TYPE_SHIFT = 1; static const uint64_t FROM_L1_TYPE_MASK = ((1ULL<