zoukankan      html  css  js  c++  java
  • Rocket

    https://mp.weixin.qq.com/s/0nzkV4K1osNEQzrtITYxmw

     
    介绍Edges中first/last/done的实现。
     
     
    1. firstlastHelper
     
    辅助函数,用于确定burst中的第一个、最后一个、是否已完成、第几个beat。
    a. beats1 = beats - 1,比如如果需要4个beats,则beats1 = 3;
    b. beats是2的幂: beats = 2^size / 2^log2Ceil(beatBytes);
    c. first:counter为0时,是burst的第一个beat;
    d. last:counter为1或总数为1时,是burst的最后一个beat;
    e. done:最后一个beat输出时,标志着burst完成;
    f. count:当前beat的编号:count = beats1 & ~counter1
     
    下面简单推理一下,并非证明。
    可以看到,只有当beats为2的幂,beats1低位全1时,这种算法才成立。
     
    2. first
     
    判断是否burst的第一个beat:
     
    3. last
     
    判断是否burst的最后一个beat:
     
    4. done
     
    判断burst是否传输完成:
     
    5. firstlast
     
    同时取出first/last/done三个标志:
     
    6. count
     
    取出当前beat的编号:
     
    7. addr_inc
     
    把返回的beat编号转换为地址的增加值,方便后续传输:
     
    8. inFlight
     
    判断总线上是否有消息(message)在传输,以及正在进行传输(请求/响应对)的数目。
     
     
    1) flight
     
    记录当前传输的数目:
    a. client.endSourceId为请求端的数目;
    b. 3为能发起请求通道(channel)的数目,即a/c/e三个channel;
    c. 所以3*client.endSourceId为可以同时存在的传输的总数目;
     
    2) bce
     
    判断是否支持bce通道,即是否符合TL-C标准:
     
    3) first/last
     
    获取burst的beat标志:
     
    4) request/response
     
    判断是request还是response:
     
    5) inc
     
    只有请求的第一个beat时,才增加传输数目:
     
    6) dec
     
    只有响应的最后一个beat时,才减少传输数目:
     
    7) next_flight
     
    PopCount统计inc/dec中比特值为1的位的个数,与当前值相加减,即为下一个值。
     
    8) 返回
     
    返回当前值和下一个时钟周期的值:
     
  • 相关阅读:
    linux 换源
    Jedis使用
    mysql 安装
    ORACLE 11g安装
    网易有道云笔记去除左下角广告
    No module named 'urllib2'
    python+Eclipse+pydev环境搭建
    python-正则表达式基础
    [转]SpringMVC Controller介绍及常用注解
    【Android自学日记】搭建Android开发环境
  • 原文地址:https://www.cnblogs.com/wjcdx/p/11193959.html
Copyright © 2011-2022 走看看