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. Spring Boot 整合 Apache Dubbo

    Apache Dubbo是一款高性能.轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现. 注意,是 Apache Dubb ...

  2. 【Kafka】Kafka集群环境搭建

    目录 一.初始环境准备 二.下载安装包并上传解压 三.修改配置文件 四.启动ZooKeeper 五.启动Kafka集群 一.初始环境准备 必须安装了JDK和ZooKeeper,并保证Zookeeper ...

  3. python语法学习第七天--文件

    打开文件:open() 使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法. open(file, mode='r', buffering=-1, encoding=None ...

  4. 关于日常操作中sql的性能

    最近接手了一个项目.使用的数据库是sql server,但是遇到一些关于日期的查询的时候,查询结果非常慢.看了下别人的sql //sql = sql + " and CONVERT(nvar ...

  5. 学习ASP.NET Core(05)-使用Swagger与Jwt授权

    上一篇我们使用IOC容器解决了依赖问题,同时简单配置了WebApi环境,本章我们使用一下Swagger,并通过Jwt完成授权 一.Swagger的使用 1.什么是Swagger 前后端分离项目中,后端 ...

  6. jstree 反选,测试400条数据左右有点卡

    $("#reversecheckallmachines").on("change", function () { var checkedNodes = []; ...

  7. 解决Hystrix dashboard Turbine 一直 Loading…… 及其他坑

    问题一.请求 /hystrix.stream 报错,我这里以端口9001为例 请求 http://localhost:9001/hystrix.stream 报404 是因为Srping Boot 2 ...

  8. android 动态设置TextView值,例:金额增加

    一说到动态递增设置TextView值,很多人应该马上就想到起个线程,让后在线程中睡眠指定时间,使用handler发送消息更新TextView值! 这样是实现了动态递增设置TextView值但是效率不咋 ...

  9. JS 面向对象封装 无限轮播 插件。

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  10. gentoo 下安装lamp

    更新系统 emerge --sync emerge --update world 安装apache emerge www-servers/apache rc-update add apache2 de ...