https://mp.weixin.qq.com/s/UggNsNOeEMP-GhzlLiT-qQ

 
简单介绍Edges的实现。
 
 
1. TLEdge
 
包含client和manager两端的边,继承TLEdgeParameters类:
 
1) isAligned
 
判断访问的地址和访问大小是否对齐:
a. 如果最大访问大小为1个字节,则访问是对齐的;
b. 生成掩码(lgSize=2, maxLgSize=4, mask=0b1100)与地址相与,计算是否为0;
 
2) mask
 
根据访问的地址和大小生成访问的掩码:
 
3) isRequest
 
判断channel x是否在执行请求:
 
因为Grant/GrantData需要GrantAck响应,所以也是请求:
8.3.5: A Grant message is both a response and a request message...
 
4) isResponse
 
channel x是否在传输响应:
 
5) hasData
 
判断消息是否包含数据:
首先通过staticHasData检查是否能在构建期(软件代码执行)得到答案,如果不能则生成硬件逻辑在硬件中进行判断。
 
staticHasData根据client/manager的能力特点,看能否获得恒定的答案:
 
6) opcode
 
获取channel中的opcode部分:
 
可以看到这里使用的是TLDataChannel,而不是TLChannel:
a/b/c为TLAddrChannel,因为他们包含address这一项;
a/b/c/d为TLDataChannel,因为他们包含data这一项;
e既没有address也没有data,只是TLChannel;
 
7) param
8) size
9) data
10) corrupt
corrupt信号对应着规范中的valid。
 
11) mask
 
这里使用的为TLAddrChannel,只有a/b/c:
其中:a/b的mask外面提供,c的mask需要自己算;
 
full_mask都是自己算:
 
12) address
13) source
14) addr_hi/addr_lo
 
根据manager支持的位宽,把地址分成高低两部分:
a. 低的部分为按照manager.beatBytes对齐的部分。比如beatBytes=4, 则低2位为低的部分;
b. 其余的高位为高的部分;
 
15) numBeats
 
计算把数据传完需要多少个时钟周期,即burst包含多少个beat:
a. manager.maxTransfer <= manager.beatBytes:如果最大传输大小,小于数据总线位宽,则一定能在一个时钟周期(beat)内传完;
b. 否则,需要看数据大小是否大于位宽:size <= UInt(cutoff);
c. 若small为真,则右移cutoff后decode为0,需要一个beat;
d. 若small为假,则small为0,需要的beat数取决于decode;
e. UIntToOH(size, maxLgSize+1)=2^size;
f. 需要的beat数为:2^size / 2^cutoff;
g. hasData为假,则没有数据,需要一个beat;
 
16) first/last
 
2. TLEdgeOut
 
定义client到manager的输出边(EO),我为client,对端为manager。
 
1) Transfers
 
Cache Permission相关消息。
 
a. AcquireBlock
 
生成支持AcquireBlock的硬件连接:
 
b. AcquirePerm
 
 
c. Release
 
Release:
 
ReleaseData:
 
不会出错的ReleaseData:
 
d. ProbeAck
 
直接传入参数的ProbeAck:
 
通过b:Probe生成c:ProbeAck:
 
ProbeAckData同理;
 
e. GrantAck
 
 
2) Access
 
生成访问消息硬件连接。
 
a. Get
 
 
b. Put
考虑因素:
- PutFull/PutPartial;
- corrupt是否固定;
- mask是传入,还是自己生成;
 
c. Arithmetic
 
简单数学运算消息:
 
d. Logical
 
简单逻辑运算消息:
 
e. AccessAck
 
TLEdgeOut从client连向manager:
- client发起的Access消息从channel a传递,对应的AccessAck从b传回;
- client发出的AccessAck消息从channel c传递,作为manager通过channel b传来的Access消息的回应;
 
f. Hint
 
client通过channel a发送Hint消息:
 
g. HintAck
 
client通过channel c返回HintAck消息,以响应manager通过channel b发出的Hint请求消息:
 
3. TLEdgeIn
 
定义manager到client的输入边(EI),我为manager,对端为client。
 
1) Transfers
 
定义manager发出的与Cache Permission相关的消息。
 
a. Probe
 
从channel b发出:
 
b. Grant
 
Grant和GrantData通过channel d回复:
 
c. ReleaseAck
 
 
2) Access
 
定义访问消息。
 
a. Get
 
manager通过channel b发起请求:
 
b. Put
c. Arithmetic
d. Logical
 
同上。
 
e. AccessAck
 
manager通过channel d回复client通过channel a发来的访问请求:
 
f. Hint
 
manager通过channel b发起请求:
 
g. HintAck
 
manager通过channel d回复client通过channel a发来的Hint请求:
 

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

  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 - first

    https://mp.weixin.qq.com/s/0nzkV4K1osNEQzrtITYxmw   介绍Edges中first/last/done的实现.   ​​   1. firstlastH ...

  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. K - Painful Bases 状压dp

    Painful Bases LightOJ - 1021 这个题目一开始看,感觉有点像数位dp,但是因为是最多有16进制,因为限制了每一个数字都不同最多就有16个数. 所以可以用状压dp,看网上题解是 ...

  2. 基于KepServer实现与S7-1200PLC之间的通信

    对于学习上位机开发,有一种通信方式是必须要了解的,那就是OPC是OLE for Process Control的简称,然而随着技术的不断发展,人们开始对它有了新的定义,比如Open Platform ...

  3. Qt插件系统

    说明 近期入职新公司,新公司的项目用到了Qt的插件系统,花时间了解了一下,还以为Qt的插件系统有多么高级呢,原来归根到底还是 dll 的动态调用时获取其中的类那一招啊,原理和之前的文章<DLL的 ...

  4. IDOC日志查询报表

    当不知道IDOC同步的具体时间,而WE02数据量过大时: 当某条IDOC记录中数据量过大,找不到具体某条数据时: 可采用自开发程序查找,具体代码如下: REPORT ZIDOC_LOG. *----- ...

  5. Linux安装tomcat并部署JavaWeb项目

    前提条件: 安装tomcat前请确认一下信息: 系统安装了JDK,且JDK版本应与javaWeb所使用的JDK一致,具体操作可参见Linux下安装JDK. 打包了javaWeb的.war 文件,具体操 ...

  6. Mysql常用sql语句(17)- left/right join 外连接

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 外连接分为两种:left join.right ...

  7. 深入理解JS中的对象(二):new 的工作原理

    目录 序言 不同返回值的构造函数 深入 new 调用函数原理 总结 参考 1.序言 在 深入理解JS中的对象(一):原型.原型链和构造函数 中,我们分析了JS中是否一切皆对象以及对象的原型.原型链和构 ...

  8. [BC冠军赛(online)]小结

    A Movie 题意:给你n个区间,判断能否选出3个不相交的区间. 思路:令f(i)表示能否选出两个不相交区间并且以区间i为右区间的值,g(i)表示能否选出两个不相交区间并且以区间i为左区间的值,如果 ...

  9. Date工具遇到的一个坑

    private Date contractBeginDate(){ Calendar calendar = Calendar.getInstance(); calendar.setTime(new D ...

  10. Python中内置函数

    python提供了很多的内置函数,这些内置的函数在某些情况下,可以起到很大的作用,而不需要专门去 写函数实现XX功能,直接使用内置函数就可以实现,下面分别来学习内置函数的使用和案例代码. abs(), ...