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. E - No Pain No Game 线段树 离线处理 区间排序

    E - No Pain No Game  HDU - 4630 这个题目很好,以后可以再写写.这个题目就是线段树的离线写法,推荐一个博客:https://blog.csdn.net/u01003321 ...

  2. ASP.NET Core Blazor 初探之 Blazor WebAssembly

    最近Blazor热度很高,传说马上就要发布正式版了,做为微软脑残粉,赶紧也来凑个热闹,学习一下. Blazor Blazor是微软在ASP.NET Core框架下开发的一种全新的Web开发框架.Bla ...

  3. java基础篇 之 接口

    组合接口时的名字冲突: 看下面这段代码: interface I1 { int f(); } interface I2 { void f(); } interface I3 { int f(int a ...

  4. 简述异步编程&Promise&异步函数

    前言:文章由本人在学习之余总结巩固思路,不足之前还请指出. 一.异步编程 首先我们先简单来回顾一下同步API和异步API的概念 1.同步API:只有当前的API执行完成之前,才会执行下一个API 例: ...

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

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

  6. jbpm4 泳道

    今天刚学习了jbpm4的泳道使用,方便以后查阅记录一下! 泳道定义: <swimlane name="myswim" assignee="userC"&g ...

  7. How to delete the eclipse plugin.

    click  Help-->installation Details 2. choose the plugin that you want to delete.Then click uninst ...

  8. MyCat垂直分库

    一.什么是垂直分库 将一类功能的表从一个实例切分到另一个实例,横向扩展实例,增加写负载 目标:将1个实例的4类表拆分多4个实例中 二.垂直切分步骤 2.1收集分析业务模块间的关系,能分几个库 2.2全 ...

  9. iOS [AFHTTPSessionManager GET:parameters:progress:success:failure:]: unrecognized selector sent to

    AFN更新到4.0.1后,崩溃[AFHTTPSessionManager GET:parameters:progress:success:failure:]: unrecognized selecto ...

  10. poj3680 最大权不相交路径

    Intervals Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 8587   Accepted: 3662 Descrip ...