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

 
简单介绍RegisterRouter的实现。
 
 
1. 基本介绍
 
实现挂在TileLink总线上的寄存器节点。
 
2. TLRegisterNode
 
实现diplomacy概念下的寄存器节点,是一个下游节点,即末端节点:
 
1) 参数
 
a. address:支持的地址集合;
b. device:寄存器所属设备;
c. deviceKey:设备键值:控制寄存器;
d. concurrency:支持的并发访问数目;
e. beatBytes:数据总线宽度;
f. undefZero:略(不明其意);
g. executable:是否可执行;
 
2) 继承SinkNode
 
TLRegisterNode是一个末端节点:
其中:
a. supportsXXX:支持的TransferSize的能力是在[1, beatBytes];
b. 只支持Get/Put请求,其他请求不支持;
c. fifoId:按照顺序处理对寄存器的请求;
d. minLatency:需要至少一个时钟周期才能返回响应消息;
 
3) 限制条件
 
a. size:寄存器节点支持的地址集合的大小,放大到最近的2的幂;
b. size大于beatBytes;
c. 所有的地址都应该落在这个size范围内;
 
4) genRegDescsJson
 
生成JSON格式的寄存器描述:
a. 把mapping序列化,并写入到*.regmap.json注释文件中;
b. 同时进行注释并加入到Builder.annotations中;
 
5) regmap
 
把TLRegisterNode的输入边过来的请求转换为针对mapping的访问请求,然后做出响应:
 
a. 末端下游节点只有输入边
 
 
b. 生成寄存器映射的参数
 
其中:把source参数编入extra中。
 
c. 生成寄存器映射的输入接口,并与channel a相连:
 
 
d. 使用RegMapper生成寻址访问逻辑,并生成一个输出接口:
 
 
e. 根据寻址访问逻辑的输入输出接口状态,决定channel a/d的valid/ready:
 
 
f. 生成响应消息:
 
 
g. channel b/c/e不使用:
 
 
h. 生成注释信息:
 
 
3. TLRegisterRouterBase
 
RegisterRouter的基类:
a. extraResources:用于生成一个Resource映射;
b. device:创建一个设备;
c. node:has-a TLRegisterNode;
d. intnode:has-a IntSourceNode,可以作为一个中断源;
e. 没有实现lazy val module,保持抽象;
 
这里也体现了使用LazyModule包含(has-a)diplomacy node,而不把LazyModule定义为diplomacy node子类(is-a)的好处。那就是除了有一个(has-a)diplomacy node,还可以有多个(has-many)diplomacy node。而继承的话,只能是一个(is-a)而不能是多个diplomacy node。
 
4. TLRegBundleArg
 
参数类:
 
5. TLRegBundleBase
 
Bundle的基类,包含一个TLRegBundleArg:
 
6. TLRegBundle
 
新增一个参数类P:
 
7. TLRegModule
 
一个LazyModuleImp的子类,lazy val module的类型:
 
8. TLRegisterRouter
 
一个LazyModule的实现:
其中:
a. lazy val module使用moduleBuilder生成;
b. moduleBuilder包含两个参数:第一个参数生成一个TLRegBundleBase实例,第二个参数是一个TLRegisterRouterBase实例;
c. bundleBuilder使用TLRegBundleArg生成一个TLRegBundleBase实例;
 
9. HasTLControlRegMap
 
定义一个RegisterRouter子类混入(mix-in)的特征(trait):
 
a. controlNode:为子类添加一个控制寄存器节点;
b. controlXing:把controlNode连接到一个bus,因为TLRegisterNode是下游末端节点,所以这里使用crossIn,把controlNode作为下游节点;
c. regmap:把controlNode的channel a/d连接到根据mapping生成的寻址访问逻辑上;
 

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

  1. Rocket - tilelink - Nodes

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

  2. Rocket - tilelink - AsyncCrossing

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

  3. Rocket - tilelink - mask

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

  4. Rocket - tilelink - Parameters

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

  5. Rocket - tilelink - Bundles

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

  6. Rocket - tilelink - TLBusWrapper.to

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

  7. Rocket - tilelink - BusWrapper

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

  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. 201771010113-李婷华 实验一 软件工程准备-<软件工程的相关了解>

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE 这个作业要求链接 https://www.cnblogs.com/nwnu- ...

  2. 【Spark】RDD(Resilient Distributed Dataset)究竟是什么?

    目录 基本概念 官方文档 概述 含义 RDD出现的原因 五大属性 以单词统计为例,一张图熟悉RDD当中的五大属性 解构图 RDD弹性 RDD特点 分区 只读 依赖 缓存 checkpoint 基本概念 ...

  3. docker redis shell

    docker中安装好redis后,运行 docker ps 指令,查看所有运行中的镜像信息 然后运行 docker inspect --format "{{ .State.Pid}}&quo ...

  4. [hdu5253] 最小生成树,Kruskal

    题意:有n*m个单位的农田,给定每个单位农田地势高低,现在需要灌溉所有农田,如果把水引入相邻的农田里需要的管道长度为两者的高度差.求最少的管道长度花费. 思路:比较明显的最小生成树问题,相邻两点之间连 ...

  5. js console一些常用的功能

    前言 很多时候我们在调试的时候经常用console.log,我感觉其实一个就够了,但是有时候你不可能写一步就去调试下,所以呢,经常用几个console.log,有时候挺难找的,后面翻了翻console ...

  6. SpringBoot基础实战系列(三)springboot单文件与多文件上传

    springboot单文件上传 对于springboot文件上传需要了解一个类MultipartFile ,该类用于文件上传.我此次使用thymeleaf模板引擎,该模板引擎文件后缀 .html. 1 ...

  7. 【clear linux】intel clear linux 电源状态命令

    # 重启系统 $ sudo systemctl reboot # 关闭系统,切断电源 $ sudo systemctl poweroff # CPU停止工作 $ sudo systemctl halt ...

  8. AOP行为日志

    最近新项目要记录行为日志,很久没有用AOP,研究了一下. 废话补多少,先上个流程图: 数据库日志表设计 字段名称 字段类型 注释 LOG_ID VARCHAR2(255)   LOG_LEVEL  N ...

  9. ReactNative报错:Can't find variable: __fbBatchedBridge

    最近开始研究ReactNative,首先根据网上教程 http://www.codeceo.com/article/windows-react-native-android.html 一步一步来.完成 ...

  10. Codeforces Round #643 (Div. 2)(C ~ E)

    C. Count Triangles 题目链接 : https://codeforces.com/contest/1355/problem/C 题目大意 : 给你 A , B , C , D 问有多少 ...