https://mp.weixin.qq.com/s/6XX0CZHoDotIgLbNDSIUog

 
简单介绍Filter的实现。
 
 
1. 基本介绍
 
使用过滤器过滤掉client和manager的一部分能力。
 
2. ManagerFilter/ClientFilter
 
用于对manager和client进行过滤:
a. 若过滤掉则返回None;
b. 若没过滤掉,也可能进行更改;
 
3. mIdentity/cIdentity
 
不产生任何变化的过滤器:
 
4. diplomacy node
 
1) TLAdapterNode
 
是一个适配器节点。
 
2) clientFn
 
把本节点看到的client参数,映射为下游节点看到的client参数:
a. 把client都经过过滤器处理一遍;
b. 确保过滤器过滤掉一部分能力:
这里IDEA提示把out.map换为out.foreach比较好。
 
看最后一个:require(!c.requestFifo || o.requestFifo)
从中可以看出:不需要fifo比需要fifo能力强。不需要fifo说明client具备请求序列化的能力,需要fifo则client自身不具备,需要manager使用fifo来为之实现。
a. 若c.requestFifo=false,表明c不需要fifo,那么无论o需不需要fifo都不超过c的能力;
b. 若c.requestFifo=true, 则o.requestFifo=true,即如果c不具备序列化的能力,那么o也不能具备;
 
3) managerFn
 
把本节点看到的manager参数,映射为上游节点看到的manager参数:
a. 把manager都经过过滤器处理一遍;
b. 确保过滤器过滤掉一部分能力:
 
也看最后一个:require(o.fifoId.isEmpty || m.fifoId == o.fifoId)
从中可以看出:具有fifoId的能力要强于没有fifoId。原因在于,有fifoId则内部实现了针对该fifoId的序列化功能。
 
5. lazy module
 
用于实现内部逻辑。
 
 
1) 成对出现的输入边和输出边
 
 
2) 输入边和输出边直连即可
 
由此可以看出Filter的功能,主要通过diplomacy node实现。
 
3) 若不支持Acquire操作,则默认关闭channel b/c/e:
 
 
6. object TLFilter
 
其中定义了一些过滤器实例。
 
1) mIdentity/cIdentity
 
不做改变:
 
2) mSelectIntersect
 
这是一个manager过滤器:
把manager中的地址集合与参数select求交集,并调整transfer的能力。
 
3) mHideContained
 
 
重构一下:
只保留没有被container完全包含的地址集合。
 
4) mHideCacheable
 
去除支持Cache的manager:
 
5) mSelectCacheable
 
去除不支持Cache的manager:
 
6) mMaskCacheable
 
去除支持cache的manager的cache能力:
 
7) mSelectAndMaskCacheable
 
a. 去除支持cache的manager的cache能力;
b. 去除不支持cache的manager;
 
8) cHideCaching
 
去除支持cache的client:
 
9) cSelectCaching
 
选择支持cache的client:
 
 
 
 

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

  1. Rocket - tilelink - RegisterRouter

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

  2. Rocket - tilelink - Xbar

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

  3. Rocket - tilelink - Nodes

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

  4. Rocket - tilelink - AsyncCrossing

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

  5. Rocket - tilelink - mask

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

  6. Rocket - tilelink - Parameters

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

  7. Rocket - tilelink - Bundles

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

  8. Rocket - tilelink - TLBusWrapper.to

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

  9. Rocket - tilelink - BusWrapper

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

随机推荐

  1. P2002 消息扩散(缩点)

    描述:https://www.luogu.com.cn/problem/P2002 有n个城市,中间有单向道路连接,消息会沿着道路扩散,现在给出n个城市及其之间的道路,问至少需要在几个城市发布消息才能 ...

  2. 51单片机putchar函数的说明

    原文排版远些乱,整理了一下. #include <reg51.h> #define XON 0x11 /*串口流控制符 启动*/ #define XOFF 0x13 /*串口流控制符 中断 ...

  3. Go语言入门教程系列——函数、循环与分支

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Golang专题的第四篇,这一篇文章将会介绍golang当中的函数.循环以及选择判断的具体用法. 函数 在之前的文章当中其实我们已经接 ...

  4. [hdu1847]博弈,推理

    题意:一堆石子,有n个,两个人轮流取,每次都只能取2的幂次方个数,不能取的人输 思路:首先0是必败态,2的所有幂次都是必胜态.由于选的数模3只能是1或2,恰好又都是2的幂次,0,.3都为必败态,猜想3 ...

  5. 腾讯面试居然跟我扯了半小时的CountDownLatch

    一个长头发.穿着清爽的小姐姐,拿着一个崭新的Mac笔记本向我走来,看着来势汹汹,我心想着肯定是技术大佬吧!但是我也是一个才华横溢的人,稳住我们能赢. 面试官:看你简历上有写熟悉并发编程,CountDo ...

  6. AXI总线slave模式下接收数据---verilog代码

    AXI总线slave模式下接收数据---verilog代码 `timescale 1ns / 1ps ///////////////////////////////////////////////// ...

  7. python --字符串学习

    一 转义字符 借用一个特殊的方法表示一系列不方便写出的内容,比如回车键,换行符,退格键 借助反斜杠字符,一旦出现反斜杠,则反斜杠后面一个或者几个字符表示已经不是原来的意思了 在字符串中,一旦出现了斜杠 ...

  8. 重要的serialVersionUID

    所有序列化的DO都需要加上 serialVersionUID 否则未来可能就有一个坑在等着你 当你需要修改序列化的实体累的时候 之前缓存内容反序列化就会失败,如果这个缓存很多个地方都在存取 使用 那么 ...

  9. JS中各种变量类型在条件判断为false的情况

    var a = undefined; ->false var a = 0; ->false var a = 0.0; ->false var a = NaN; ->false ...

  10. node的querystring

    querystring.stringify({name:''scott",course:['jade','java'],from=''}); => 'name=scott&co ...