Rocket - tilelink - first

本文详细介绍了在Edges模块中first、last及done标志的实现原理及其应用,包括辅助函数firstlastHelper的工作机制,如何判断burst的首个与末尾beat,以及burst传输是否完成等关键内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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) 返回
 
返回当前值和下一个时钟周期的值:
 

转载于:https://www.cnblogs.com/wjcdx/p/11193959.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值