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. 【BIM】BIMFACE中实现电梯实时动效

    背景 在运维场景中,电梯作为运维环节重要的一部分是不可获缺的,如果能够在三维场景中,将逼真的电梯效果,包括外观.运行状态等表现出来,无疑是产品的一大亮点.本文将从无到有介绍如何在bimface中实现逼 ...

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

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

  3. 利用 Maven 构造 Spring Cloud 微服务架构 模块使用 spring Boot构建

    采用Maven 聚合工程搭建 Spring Cloud 使用工具: IntelliJ IDEA    版本: 2019.2.2 maven             版本: 3.6.0 JDK      ...

  4. 第一章 Windows内核概述

    第一章 Windows内核概述 这一章节描述了Windows内核知识中最重要的几个概念,这些话题在这本书之后会有更详细的描述,那些会与当前的主题密切相关.要确保你理解这个章节的概念,因为这些概念构成了 ...

  5. hdu5381 The sum of gcd]莫队算法

    题意:http://acm.hdu.edu.cn/showproblem.php?pid=5381 思路:这个题属于没有修改的区间查询问题,可以用莫队算法来做.首先预处理出每个点以它为起点向左和向右连 ...

  6. Mysql 常用语句实战(3)

    前置 sql 语句 用来创建表.插入数据 ; DROP TABLE IF EXISTS dept_;-- 部门表 DROP TABLE IF EXISTS emp_;-- 部门表 ; SELECT @ ...

  7. TP5整合的阿里云短信接口

    现阶段,短信的应用主要就是用来验证下手机号是不是正常的手机号.只要涉及到用户手机号的问题的时候,都会做短信验证码来验证下改手机号是否是正常手机号.接下来就是操作步骤. 首先要在阿里云账号上开通短信功能 ...

  8. 排序算法:图解快速排序算法--不超过18行代码Python和JavaScript实现快速排序算法

    快速排序有三大要素 分别是 第一:找基准值--key 第二:分区 第三:比较数字大小 先来看下快速排序流程: 基准值key选取了第一个元素78 基准值是可以任意一个元素 因为选择了最左边的数据,那么就 ...

  9. Python脚本:实现对象集合List导入到excel表格,支持mysql,postergrsql,MongoDB

    import xlwt import os import datetime #验证export_filed中的字段是否在对象字段中 def checkField(obj_list,filed_dict ...

  10. python --字符串学习

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