• Rocket


    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生成的寻址访问逻辑上;
     
  • 相关阅读:
    团队贡献分汇总
    【Gamma】Scrum Meeting 1
    【Beta】测试报告
    【Beta】发布说明
    【技术博客】JWT的认证机制Django项目中应用
    Daily Scrumming* 2015.12.17(Day 9)
    Daily Scrumming* 2015.12.16(Day 8)
    Daily Scrumming* 2015.12.15(Day 7)
    Daily Scrumming* 2015.12.13(Day 5)
    Daily Scrumming* 2015.12.12(Day 4)
  • 原文地址:https://www.cnblogs.com/wjcdx/p/11524264.html
Copyright © 2020-2023  润新知