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