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. JPA---Spring-data-JPA---Hibernate

    Spring Data JPA--搭建环境 版本---maven  3.6.3 <properties> <spring.version>5.2.5.RELEASE</s ...

  2. 【2020Java最新学习路线】写了很久,这是一份最适合普通大众、科班、非科班的路线

    点赞再看,养成习惯,微信搜索[三太子敖丙]关注这个互联网苟且偷生的工具人. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的 ...

  3. Boosting算法总结(ada boosting、GBDT、XGBoost)

    把之前学习xgb过程中查找的资料整理分享出来,方便有需要的朋友查看,求大家点赞支持,哈哈哈 作者:tangg, qq:577305810 一.Boosting算法 boosting算法有许多种具体算法 ...

  4. InnoDB的ibd数据文件为什么比data_length+index_length+data_free的总和还要大?

    问题描述: 同事在给jiradb做mysqldump时,发现dump出来的文件只有10MB左右,而ibd文件占用磁盘空间100MB左右. 最初,我们猜测可能是delete操作导致了大量的磁盘碎片,以及 ...

  5. 目前校园百晓生APP与CSDN软件的对比

    不忘初心.注入灵魂 设计之初 在做校园百晓生该APP时,初心是为校园的同学提供便捷的查询校园信息的服务,确实目前的软件已经实现了该功能,但是总感觉缺少一些灵魂,感觉大部分人渴望的重点在于信息而不是自己 ...

  6. vim(vi)的常用快捷键

    Vim 简介 vim是什么?听说它是编辑器之神!神一样的存在,而我却经常用上下左右箭头来移动光标,实在是有点对不起它,所以想着稍微学学一点神的技能吧! 一. vim的三种模式 Nomal mode:默 ...

  7. js 延迟加载的几种方法

    1. defer 属性HTML 4.01 为 <script>标签定义了 defer属性. 用途:表明脚本在执行时不会影响页面的构造.也就是说,脚本会被延迟到整个页面都解析完毕之后再执行. ...

  8. python3.x 基础四:生成器与迭代器

    1.预先存值到内存,调用之前已经占用了内存,不管用与不用,都占用内存 >>> a=[1,2,3,4,5] >>> type(a) <class 'list'& ...

  9. Java Web之路一:过滤器(Filter)

    一.过滤器(Filter)简介 过滤器是对web资源进行拦截,做一些处理后再交给下一个过滤器或Servlet处理,主要可以拦截request和response 过滤器是以一种组件的形式与web程序绑定 ...

  10. Intel FPGA Clock Region概念以及用法

    目录 Intel FPGA 的Clock Region概念 Intel 不同系列FPGA 的Clock Region 1. Clock Region Assignments in Intel Stra ...