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) 返回 返回当前值和下一个时钟周期的值: 相关文章
- 03-23LeetCode-41-First Missing Positive
- 03-23leetcode 41. First Missing Positive
- 03-23LeetCode 41 First Missing Positive
- 03-23Rocket - tilelink - AtomicAutomata
- 03-23Influx DB first explore
- 03-23first集合及follow集合
- 03-23IT经典书籍——Head First系列…
- 03-23Entity Framework应用:使用Code First模式管理事务
- 03-23my first blog by cnblogs
- 03-23leetcode 704. Binary Search 、35. Search Insert Position 、278. First Bad Version