https://mp.weixin.qq.com/s/5oAwH3scumARzPidRBfG2w

 
 
带锁多入单出仲裁器,输出会被锁定指定的时钟周期。
 
参考链接:
 
 
1. LockingArbiterLike
 
 
LockingArbiterLike是一个抽象类(图标中带白色虚线),把仲裁逻辑和选择逻辑,都留给子类去定义。
 
类中定义了一个基本的Arbiter和输出锁定逻辑,而把grant和choice定义成抽象待实现的。
 
锁定逻辑如下:
根据锁定周期的大小,分为两种实现:
a. count == 1
 
与普通Arbiter逻辑一致。
 
b. count > 1
 
 
1) lockCount: 最大值为count-1的计数器;
2) locked: 当前是否锁定状态;
3) lockIdx: 用于存放当前锁定的输入口序号的寄存器;
4) wantsLock: 使用传入的needsLock函数判断io.out.bits是否需要锁定,如果needsLock传入为None,则默认为true;
5) 触发锁定:想要锁定并且正在传输(io.out.fire() && wantsLock)
6) 锁定期间chosen使用lockIdx的值;
7) 锁定期间序号不同于lockIdx的输入口不被授权传输:Mux(locked, lockIdx === i.asUInt, g)
 
PS.
1) needsLock.map(_(io.out.bits)).getOrElse(true.B)
 
needsLock为Option,如同有一个或者没有元素的列表,调用其map方法对其中的元素进行转换。
如果没有元素,则返回None;如果有元素则对元素应用map()参数指示的函数,返回的Some()也是一个Option;
 
然后对None或Some调用getOrElse(),传递一个默认值;
 
2) (in, (g, i)) <- io.in zip grant.zipWithIndex
 
 
2. LockingArbiter
 
 
LockingArbiter继承自LockingArbiterLike,由于Locking逻辑已经在LockingArbiterLike中实现了。所以LockingArbiter就很简单,实现LockingArbiterLike中两个抽象方法即可。
 
a. choice
 
小号高优先级,n-1为默认值;
 
b. grant
 
 
小号的valid可以取消大号输入口的授权(grant)。

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

  1. Chisel3 - util - OneHot

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

  2. Chisel3 - util - MixedVec

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

  3. Chisel3 - util - Mux

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

  4. Chisel3 - util - Lookup

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

  5. Chisel3 - util - Valid

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

  6. Chisel3 - util - Math vs. CircuitMath

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

  7. Chisel3 - util - LFSR16

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

  8. Chisel3 - util - Bitwise

    https://mp.weixin.qq.com/s/MQzX1Ned35ztz0vusPdkdQ   比特相关的操作.   参考链接: https://github.com/freechipspro ...

  9. Chisel3 - util - BitPat

    https://mp.weixin.qq.com/s/80Q8j-OSMtgh5a92pI-MZA   使用value和mask来描述一个比特模式,即:value = bits & mask. ...

随机推荐

  1. P2762 太空飞行计划问题 网络流

    题目描述 W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,…,Em},和进行这些实验需要使用的全部仪器的 ...

  2. js获取对象属性的两种方法,object.属性名,[‘属性名’ ]

    1.通过点的方式 2.通过括号的方式 例: <input type="text" value="hello" id="text"/&g ...

  3. [hdu4585]离线,并查集

    题意:把一些数加到集合里面,每个数有两个属性,分别是编号和值,加进去之前询问集合里面距离自己“最近”的数的编号.最近的意思是值的差的绝对值最小,如果有相等的,则取值小的.并且已知所有数的id和valu ...

  4. HDU 2004 (水)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2004 题目大意: 给你成绩让你根据成绩打分解题思路: 简单的if...else 应用 需要注意是,if ...

  5. ASP.NET Core依赖注入(DI)

    ASP.NET Core允许我们指定注册服务的生存期.服务实例将根据指定的生存时间自动处理.因此,我们无需担心清理此依赖关系,他将由ASP.NET Core框架处理.有如下三种类型的生命周期. 关于依 ...

  6. flask之CBV模式

    flask_cbv.py ''' flask中的CBV模式: (1)导入views模块: from flask import views (2)定义类,继承views.MethodView类: cla ...

  7. Django之ORM对象关系模型

    MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需 ...

  8. RAID0、RAID1及RAID5的区别详解

    目前已有的RAID(Redundant Array of Independent Disks,独立冗余磁盘阵列)技术有很多种,但是RAID0.RAID1.RAID5是最常见的几种方案. 1 RAID0 ...

  9. 【Java】面试官灵魂拷问:if语句执行完else语句真的不会再执行吗?

    写在前面 最近跳槽找工作的朋友确实不少,遇到的面试题也是千奇百怪,这不,一名读者朋友面试时,被面试官问到了一个直击灵魂的问题:if 语句执行完else语句真的不会再执行吗?这个奇葩的问题把这名读者问倒 ...

  10. 如何快速全面掌握Kafka?这篇文章总结了

    Kafka 是目前主流的分布式消息引擎及流处理平台,经常用做企业的消息总线.实时数据管道,本文挑选了 Kafka 的几个核心话题,帮助大家快速掌握 Kafka,包括: Kafka 体系架构 Kafka ...