https://mp.weixin.qq.com/s/7Y23gV6yPvtmvKHTo2I8mw

 
基于ReadyValid接口实现的多入单出仲裁器。
 
参考链接:
 
 
1. ArbiterIO
 
ArbiterIO包含如下接口:
a. in
 
Arbiter的n个输入接口,每个接口都是ReadyValid接口;Flipped把方向反过来,是因为仲裁器是输入接口的Consumer;
 
b. out
 
仲裁器的输出接口(ReadyValid接口),因为仲裁器是这个接口的Producer,所以不需要使用Flipped调转反向;
 
c. chosen
 
指示选择的输出是哪一个输入接口的;
 
 
2. ArbiterCtrl
 
 
这是一个优先级发生器。requests中的请求按顺序优先级由高到低。
 
可以看到后面的请求,收到前面请求状态的约束,如果前面的请求状态为真,则后面的请求会被忽略。
 
3. Arbiter
 
Hardware module that is used to sequence n producers into 1 consumer. Priority is given to lower producer.
 
 
a. 输入输出接口
 
 
b. 输出数据
 
io.chosen/io.out.bits是一对,作为一个整体研究。这里对io.chosen/io.out.bits进行了n次连接,后面的连接具有更高的优先级,第一次的连接(连接到第n-1个输入)为默认连接。
 
把这些连接摊平,即如下:
 
c. 输入使能
 
 
某个Producer要想通过ReadyValid接口输出,需要与其相连的Consumer把Ready置位。也就是说,仲裁器通过把某一个输入口的Ready为置位,来授权该输入口传输数据。
 
这里,先把io.in中的n个输入,一一与grant中的n个授权位组成n个元组。然后遍历这些元组,一一决定是否对每个输入的ready置位,而允许其传输数据。
 
io.out.ready的意思为仲裁器的Consumer已经准备好了接收,这是一个总的开关。
 
grant用来决定是否授权某个输入口传输。这只是个结果,生成grant的逻辑实现了仲裁的算法。
 
d. 授权(grant)
 
grant是使用ArbiterCtrl来实现,这个是基本的严格优先级(strict priority)逻辑,小号优先。
 
根据ArbiterCtrl的实现,in(0)对应的grant总是为true,所以他总是有授权的。
 
e. 开始输出
 
 
!grant.last是把前面n-1个输入口的valid相或,再或上第n个输入口的valid,就是把所有的输入口的valid相或。
 
所以,只要输入口有一个想要传输数据,则整个仲裁器即想要传输数据。
 
请注意这里是想要,只是说明自己可以传输,但是否开始传输也取决于仲裁器的下游Consumer是否准备好,而把io.out.ready置位。
 
f. n个输入的优先级
 
优先级体现在哪里?在多个输入口的Producer同时把Valid置位,表明有数据要传输给仲裁器时,哪一个输入口获得授权。
 
这个体现在grant的算法里,从ArbiterCtrl的实现逻辑看,in(0)总是有授权,而后面的输入口的授权,依次取决于前面所有输入口的valid是否置位,如果置位,则该输入口的授权即被取消,而导致这个输入口的ready不能被置位。亦即这个输入口的Producer不能输出。
 

Chisel3 - util - Arbiter的更多相关文章

  1. Chisel3 - util - LockingArbiter

    https://mp.weixin.qq.com/s/5oAwH3scumARzPidRBfG2w     带锁多入单出仲裁器,输出会被锁定指定的时钟周期.   参考链接: https://githu ...

  2. Chisel3 - util - RRArbiter

    https://mp.weixin.qq.com/s/GcNIFkHfa0gW0HKkKvHZEQ     循环优先级(Round Robin)仲裁器.   参考链接: https://github. ...

  3. Chisel3 - util - OneHot

    https://mp.weixin.qq.com/s/Jsy8P3m9W2EYKwneGVekiw   独热码相关的电路生成器.   参考链接: https://github.com/freechip ...

  4. Chisel3 - util - MixedVec

    https://mp.weixin.qq.com/s/mO648yx4_ZRedXSWX4Gj2g   可以容纳不同类型的变量的向量.   参考链接: https://github.com/freec ...

  5. Chisel3 - util - Mux

    https://mp.weixin.qq.com/s/TK1mHqvDpG9fbLJyNxJp-Q   Mux相关电路生成器.   参考链接: https://github.com/freechips ...

  6. Chisel3 - util - Lookup

    https://mp.weixin.qq.com/s/g85Si6n37D9PYfR5hEoRQQ     实现一个查找逻辑.   参考链接: https://github.com/freechips ...

  7. Chisel3 - util - Valid

    https://mp.weixin.qq.com/s/L5eAwv--WzZdr-CfW2-XNA   Chisel提供的Valid接口.如果valid为置1,则表明输出的bits有效:反之,则输出无 ...

  8. Chisel3 - util - Math vs. CircuitMath

    https://mp.weixin.qq.com/s/8lC8vQnBdKW9C39H0QFFkA     对数相关的辅助方法,Math通过软件方法实现,CircuitMath通过硬件方法实现.   ...

  9. Chisel3 - util - LFSR16

    https://mp.weixin.qq.com/s/DSdb4tmRwDTOki7mbyuu9A     实现16位线性反馈移位寄存器.可用于生成简单的伪随机数.     ​​     ​​   参 ...

随机推荐

  1. java读源码之 Queue(ArrayDeque,附图,希望能一起交流)

    除了并发应用(并发包下的代码我之后会专门写),Queue在JavaSE5中仅有的两个实现是LinkedList和PriorityQueue,它们的差异在于排序行为而不是性能.1.6时新增了一个实现Ar ...

  2. Maxim实时时钟芯片设计指南5413-二进制编码十进制(BCD)格式实时时钟中的状态机逻辑

    网上DS12C887的文章涉及到时间的存储格式使用的都是二进制代码,究竟使用BCD码该如何操作?正好美信官网上有一篇文章.美信官网不稳定,先贴到这里,有时间再翻译. 原文链接 State Machin ...

  3. 高性能mysql第三版读书笔记3

    innodb以前不支持高并发,在搞病房下就是悲剧,全部卡在mutex(缓冲池mutex)上,现在通过线程调度器控制线程怎么进入内核访问数据,参数为innodb_thread_concurrency,它 ...

  4. Python 为什么抛弃累赘的花括号,使用缩进来划分代码块?

    大家好,这是"Python为什么"系列节目的文字稿(文末有观看地址). 本期话题:Python 为什么使用缩进来划分代码块,而不像其它语言使用花括号 {} 或者 "end ...

  5. x86软路由虚拟化openwrt-koolshare-mod-v2.33联通双拨IPV6教程(第二篇)

    续第一篇:https://www.cnblogs.com/zlAurora/p/12433296.html   4 设置多拨 (1)连入OpenWrt Web界面,默认为192.168.1.1,在“网 ...

  6. 【matlab 基础篇 01】快速开始第一个程序(详细图文+文末资源)

    快速入门matlab,系统地整理一遍,如何你和我一样是一个新手,那么此文很适合你: 文章目录 1 软件安装 2 打开软件 3 编写程序 3.1 基础步骤 3.2 添加PATH 3.3 命令行模式 4 ...

  7. Linux --remote (ssh and VNC)

    远程管理 与个人计算机不同,服务器一般都是运行IDC机房中,所以我们通常不会接触到服务器硬件,而是通过各种远程管理方式对服务器进行控制. 常见的远程管理工具方式: -RDP(remote deskto ...

  8. 2020年腾讯实习生C++面试题&持续更新中(3)

    2020年腾讯实习生C++面试题&持续更新中(3) hello,大家好,我是好好学习,天天编程的天天. 来给大家大家分享腾讯实习生面经了. 天天希望大家看到面经后一定要做充分的准备,结合自己掌 ...

  9. Oracle用decode函数或CASE-WHEN实现自定义排序

    1 问题 对SQL排序,只要在order by后面加字段就可以了,可以通过加desc或asc来选择降序或升序.但排序规则是默认的,数字.时间.字符串等都有自己默认的排序规则.有时候需要按自己的想法来排 ...

  10. git:error: Your local changes to the following files would be overwritten by merge:

    最近用git在服务器.github.本地更新代码的时候,因为频繁修改偶尔出现这个错误 覆盖本地的代码: git stash git pull git stash pop 保留对服务器上的修改: git ...