https://mp.weixin.qq.com/s/Jsy8P3m9W2EYKwneGVekiw

 
独热码相关的电路生成器。
 
参考链接:
 
 
1. PriorityEncoderOH
 
1) Seq.tabulate(n)(f)
 
相当于把0到n-1逐个带入函数f,把每一次计算得出的结果f(n)连接成为一个序列返回。
 
2) encode
 
a. Seq[Bool]中的每一个选择位,生成一个独热码:
 
val outs = Seq.tabulate(in.size)(i => (BigInt(1) << i).asUInt(in.size.W))
 
b. 委托PriorityMux生成一个低序高优先的级联选择器:PriorityMux(in :+ true.B, outs :+ 0.U(in.size.W))
 
:+ true.B,:+ 0.U(in.size.W) 提供了一个默认值;
 
c. 返回的是一个UInt
 
3) 第二个apply:def apply(in: Bits): UInt = encode((0 until in.getWidth).map(i => in(i)))
 
把输入的Bits转换成一串Bool,然后直接把encode返回的UInt返回;
 
4)第一个apply:def apply(in: Seq[Bool]): Seq[Bool]
 
把encode返回的UInt拆成一串Bool返回;
 
2. UIntToOH
 
把UInt转换成为独热码,即把UInt的值对应的位置位。
 
1) 第一个apply不限制位数,所以比较简单:def apply(in: UInt): UInt = 1.U << in
2) 第二个apply限制最终生成的独热码的位数
 
假设UInt的值为6,生成的独热码为8位,则需要把第7位补0.
 
a. 隐含条件:width >= UInt的值
 
所以width所占的位数大于等于UInt的位宽,所以需要把in进行补位(pad);
 
b. in补位之后截取[shiftAmountWidth - 1, 0]
 
这些位中已经包含in的全部有效位,shiftAmount即是in的值;
 
c. 移位shiftAmount得到对应的独热码:(1.U << shiftAmount)
 
d. 截取[width - 1, 0],隐含类型推断和补位
 
可以看到8.U虽然只有4位,但对其截取[7, 0]之后返回的类型有8位。
 
3. PriorityEncoder
 
返回一个低序高优先级的级联选择器,输出为第一个为真的值的序号。
 
4. OHToUInt
 
与UIntToOH互逆,返回独热码中第几位为1。
 
使用分治策略,逐半递归求值。
 
5. 附录

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

  1. Chisel3 - util - MixedVec

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

  2. Chisel3 - util - Mux

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

  3. Chisel3 - util - Lookup

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

  4. Chisel3 - util - Valid

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

  5. Chisel3 - util - Math vs. CircuitMath

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

  6. Chisel3 - util - LFSR16

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

  7. Chisel3 - util - Bitwise

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

  8. Chisel3 - util - BitPat

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

  9. Chisel3 - util - LockingArbiter

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

随机推荐

  1. A. A Twisty Movement dp

    https://codeforces.com/problemset/problem/933/A 这个是一个dp,但是我并没有看出来,然后也不太会写, 这种题一般应该要想到先预处理前缀和后缀,然后再进行 ...

  2. 仿站-获取网站的所有iconfont图标

    在仿站过程中,网站的iconfont查找非常浪费时间,这里教大家一次性获取网站iconfont的方法 1.打开 开发者工具 在element中搜索font-face,结果如下,复制font-face所 ...

  3. JS做类型检测到底有几种方法?看完本文就知道了!

    JS有很多数据类型,对于不同数据类型的识别和相互转换也是面试中的一个常考点,本文主要讲的就是类型转换和类型检测. 数据类型 JS中的数据类型主要分为两大类:原始类型(值类型)和引用类型.常见的数据类型 ...

  4. python 矢量数据转栅格数据

    from osgeo import gdal,osr,ogr#定义投影sr = osr.SpatialReference('LOCAL_CS["arbitrary"]')#在内存中 ...

  5. LeetCode--Squares of a Sorted Array && Robot Return to Origin (Easy)

    977. Squares of a Sorted Array (Easy)# Given an array of integers A sorted in non-decreasing order, ...

  6. Linux内核驱动学习(一)编写最简单Linux内核模块HelloWorld

    文章目录 准备工作 什么是内核模块 编写 hello.c 模块编译 相关指令 测试结果 模块加载 模块卸载 准备工作 在进行以下操作前,首先我准备了一台电脑,并且安装了虚拟机,系统是Ubuntu16. ...

  7. JDBC14 ORM03 JavaBean封装

    Javabean对象封装一条信息(推荐) 让JavaBean的属性名和类型尽量和数据库保持一致 一条记录对应一个对象,将这些查询到的对象放到容器中(List) 表信息如下 List封装多条信息 Con ...

  8. [hdu4498]离散化,simpson求积分

    题意:,求这个函数在[0,100]上的图像的长度. 思路:采用离散化的思想,求出所有交点 ,把交点排序,把[0,100]分成若干个小区间,这样原函数在每个小区间上的图像属于某一个二次函数或者是一条直线 ...

  9. Windows系统目录

    文件功能 编辑 ├—WINDOWS │ ├—system32(存放Windows的系统文件和硬件驱动程序) │ │ ├—config(用户配置信息和密码信息) │ │ │ └—systemprofil ...

  10. 批量下载B站视频

    一个一个下载:https://www.zhihu.com/question/41367609 WSDAB的回答批量下载:https://www.zhihu.com/question/49793759( ...