62 | | === 3.1 VCI encoding of the various transaction types on the direct network === |
63 | | |
64 | | There is 5 transaction types (READ, WRITE, LL, SC, CAS) on the direct network, and there is four sub-types for READ transactions. |
65 | | Both the VCI CMD field and the VCI PKTID fields are used for the transaction type encoding. When a given initiator can send several simultaneous |
66 | | transaction with the same type (such as several WRITE simultaneous WRITE transactions), the VCI TRDID field is used. |
67 | | |
| 62 | === 3.1 VCI encoding of the various transaction types on the direct network === |
| 63 | |
| 64 | There are 5 transaction types ('''READ''', '''WRITE''', '''LL''', '''SC''', '''CAS''') on the direct network, and there are four sub-typVCI '''CMD''' field and the VCI '''PKTID''' fields are used for the transaction type encoding. When a given initiator can send several se (such as several simultaneous '''WRITE''' transactions), the VCI '''TRDID''' field is used. |
| 65 | |
| 66 | Possible values for the VCI '''CMD''' field are : |
| 67 | |
| 68 | || encoding (2 bits) || value || |
| 69 | || || || |
| 70 | || 00 || CMD_NOP / CMD_STORE_COND || |
| 71 | || 01 || CMD_READ || |
| 72 | || 10 || CMD_WRITE || |
| 73 | || 11 || CMD_LOCKED_READ || |
| 74 | |
| 75 | The '''PKTID''' field in TSAR is 4 bits long. Only 8 types of transaction are used : the MSB is ignored (reserved for future use). A sper each '''PKTID''' value, as described in the table below : |
| 76 | |
| 77 | || encoding (4 bits) || '''PKTID''' value || '''CMD''' value || |
| 78 | || || || || |
| 79 | || X000 || TYPE_READ_DATA_UNC || CMD_READ || |
| 80 | || X001 || TYPE_READ_DATA_MISS || CMD_READ || |
| 81 | || X010 || TYPE_READ_INS_UNC || CMD_READ || |
| 82 | || X011 || TYPE_READ_INS_MISS || CMD_READ || |
| 83 | || X100 || TYPE_WRITE || CMD_WRITE || |
| 84 | || X101 || TYPE_CAS || CMD_NOP || |
| 85 | || X110 || TYPE_LL || CMD_LOCKED_READ || |
| 86 | || X111 || TYPE_SC || CMD_STORE_COND || |
| 87 | |
| 88 | Remarks on the '''PKTID''' field encoding : |
| 89 | * for a TYPE_READ, bit 0 is set (resp. not set) for a miss (resp. uncached) request |
| 90 | * for a TYPE_READ, bit 1 is set (resp. not set) for an instruction (resp. data) request |
| 91 | * bit 2 can be used to check for a TYPE_READ (bit 2 = 0) |
| 92 | |
| 93 | ==== 3.1.1 VCI READ transaction ==== |
| 94 | |
| 95 | A VCI '''READ''' command packet contains one flit. |
| 96 | * The VCI '''CMD''' field must be set to CMD_READ. |
| 97 | * The VCI '''TRDID''' field is not used by the L1 cache. It is used by I/O controlers with multi channel DMA capabilities to transmit t |
| 98 | * The VCI '''PKTID''' field can be any of the 4 TYPE_READ_* of the previous table. |
| 99 | |
| 100 | A VCI '''READ''' response packet returns either |
| 101 | * A single flit containing the uncached data in the '''RDATA''' field (for a '''PKTID''' = TYPE_READ_*_UNC). |
| 102 | * up to 16 flits containing one word per flit in the '''RDATA''' field (for a '''PKTID''' = TYPE_READ_*_MISS). |
| 103 | |
| 104 | ==== 3.1.2 VCI WRITE transaction ==== |
| 105 | |
| 106 | A VCI '''WRITE''' command packet contains from 1 to 16 flits within the same cache line. |
| 107 | * The VCI '''CMD''' field must be set to CMD_WRITE. |
| 108 | * The VCI '''TRDID''' field is used by the L1 cache to index its write buffer (4 write buffer slots of 4 words each). It is used by I/Olities to transmit the channel index. |
| 109 | * The VCI '''PKTID''' field must be TYPE_WRITE. |
| 110 | |
| 111 | A VCI '''WRITE''' response packet always returns a single flit with a 0 value in the '''RDATA''' field. |
| 112 | |
| 113 | ==== 3.1.3 VCI LL (Linked Load) transaction ==== |
| 114 | |
| 115 | A VCI '''LL (Linked Load)''' command packet contains a single flit. |
| 116 | ('''N.B.''': this request is only sent by a L1 cache and can only target a memory cache) |
| 117 | * The VCI '''CMD''' field must be set to CMD_LOCKED_READ. |
| 118 | * The VCI '''TRDID''' field is not used by the L1 cache. |
| 119 | * The VCI '''PKTID''' field must be TYPE_LL. |
| 120 | |
| 121 | A VCI '''LL (Linked Load)''' response packet contains 2 flits : |
| 122 | * The first flit contains in the '''RDATA''' field a signature returned by the memory cache for this LL reservation. |
| 123 | * The second flit contains in the '''RDATA''' field the data that has been read in the memory cache. |
| 124 | |
| 125 | ==== 3.1.4 VCI SC (Store Conditional) transaction ==== |
| 126 | |
| 127 | A VCI '''SC (Store Conditionnal)''' command packet contains 2 flits. |
| 128 | ('''N.B.''': this request is only sent by a L1 cache and can only target a memory cache) |
| 129 | * The VCI '''CMD''' field must be set to CMD_STORE_COND. |
| 130 | * The VCI '''TRDID''' field is not used by the L1 cache. |
| 131 | * The VCI '''PKTID''' field must be TYPE_SC. |
| 132 | * The first flit contains in the '''WDATA''' field the signature obtained with the last LL operation at this address. |
| 133 | * The second flit contains in the '''WDATA''' field the data to be written. |
| 134 | |
| 135 | A VCI '''SC (Store Conditional)''' response packet contains 1 flit. |
| 136 | * The '''RDATA''' field contains 0 (resp. 1) to indicate an SC success (resp. failure). |
| 137 | |
| 138 | ==== 3.1.5 VCI CAS (Compare & Swap) transaction ==== |
| 139 | |
| 140 | A VCI '''CAS (Compare & Swap)''' command packet contains 2 flits. |
| 141 | ('''N.B.''': this request is only sent by a L1 cache and can only target a memory cache) |
| 142 | * The VCI '''CMD''' field must be set to CMD_NOP. |
| 143 | * The VCI '''TRDID''' field is not used by the L1 cache. |
| 144 | * The VCI '''PKTID''' field must be TYPE_CAS. |
| 145 | * The first flit contains in the '''WDATA''' field the old value of the data to be overwritten. |
| 146 | * The second flit contains in the '''WDATA''' field the new value to be written. |
| 147 | |
| 148 | A VCI '''CAS (Compare & Swap)''' response packet contains 1 flit. |
| 149 | * The '''RDATA''' field contains 0 (resp. 1) to indicate a CAS success (resp. failure). |