Rocket - tilelink - first

https://mp.weixin.qq.com/s/0nzkV4K1osNEQzrtITYxmw

  介绍Edges中first/last/done的实现。   ​Rocket - tilelink - first​   1. firstlastHelper   辅助函数,用于确定burst中的第一个、最后一个、是否已完成、第几个beat。 ​Rocket - tilelink - first​ a. beats1 = beats - 1,比如如果需要4个beats,则beats1 = 3; b. beats是2的幂: beats = 2^size / 2^log2Ceil(beatBytes); c. first:counter为0时,是burst的第一个beat; d. last:counter为1或总数为1时,是burst的最后一个beat; e. done:最后一个beat输出时,标志着burst完成; f. count:当前beat的编号:count = beats1 & ~counter1   下面简单推理一下,并非证明。 ​Rocket - tilelink - first​ 可以看到,只有当beats为2的幂,beats1低位全1时,这种算法才成立。   2. first   判断是否burst的第一个beat: ​Rocket - tilelink - first​   3. last   判断是否burst的最后一个beat: ​Rocket - tilelink - first​   4. done   判断burst是否传输完成: ​Rocket - tilelink - first​   5. firstlast   同时取出first/last/done三个标志: ​Rocket - tilelink - first​   6. count   取出当前beat的编号: ​Rocket - tilelink - first​   7. addr_inc   把返回的beat编号转换为地址的增加值,方便后续传输: ​Rocket - tilelink - first​   8. inFlight   判断总线上是否有消息(message)在传输,以及正在进行传输(请求/响应对)的数目。   ​Rocket - tilelink - first​   1) flight   记录当前传输的数目: ​Rocket - tilelink - first​ a. client.endSourceId为请求端的数目; b. 3为能发起请求通道(channel)的数目,即a/c/e三个channel; c. 所以3*client.endSourceId为可以同时存在的传输的总数目;   2) bce   判断是否支持bce通道,即是否符合TL-C标准: ​Rocket - tilelink - first​   3) first/last   获取burst的beat标志: ​Rocket - tilelink - first​   4) request/response   判断是request还是response: ​Rocket - tilelink - first​   5) inc   只有请求的第一个beat时,才增加传输数目: ​Rocket - tilelink - first​   6) dec   只有响应的最后一个beat时,才减少传输数目: ​Rocket - tilelink - first​   7) next_flight   ​Rocket - tilelink - first​ PopCount统计inc/dec中比特值为1的位的个数,与当前值相加减,即为下一个值。   8) 返回   返回当前值和下一个时钟周期的值: ​Rocket - tilelink - first​  
上一篇:Rocket - tilelink - HintHandler


下一篇:3ds max 渲染模型