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. Git 向远端仓库推文件

    第一次推送: 1.git init (创建本地仓库) 2. git remote add origin <远端仓库地址> (与远端仓库建立链接) 3.git checkout -b < ...

  2. (2).mybatis单元测试(junit测试)

    一.Junit使用步骤:1.创建测试目录,(src.测试目录是test)2.在测试目录test中创建与src中相同的包名3.为需要测试的类创建测试类,例如:UsersMapper,测试类是UsersM ...

  3. IDEA破解,自动激活【2020年版本也可以破解】

    破解 在破解之前,需要下载的文件有两个ideaIU-2019.3.3.exe.jetbrains-agent-latest.zip,前者是程序安装包,后者是破解补丁包(PS:补丁包里面有使用说明,下面 ...

  4. CC2530串口通信

    任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX). RX:接收数据串行输入.通过采样技术来区别数据和噪音,从而恢复数据. TX :发送数据输出.当发送器被禁止时,输出引 ...

  5. leetcode240——搜索二维矩阵(medium)

    一.题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 ...

  6. 你真的知道C语言里extern "C" 的作用吗?

    经常在C语言的头文件中看到下面的代码: #ifdef __cplusplus extern "C" { #endif // all of your legacy C code he ...

  7. 通过10个实例小练习,快速熟练 Vue3.0 核心新特性

    Vue3.0 发 beta 版都有一段时间了,正式版也不远了,所以真的要学习一下 Vue3.0 的语法了. GitHub 博客地址: https://github.com/biaochenxuying ...

  8. Python --函数学习3 (将函数存储在模块中)

    将函数存储在模块 函数可以将代码块和主程序分离,通过给函数指定描述性名称,可以让主程序更加容易理解,还可以更进一步,将函数存储在模块的独立文件中,再将模块导入到主程序.import 语句允许再当前运行 ...

  9. zsteg

    以前知道zsteg,但是没有去安装使用,所以就一直没有使用. 最近在找有关lsb隐写的题,发现有些大佬的wp上面写用zsteg就解决了lsb隐写的题,自己就想,难道zsteg很方便,于是就去安装zst ...

  10. APP测试知识中的monkey测试

              了解了logging模块的应用 1)两种方式,1:日志级别函数 2:日志级别的四大组件来实现日志功能(日志流处理) 2)日志流处理日志logging四大组件:logger(日志器) ...