https://mp.weixin.qq.com/s/03BvgTNQtD75Guco6gUGQg

 
简单介绍BusWrapper的实现。
 
1. HasTLBusParams
 
定义SoC的挂载点相关的宽度信息:
a. beatBytes:一个时钟周期最大能请求的字节数;
b. blockBytes:(推测)一次请求(可以包含多个beat)最大能请求的字节数;
 
其他的通过这两个参数生成:
a. beatBits:把beatBytes换算成位数;
b. blockBits:把blockBytes换算成位数;
c. blockBeats:最大的请求包含多少个beat;
d. blockOffset:为block中的每个字节编址所需要的位数;
 
限制条件:
a. beatBytes需要是2的幂;
b. blockBytes需要是2的幂;
 
2. TLBusWrapper
 
对总线(Bus)进行包装,是一个LazyModule:
 
1) 类参数
 
a. params:HasTLBusParams类型,传入基本宽度信息;
b. busName:总线名称;
 
2) 基本宽度信息
 
 
3) inwardNode/outwardNode/Edge
 
 
4) unifyManagers
 
合并能力一致的manager的地址集合:
 
5) crossHelper
 
生成跨越时钟域的Helper:
 
6) to/from
 
 
a. to是指outwardNode在body中使用输出边连接到某个节点;
 
b. from是指inwardNode在body中使用输入边连接到某个节点;
 
7) coupleTo/coupleFrom
 
 
coupleTo/coupleFrom与to/from类似,只是把outwardNode作为参数传入。
 
这样避免了与TLBusWrapper的继承关系:
a. 使用to/from方法的类,需要继承TLBusWrapper类,才能访问到outwardNode/inwardNode;
b. 使用coupleTo/coupleFrom的类,则不需要继承TLBusWrapper类,因为outwardNode/inwardNode作为参数传入;
 
8) crossToBus/crossFromBus
 
a. crossToBus:outwardNode跨时钟域输出连接到参数中指定的bus;
b. crossFromBus:inwardNode跨时钟域输入连接到参数中指定的bus;
 
3. CanAttachTLSlaves
 
可以连接下游节点。使用该trait的类需要继承自TLBusWrapper:
 
1) toSlave
 
outwardNode输出到gen生成的slave:
 
2) toVariableWidthSlaveNodeOption
 
outwardNode输出到参数传入的node:
 
3) toVariableWidthSlaveNode
 
 
4) toVariableWidthSlave
 
可变宽度(VariableWidth)是指与不同下游节点连接边的数据总线宽度可以不同,所以这里使用TLFragmenter为Bus处理不同数据宽度的下游连接。(TLFragmenter向上传递下游节点参数的时候,并不改变其beatBytes参数,所以Bus看到的是下游节点的原始的数据总线宽度,可能是不相同的。)
 
5) toFixedWidthSlaveNode
 
固定宽度(FixedWidth)是指与不同下游节点连接边的数据总线宽度都相同,所以这里使用TLWidthWidget为Bus提供统一的数据总线宽度(beatBytes)。(TLWidthWidget改变项上传递的参数中的beatBytes参数,告诉Bus所有与之连接的下游节点的数据总线宽度都是beatBytes。)
 
6) toFixedWidthSlave
 
这里gen是一个call-by-name参数:
 
7) toFixedWidthSingleBeatSlaveNode
 
略,未使用。
 
8) toFixedWidthSingleBeatSlave
 
略,未使用。
 
9) toLargeBurstSlave
 
略,未使用。
 
10) toFixedWidthPort
 
输出到一个Port:
 
4. CanAttachTLMasters
 
可以连接上游节点。使用该trait的类需要继承自TLBusWrapper:
 
1) fromMasterNode
 
gen是一个TLOutwardNode:
 
2) fromMaster
 
gen是一个call-by-name参数,用于生成TLOutwardNode:
 
3) fromPort
 
gen生成的是一个port:
 
4) fromCoherentMaster
 
gen生成的是一个Coherent Master:
 
5. HasTLXbarPhy
 
使用该特征引入一个Xbar对象:
 

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

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

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

  9. Rocket - tilelink - WidthWidget

    https://mp.weixin.qq.com/s/pmJcsRMviJZjMwlwYw6OgA   简单介绍WidthWidget的实现.   ​​   1. 基本介绍   用于设定与上游节点连接 ...

随机推荐

  1. 记忆化搜索 E - Loppinha, the boy who likes sopinha Gym - 101875E

    E - Loppinha, the boy who likes sopinha Gym - 101875E 这个题目是一个dp,这个应该很容易看出来,但是对于状态的定义其实有点难去想, 看了题解dp[ ...

  2. maven的pom.xml配置文件相关依赖jar包

    <!--声明变量--> <properties> <project.build.sourceEncoding>UTF-8</project.build.sou ...

  3. oracle如何实现去重和分页

    一:oracle实现去重: user数据表: 分两步:1.查询重复数据  2.删除重复数据 1.查询重复数据:在oracle中实现查询重复数据,可以借助于rowid这个伪列.oracle中每个表物理上 ...

  4. 初识Matlab及界面认识

    通过本章节的学习,需要掌握: MATLAB语言是什么 MATLAB在互联网语言中地位与应用 目标:利用MATLAB进行问题求解的基本规律.够使用MATLAB作为专业应用的工具. 1.什么叫计算? (1 ...

  5. qt creator源码全方面分析(4-5)

    目录 Qt中的字符串 QLatinString 详细介绍 源码 小结 QStringLiteral(str) 详细介绍 源码 小结 Qt中的字符串 Qt中处理字符串最常用的肯定是QString,但是在 ...

  6. mercurial 入门

    安装 需要python的docutils,故 sudo pip3 install docutils 然后直接安装mercurial sudo pip3 install mercurial 如果超时,则 ...

  7. ocaml 和coq 安装

    安装opam 参考官网安装步骤即可,比如对于centos系统,以root用户执行如下指令 cd /etc/yum.repos.d/ wget http://download.opensuse.org/ ...

  8. [工具]微软的学习平台Microsoft Learn很好用,推荐一下

    1. 什么是Microsoft Learn Microsoft Learn是微软这两年大力推广的全新学习平台,可提供 Microsoft 产品交互式学习体验.基本上无需登录即可使用,但登录后可以使用更 ...

  9. 拥抱K8S,Spring Boot 2.3提供K8s活性和就绪性探针

    Spring Boot 2.3将包括对Kubernetes liveness&readiness Probe的本地支持,扩展了2.2的"运行状况组"支持,允许开发人员选择运 ...

  10. uni-app高分开源电影项目源码案例分析,支持一套代码发布小程序、APP平台多个平台(前端入门必看)

    uni-app-Video 一个优秀的uni-app案例,旨在帮助大家更快的上手uni-app,共同进步! Features ​ 代码编写简洁,注释清晰,快速入门必备: 支持在线模糊搜索: 程序类目懒 ...