https://mp.weixin.qq.com/s/0ob-Fq-ZOoj-_S7pTJu6rQ

 
介绍TLArbiter的实现,主要关注如何实现burst的多个beat的输出。
 
 
1. beatsIn/sourcesIn
 
对输入参数进行简单处理。输入参数为:
 
sources为不定参数:
二元组第一个元素为所需时钟周期即心跳(beat)的个数,第二个元素为输入的DecoupledIO。
 
2. beatsLeft
 
剩余的beat数:
 
3. idle
 
如果剩余的beat数为0,则Arbiter空闲(idle):
 
4. latch
 
是否可以把beat数目的初始值存入beatsLeft中:
 
使用方式:
 
5. valids/readys
 
a. 获取sources的valid信号;
b. 根据policy生成ready信号,以决定哪一个source可以输出;
 
6. winner
 
标志着每一个source是否可以输出:
 
winner为真需要满足两个条件:
a. valid为真:需要输出;
b. ready为真:允许输出;
 
7. initBeats
 
计算beatsLeft的初始值:
a. 根据是否是winner输出每一个source的beats值;
b. 取出仲裁胜出者需要的beats值;
c. 根据latch的值,选择把初始值存入beatsLeft,还是在输出时减一;
d. 只有在输出时beatsLeft才减一:beatsLeft - sink.fire();
 
8. state
 
记录sources的状态:
 
如果idle为真,则把仲裁结果winner在下一个时钟周期存入state中;否则state保持不变。
 
9. allowed
 
是否允许source输出:
 
如果idle为真,则是否允许输出由仲裁结果readys决定;否则当前burst的beats还没有传输完毕,是否允许由state决定,即只允许当前正在传输的source进行输出。
 
10. sink.valid
 
 
如果idle为真,则由valids决定;否则由正在进行传输的source的valid决定。
 
11. sink.bits
 
似乎有点问题,muxState可能为全0,而Mux1H要求muxState中有且只有一个1。这里不深入讨论。
 

Rocket - tilelink - TLArbiter的更多相关文章

  1. Rocket - tilelink - RegisterRouter

    https://mp.weixin.qq.com/s/DaJhf7hEoWsEi_AjwSrOfA   简单介绍RegisterRouter的实现.   ​​   1. 基本介绍   实现挂在Tile ...

  2. Rocket - tilelink - toBools

    https://mp.weixin.qq.com/s/UGMH8EoaVcFkkQW-l4HLWg   分析toBools在Intellij中显示为红色的问题.   ​​   1. 问题   在TLA ...

  3. Rocket - tilelink - Nodes

    https://mp.weixin.qq.com/s/KJ8pVH76rdxPOZ1vE3QlKA   简单介绍tilelink对Diplomacy Nodes的实现.   ​​   1. TLImp ...

  4. Rocket - tilelink - AsyncCrossing

    https://mp.weixin.qq.com/s/v8plWCBD8vZkxykjJe4TCg   介绍AsyncCrossing的实现,主要介绍如何实现diplomacy Node和LazyMo ...

  5. Rocket - tilelink - mask

    https://mp.weixin.qq.com/s/Gqv09RIgSSg5VKe-wb4aGg   讨论tilelink中使用MaskGen生成mask的用法.   1. tilelink中的ma ...

  6. Rocket - tilelink - Parameters

    https://mp.weixin.qq.com/s/1I6DcONr0Mg7xiX8F1C7SQ   简单介绍TileLink相关的参数实现(具体问题暂时不展开,后续用到时再做分析).   ​​   ...

  7. Rocket - tilelink - Bundles

    https://mp.weixin.qq.com/s/jrqBg2AIpQogBrpwNXjmwg   简单介绍Bundles文件中对TileLink规范(1.7.1)的定义. 参考链接:https: ...

  8. Rocket - tilelink - TLBusWrapper.to

    https://mp.weixin.qq.com/s/jSnhBzU5_ayQCg5fWAcx-g 简单介绍TLBusWrapper.to()的实现.主要介绍确定this{...}对应代码的过程. 1 ...

  9. Rocket - tilelink - BusWrapper

    https://mp.weixin.qq.com/s/03BvgTNQtD75Guco6gUGQg   简单介绍BusWrapper的实现.   1. HasTLBusParams   定义SoC的挂 ...

随机推荐

  1. Json格式数据的解析

    JSON是一种轻量级的数据交换格式,我们在编程中遇到的JSON数据通常就是一串字符串,只不过按照特定的格式去书写,这样当你把JSON数据传输给别人的时候对方只要使用这种特定的规则去阅读解析你的数据即可 ...

  2. Spring 循环引用(三)源码深入分析版

    @ 目录 前言 正文 分析 doGetBean 为什么Prototype不可以 createBean doCreateBean getEarlyBeanReference getSingleton b ...

  3. 【基础】excel如何根据数据内容显示不同颜色。

    需求: 店柜完成率排名相比上阶段升降,升显示绿色“↑“,降显示红色“↓”,持平显示黑色“-”. 步骤: 第一步 先计算两次排名的差值(本次排名-上次排名). 第二步 对差值列设置单元格格式,设置格式如 ...

  4. Golang遍历删除数组

    Golang 做数字切片 package main import "fmt" /*遍历删除数组示例*/ func main() { //定义一个数组 a1 := []int{1, ...

  5. Sentinel源码解析四(流控策略和流控效果)

    引言 在分析Sentinel的上一篇文章中,我们知道了它是基于滑动窗口做的流量统计,那么在当我们能够根据流量统计算法拿到流量的实时数据后,下一步要做的事情自然就是基于这些数据做流控.在介绍Sentin ...

  6. 「雕爷学编程」Arduino动手做(30)——光敏二极管模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(动手做)的理念,以学习和交流为目的,这里准备逐 ...

  7. C# 数据操作系列 - 11 NHibernate 配置和结构介绍

    0. 前言 今天是NHibernate的第二篇内容,通过上一篇的内容,我们初步了解了NHibernate的创建和使用.这一篇,我继续探索NHibernate背后的秘密.嗯,就是这样. 1. NHibe ...

  8. mysql基本操作汇总

    1.数据库操作 (1)创建数据库 CREATE DATABASE <数据库名>; 例子: CREATE DATABASE IF NOT EXISTS RUNOOB DEFAULT CHAR ...

  9. Spring 自动装配 byType

    自动装配 byType,这种模式由属性类型指定自动装配. Spring 容器看作 beans,在 XML 配置文件中 beans 的 autowire 属性设置为 byType.然后,如果它的 typ ...

  10. hdu2243

    背单词,始终是复习英语的重要环节.在荒废了3年大学生涯后,Lele也终于要开始背单词了.一天,Lele在某本单词书上看到了一个根据词根来背单词的方法.比如"ab",放在单词前一般表 ...