其他分享
首页 > 其他分享> > Rocket - tilelink - first

Rocket - tilelink - first

作者:互联网

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

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

标签:tilelink,Rocket,burst,beat,传输,beats,last,first
来源: https://www.cnblogs.com/wjcdx/p/11193959.html