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. mybatis的关系映射

    一.多对一的映射关系 举例:根据员工编号查询员工所在部门的部门信息 第一步,需要在多的一方也就是员工实体类中持有一的一方部门实体类的引用 第二步,在dao接口中声明方法 第三步,在mapper中实现该 ...

  2. HBase Filter 过滤器之QualifierFilter详解

    前言:本文详细介绍了 HBase QualifierFilter 过滤器 Java&Shell API 的使用,并贴出了相关示例代码以供参考.QualifierFilter 基于列名进行过滤, ...

  3. Git、Github习笔记01——Git本地仓库

    作者:Eventi 出处:http://www.cnblogs.com/Eventi 欢迎转载,也请保留这段声明.谢谢! git简介 版本控制软件,由Linus(linux开发者)开发,最初用来对li ...

  4. 使用 pyautogui 进行跨平台的 GUI 自动化操作

    有个朋友最近问我有没有推荐 GUI 桌面应用自动化的技术,我只能回答他:不好意思,这个真有,他是 pyautogui.主要有三大特征: 纯纯的 python, 源码一览无余: 跨平台,linux, w ...

  5. 基于 abp vNext 和 .NET Core 开发博客项目

    项目介绍 此个人博客项目底层基于 ABP Framework (不完全依赖)搭建项目 和免费开源跨平台的 .NET Core 3.1 开发,可作为 .NET Core 入门项目进行学习,支持各种主流数 ...

  6. MySQL安装(linux)

    Centos 安装mysql 安装mariadb yum install mariadb mariadb-server mariadb-devel 安装mysql rpm -qa | grep MyS ...

  7. 解决Hystrix dashboard Turbine 一直 Loading…… 及其他坑

    问题一.请求 /hystrix.stream 报错,我这里以端口9001为例 请求 http://localhost:9001/hystrix.stream 报404 是因为Srping Boot 2 ...

  8. tcp/ip 学习(一)

    TCP/IP协议是什么? TCP:Transmission Control Protocol  传输控制协议 IP:Internet Protocol  因特网协议 简单来说,TCP/IP协议就是一个 ...

  9. 走向统一的 .NET 旅程

    这是微软第一次完全线上举办的Build大会,也是第一次完全属于开发者的大会.几乎所有的新产品都是属于开发者,开发者成为了唯一的主角. 现在的微软比以往任何时候都贴近开发者,重视开发者的作用,为他们打造 ...

  10. 自己用C语言写NXP S32K144 serial bootloader

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader) 欢迎咨询或定制bootloader(在线升级程序). NXP S32K144 ...