zoukankan      html  css  js  c++  java
  • 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生成的寻址访问逻辑上;
     
  • 相关阅读:
    背景图片拉伸显示CSS
    可序列化对象和byte[]数组之间的互转
    简单web性能测试工具——ab命令(ApacheBench)
    测试人员必须掌握的linu常用命令
    robot framework 如何处理循环条件下面的变量自增
    robot framework 的关键字Continue For Loop 用法
    robot framework 的AutoItLibrary常用关键字
    robot framework 关键字Switch Browser和Select Window的区别
    robot framework 接口测试 http协议post请求json格式
    robot framework 怎么验证搜索无记录,页面元素不存在
  • 原文地址:https://www.cnblogs.com/wjcdx/p/11524264.html
Copyright © 2011-2022 走看看