• Rocket


    https://mp.weixin.qq.com/s/1I6DcONr0Mg7xiX8F1C7SQ

     
    简单介绍TileLink相关的参数实现(具体问题暂时不展开,后续用到时再做分析)。
     
     
    1. TLManagerParameters
     
    定义TileLink Manager节点的参数,Manager节点为Sink节点。
     
    1) 参数列表
     
    a. address:支持的地址集合;
    b. resources:包含的资源;
    c. regionType:区域类型;
    d. executable:是否可执行;
    e. nodePath:使用本参数的节点的路径;
    f. 能力标志:supportsXXX, mayDenyXXX等;
    g. fifoId:是否支持FIFO,以及FIFO的编号;
     
    2) 限制条件
     
     
    a. 支持的地址集合不能为空;
    b. 支持的地址集合不能包含无限个地址;
    c. 任意两个地址集合不能重叠;
    d. 支持PutFull操作的大小不能小于PutPartial;
    e. 支持PutFull操作的大小不能小于Arithmetic;
    f. 支持PutFull操作的大小不能小于Logical;
    g. 支持Get操作的大小不能小于Arithmetic;
    h. 支持Get操作的大小不能小于Logical;
    i. 支持Acquire Branch操作的大小不能小于Acquire Trunk;
     
    3) name
     
    TLManagerParameters是下游(Sink)节点的参数,其传递方向是从下游向上游(Upward)传递。nodePath中记录了参数传递过程中经历的节点:
     
    name表示最后一个节点的名称。如果没有,则使用默认值“disconnected”。
     
    4) maxTransfer
     
    各个操作支持的最大的传输大小:
     
    5) maxAddress
     
    节点支持的最大的地址:
     
    6) minAlignment
     
    节点支持的最小对齐:
     
    要求最小对齐不小于最大传输大小:
     
    7) toResource
     
    生成地址空间资源类型的描述:
     
    8) findTreeViolation/isTree
     
    查找是否存在破坏规则的节点:
     
    2. TLManagerPortParameters
     
    一个Manager Port包含多个Manager:
     
    1) 参数列表
     
    a. managers: 包含的Managers;
    b. beatBytes:单个时钟(心跳、beat)可以传递的数据宽度(字节数);
    c. endSinkId:最后一个下游节点的编号;
    d. minLatency:最小延迟;
     
    2) 限制条件
     
    其中:beatBytes需要是2的幂;
     
    3) requireFifo
     
    所有的manager节点必须都定义fifoId,并且都相同。
     
    4) 能力
     
     
    5) 软件查找:def find(address: BigInt)
     
    在软件执行期使用的查找功能:
    返回包含第一个包含address的manager。
     
    6) 硬件查找
     
    生成一个硬件查找逻辑:
     
    a. findSafe(UInt)
     
    逐个生成查找逻辑。
     
    b. findFast(UInt)
     
    快速查找:
    - 使用AddressDecoder生成需要比对的位的掩码:val routingMask = AddressDecoder(managers.map(_.address))
    - 忽略不需要比对的位:_.address.map(_.widen(~routingMask))
    - 把扩展后生成的新地址去重:.distinct.
    - 再检查是否包含address:.map(_.contains(address)).reduce(_ || _)
     
    剩余的find不再介绍。
     
    7) 能力
     
    使用safe和fast两种方式实现的是否支持能力判断方法:
     
    8) findTreeViolation/isTree
     
    检查所有manager是否都符合规则:
     
    3. TLClientParameters
     
    TileLink的Client端为上游(Source),定义其参数:
     
    1) 参数列表
     
    a. name: 名称;
    b. sourceId:源端编号;
    c. nodePath:本参数向下游传递过程中经过的节点序列;
    d. requireFifo:是否需要使用FIFO;
    e. visibility:可见性,可以看到哪些地址;
    f. 能力集合:supportsXXX;
     
    2) 限制条件
     
    其中:
    a. 可见的地址集合不能重合;
     
    3) maxTransfer
     
     
    4. TLClientPortParameters
     
     
    1) 限制条件
     
    其中:
    a. 所有client的IdRange不能重合;
     
    2) 参数处理
     
     
    3) 能力判断
     
    a. 全部支持
     
     
    b. 某个支持
     
     
    c. 硬件判断逻辑
     
     
    4) 查找
     
    a. 软件查找
     
     
    b. 硬件查找逻辑
     
     
    5) requireFifo
     
    生成硬件判断逻辑:
     
     
    5. TLBundleParameters
     
     
    1) 参数列表
     
    a. addressBits:地址占用的比特数;
    b. dataBits:数据占用的比特数;
    c. sourceBits:source编号占用的比特数;
    d. sinkBits:sink编号占用的比特数;
    e. size:操作大小占用的比特数;
     
    2) 合并
     
    取各参数的最大值:
     
    3) 通过两端的参数生成
     
    a. addressBits:支持的地址集合在manager中定义;
    b. dataBits:使用manager.beatBytes;
    c. sourceBits:source编号由client决定;
    d. sinkBits:sink编号由manager决定;
    e. size:由client/manager共同决定;
     
    6. TLEdgeParameters
     
    Edge的参数包含:
    a. client的参数;
    b. manager的参数;
    c. 其他配置参数: parameters;
     
    可以通过client和manager参数生成bundle参数:
     
    7. Async相关参数
     
    使用AsyncQueueParams表示异步相关的参数:
     
    8. Rational相关参数
     
    另一种异步实现。
     
    9. ManagerUnification
     
    Manager参数合并。
     
    1) 定义一个包含各个参数的Key:
     
     
    2) key: 从manager参数转化为Key的方法:
     
     
    3) 把所有manager根据key映射到哈希映射中:
     
    a. 若没有manager对应key的映射(key => manager),则添加新的映射;
    b. 若已有映射,则把当前manager与已有的manager合并;
     
    4) 返回新的manager:
     
    能力一致的manager合并后的manager列表:
     
  • 相关阅读:
    Linux useradd 命令介绍
    lsscsi
    安装MegaCli,查看linux服务器raid信息
    ipmitool命令详解
    python 收发邮件
    angularjs 高级玩法 创建递归的模板
    我的Android进阶之旅------>Android Activity的singleTask载入模式和onActivityResult方法之间的冲突
    Git实战(三)环境搭建
    使用Samba实现Linux与Windows文件共享实践
    设计模式个人备忘(享元模式,strategy, templete strategy)
  • 原文地址:https://www.cnblogs.com/wjcdx/p/11129686.html
Copyright © 2020-2023  润新知