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

 
以tilelink下的Buffer为例,介绍LazyModule如何组织内部的节点和模块。
 
1. TileLink Channels
 
参考TileLink总线的规范文档。
 
2. BufferParams
 
 
BufferParams包含了定义一个Buffer需要用到的3个参数:
a. depth;
b. flow;
c. pipe;
 
 
3. TLBufferNode
 
 
TLBufferNode是TLAdapterNode的子类。其构造方法包含分别对应TileLink总线a/b/c/d/e 5个channel的BufferParams参数。
 
 
4. TLBuffer
 
 
TLBuffer继承自LazyModule。他内部包含一个节点(node),包含一个LazyModuleImp匿名子类的lazy实例module,作为其内部实现。
 
 
5. TLBuffer.node
 
TLBuffer.node是TLBufferNode的一个实例。他包含了TLBuffer实例的in/out接口信息。
 
6. TLBuffer.module
 
TLBuffer.module是TLBuffer的内部实现。
 
TLBuffer这个LazyModule的输入输出接口的信息在node中,所以TLBuffer.module要从TLBuffer.node中取出输入接口,实现内部逻辑,最后连接到输出接口上。
 
这里的内部逻辑就是使用BufferParams中的参数生成的Queue。
 
 
7. 外部连接
 
以Channel in.a为例,TLBuffer.module把in.a输出到out.a,那么:
a. 谁输出到in.a?
b. out.a输出到哪里?
 
这些都是TLBuffer作为一个模块,与其他模块之间的连接关系。这些连接是使用TLBuffer.node代替TLBuffer这个模块,与其他LazyModule.node进行连接的。
 
可以看到TLBuffer的伴生对象,返回的都是buffer.node,以与其他模块连接:
 
 
8. 附录
 

最新文章

  1. Java 浅析内部类
  2. 架构验证过程发现非数据类型错误 validation found non-data type errors
  3. Eclipse+Qt开发环境设置(Linux和Win)
  4. IOS异步和多线程操作&&在sqlite3中的应用
  5. python中提示invalid syntax 总结
  6. Python PIL库之Image注解(API)
  7. apache、mod_jk负载均衡与tomcat集群
  8. git和GItHub的区别
  9. 测试DOM0级事件和DOM2级事件的堆叠
  10. B-JUI 实践 之 带搜索与编辑的Datagrid
  11. JVM垃圾收集(GC)算法
  12. MySql按每日、每周、每月分组统计数据
  13. java项目中通过添加filter过滤器解决ajax跨域问题
  14. NSL:CPK_NN神经网络实现预测哪个样本与哪个样本处在同一层,从而科学规避我国煤矿突水灾难—Jason niu
  15. 【转】android笔记--保存和恢复activity的状态数据
  16. python全栈开发day27-网络编程
  17. 输入两棵二叉树A,B,判断B是不是A的子结构(c++实现)
  18. Android: INSTALL_FAILED_UPDATE_INCOMPATIBLE错误解决措施
  19. 《转载》脚本实现从客户端服务端HTTP请求快速分析
  20. 什么是adb命令?以及如果高效使用他们?

热门文章

  1. jQuery中bind()与on()绑定事件的区别
  2. LeetCode--Unique Morse Code Words && Flipping an Image (Easy)
  3. ubuntu文件系统修改( for arm)
  4. Altium Designer PCB封装bug,元件焊盘位置偏移解决方法
  5. C语言进阶_goto与void解析
  6. zabbix-agent客户端安装与配置
  7. [hdu5313]二分图性质,dp
  8. 【疑问】SQLServer_DNS注入数据库因为点号不能显示数据库的库名的方法[语音和音乐]
  9. Web_php_unserialize
  10. Python 常用编码规范