https://mp.weixin.qq.com/s/MHW_aBSL72YNee9bVWWeaw

 
简单介绍HintHandler的实现。
 
 
1. 基本功能
 
实现Hint请求的处理逻辑。
 
类参数:
passthrough:是否把Hint请求透传给下游节点处理;
 
2. diplomacy node
 
HintHandler是一个适配器节点:
 
1) clientFn
 
把HintHandler看到的上游节点的参数,转换为下游节点看到的HintHandler节点的参数。
 
这里把原sourceId左移一位,最低位用于编码信息。
 
2) managerFn
 
把HintHandler看到的下游节点的参数,转换为上游节点看到的HintHandler节点的参数。
 
这里根据情况,为下游节点新增支持Hint操作的能力:
a. 如果下游节点支持Hint操作,并且允许透传Hint请求(passthrough),那么直接使用下游节点的能力;否则:
b. 如果下游节点支持PutPartial,则使用PutPartial的能力;否则:
c. 如果下游节点的区域类型为GET_EFFECTS,则使用Get的能力;否则:
d. 告诉上游节点,不支持Hint操作;
 
3. lazy module
 
lazy module用于实现HintHandler的内部逻辑。
 
1) 成对的输入边和输出边
 
 
2) 默认in直连out
 
 
3) 确保HintHandler支持Hint请求
 
注意这里使用的是edgeIn,而不是edgeOut。edgeIn.manager是指HintHandler节点作为的manager。
 
这里判断的意思就是确保HintHandler支持Hint请求。无论是透传,还是由HintHandler代为处理。
 
4) usePP & useGet
 
usePP:使用PutPartial消息为下游manager处理Hint请求;
useGet:使用Get消息为下游manager处理Hint请求;
 
5) mapPP & mapGet
 
判断当前请求的地址对应的manager使用PP还是Get处理Hint请求:
 
6) 转换请求到out.a
 
 
7) 转换响应到in.d
 
A. 如果使用Get处理Hint,则需要丢弃响应消息AccessAckData:
 
a. 如果Get的能力小于或等于beatBytes,就不存在burst请求,都是单beat请求。这个单beat请求会直接被转换(transform),所以不需要丢弃;
b. 如果Get的能力大于beatBytes,就需要把除去最后一个的beat丢弃;
 
B. transform是编码位,代表着是否需要把Get和PP的响应转换为HintAck:
 
8) 处理Acquire操作的source:
 
因为不需要HintHandler做处理,所以直接把source移位即可:
 
9) repeater
 
用于处理burst PutPartial转换:
 
A. 因为Hint请求不包含数据,所以其size可以很大。PutPartial包含数据,所以当size大于beatBytes时需要分成多个beat组成burst请求。
 
即一个size大于beatBytes的Hint请求,被转换成了包含多个beat的PutPartial请求。
a. The Control type signals (i.e., *_address, *_size,*_param) must be held constant for the entire burst.
b. mask为0,不真的写入数据:
 
B. 直到所有的PutPartial beats发送完成,才允许in.a继续输入:
repeater.io.repeat在最后一个beat之前的beat时都为真。意味着即便从repeater.io.deq取走数据,repeater.io.full也为真:
 
此时repeater.io.enq.ready为假:
 
所以这里repeater的用法与Fragmenter中类似,都是用来Hold住in.a而等待out.a的。
 
4. 默认连接与特定连接
 
1) 默认连接
 
默认out与in直连:
即in.a/b/c/d/e与out.a/b/c/d/e分别相连,这属于bulk connect。
 
2) 连接特定域
 
这里又把新的输出连接到out.a的部分域上:
 
3) 如何区分?
 
这两者如何共处呢?
这里且先提出问题,等后续再研究。

Rocket - tilelink - HintHandler的更多相关文章

  1. Rocket - tilelink - RegisterRouter

    https://mp.weixin.qq.com/s/DaJhf7hEoWsEi_AjwSrOfA   简单介绍RegisterRouter的实现.   ​​   1. 基本介绍   实现挂在Tile ...

  2. Rocket - tilelink - Nodes

    https://mp.weixin.qq.com/s/KJ8pVH76rdxPOZ1vE3QlKA   简单介绍tilelink对Diplomacy Nodes的实现.   ​​   1. TLImp ...

  3. Rocket - tilelink - AsyncCrossing

    https://mp.weixin.qq.com/s/v8plWCBD8vZkxykjJe4TCg   介绍AsyncCrossing的实现,主要介绍如何实现diplomacy Node和LazyMo ...

  4. Rocket - tilelink - mask

    https://mp.weixin.qq.com/s/Gqv09RIgSSg5VKe-wb4aGg   讨论tilelink中使用MaskGen生成mask的用法.   1. tilelink中的ma ...

  5. Rocket - tilelink - Parameters

    https://mp.weixin.qq.com/s/1I6DcONr0Mg7xiX8F1C7SQ   简单介绍TileLink相关的参数实现(具体问题暂时不展开,后续用到时再做分析).   ​​   ...

  6. Rocket - tilelink - Bundles

    https://mp.weixin.qq.com/s/jrqBg2AIpQogBrpwNXjmwg   简单介绍Bundles文件中对TileLink规范(1.7.1)的定义. 参考链接:https: ...

  7. Rocket - tilelink - TLBusWrapper.to

    https://mp.weixin.qq.com/s/jSnhBzU5_ayQCg5fWAcx-g 简单介绍TLBusWrapper.to()的实现.主要介绍确定this{...}对应代码的过程. 1 ...

  8. Rocket - tilelink - BusWrapper

    https://mp.weixin.qq.com/s/03BvgTNQtD75Guco6gUGQg   简单介绍BusWrapper的实现.   1. HasTLBusParams   定义SoC的挂 ...

  9. Rocket - tilelink - Xbar

    https://mp.weixin.qq.com/s/UXFHYEQaYotWNEhshro68Q   简单介绍Xbar的实现.   ​​   1. 基本介绍   用于为Xbar的输入和输出连接生成内 ...

随机推荐

  1. maven的安装及环境变量配置

    1.下载maven 2.解压至该路径 3. 新建环境变量MAVEN_HOME , 值为maven包点开路径 环境变量配置: 4. 编辑环境变量Path,追加%MAVEN_HOME%\bin\ 5.一路 ...

  2. linux的用户管理、组管理

    用户管理:centos系统是一个多用户系统 用户分为三类: 超级用户(root) 用户id为 0 伪用户 用户id为1-499,虽然存在,但是不能用户登录 普通用户 用户id为500-60000 用户 ...

  3. Dynamics 9.0 安装好后 公告出现 提示:出现错误。 请稍等片刻,然后重试。 如果问题仍然存在,请与管理员联系。

    此问题为系统的Bug,示例图如下: 解决方案为修改存储过程 p_RetrievePosts,将startDate参数的默认值改成 1900-01-01,endDate参数的默认值改成 9999-12- ...

  4. 王颖奇 201771010129《面向对象程序设计(java)》第七周学习总结

    实验七 继承附加实验 实验时间 2018-10-11 1.实验目的与要求 (1)进一步理解4个成员访问权限修饰符的用途: A.仅对本类可见-private B.对所有类可见-public C.对本包和 ...

  5. Coursera课程笔记----Write Professional Emails in English----Week 1

    Get to Know Basic Email Writing Structures(Week 1) Introduction to Course Email and Editing Basics S ...

  6. 谈谈Spring bean的生命周期(一)

    简介 本片文章主要讲Spring IOC容器中 bean 的生命周期 Spring bean 生命周期 Spring 中bean的声明周期 可以分为如下4个阶段: 实例化阶段--Instantiati ...

  7. Java抽象类的学习体会与注意事项

    一.定义 抽象类:用abstract声明的class为抽象类. 抽象方法:用abstract声明的方法为抽象方法. 抽象方法特点:只有方法定义,没有方法的实现(函数体) 抽象类的子类都必须实现它的方法 ...

  8. Redis学习笔记(二) 链表

    链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度. redis中链表应用广泛,如list中就使用了链表. 每一个链表节点使用listNode结构标识( ...

  9. 跨站点请求伪造(CSRF)总结和防御

    什么是CRSF 构建一个地址,比如说是删除某个博客网站博客的链接,然后诱使已经登录过该网站的用户点击恶意链接,可能会导致用户通过自己的手将曾经发布在该网站的博客在不知情的情况下删除了.这种构建恶意链接 ...

  10. 解决Eclipse添加新server时无法选择Tomcat7.0

    新添加tomcat时 出现如下图情况: 解决方法:这时打开工作空间目录下的.metadata\.plugins\org.eclipse.core.runtime\.settings文件夹,删除org. ...