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. Codeforces Round #632 (Div. 2)

    Codeforces Round #632 (Div. 2) 这一场打的好差呀,这几次艰难上的分全部掉回去了,感觉就像一夜回到了解放前. 说实话,就是被B卡到了,没看到只能从小的放到大的... Lit ...

  2. leetCode刷题 | 两数相加

    给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...

  3. DoNet:浅淡对delegate的理解

    1 前言 C#的相关文档,MSDN上其实已经很详细了,关于delegate的使用可以参 考MSDN上的文档https://msdn.microsoft.com/zh-cn/library/900fyy ...

  4. pthon-安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示“This application failed to start because no Qt platform plugin could be initialized.Reinstalling the application the application may fix this program”

    最近学习python,安装网上教程一步一步的安装,网上很多帖子都写的非常详细,不由深深感慨多谢各位不辞辛苦的记录,指导着来自新入门的同学. 但是实际安装中,最理想莫过于一次性安装成功,但自己安装就出现 ...

  5. Hadoop2.8.1完全分布式环境搭建

    前言 本文搭建了一个由三节点(master.slave1.slave2)构成的Hadoop完全分布式集群(区别单节点伪分布式集群),并通过Hadoop分布式计算的一个示例测试集群的正确性. 本文集群三 ...

  6. python --文件读取数据

    读取整个文件: 首先创建一个文件,例如我创建了一个t x t文件了. 然后我想读取这个文件了,我首先将上面的这个文件保存在我即将要创建的Python的文件目录下, 即读取文件成功. 解析: 函数ope ...

  7. resize允许你控制一个元素的可调整大小性

  8. 前端面试题-几个很实用的BOM属性对象方法?

    什么是Bom? Bom是浏览器对象.有哪些常用的Bom属性呢? (1)location对象 location.href-- 返回或设置当前文档的URL location.search -- 返回URL ...

  9. Bash Shell之内建命令和保留字

    转载自:http://blog.chinaunix.net/uid-25880122-id-2941630.html 命令 含义 ! 保留字,逻辑非 : 不做任何事,只做参数展开 . 读取文件并在sh ...

  10. 解决yum 问题

    Dependencies Resolved Traceback (most recent call last): File "/usr/bin/yum", line 29, in ...