zoukankan      html  css  js  c++  java
  • Chisel3

     https://mp.weixin.qq.com/s/TK1mHqvDpG9fbLJyNxJp-Q

     
    Mux相关电路生成器。
     
    参考链接:
     
     
    1. MuxCase
     
     
    按在mapping中的顺序为优先顺序,若前一个元素的Bool为真,则返回该元素的T;否则,看下一个元素。若所有元素的Bool都为假,则返回default。
     
    2. MuxLookup
     
    与MuxCase类似,不同点在于mapping的Key不是Bool,而是S类型,需要与key进行比较。
     
    3. PriorityMux
     
    1) 第三个apply委托给第二个apply
     
    (0 until in.size).map(sel(_))逐个取出sel中的每一位,作为Bool返回;
     
    2) 第二个apply委托给第一个apply
     
    sel zip in 把每个序列中的相同序号的元素提取出来组合成一个元组,最终形成一个元组的序列;
     
    3) 第一个apply
     
    使用递归实现低序高优先的级联选择器。
     
    4. Mux1H
     
    使用独热码(one hot)编码选择参数(Seq[Bool]),意即其中只有一个为真,其他都为假。
     
     
    1) 第一个apply委托给第二个apply
    2) 第三个apply委托给第一个apply
    3) 第四个apply: def apply(sel: UInt, in: UInt): Bool = (sel & in).orR
     
    返回sel选中的比特是1还是0;
     
    4) 第二个apply: def apply[T <: Data](in: Iterable[(Bool, T)]): T = SeqUtils.oneHotMux(in)
     
    返回Bool为真的T。根据假设只有一个元组的Bool为真。
    实现比较复杂,这里不再展开。
     
    PS. reduceLeft从左到右逐个把所有元素提取出来参与op运算。第一次提取的为前两个元素:
     
    5. 附录
  • 相关阅读:
    chess「dp」
    e[树上主席树]
    d[贪心]
    神盐皇
    LA 8043. ACM-ICPC World Finals 2017 E. Need for Speed
    八数码问题
    UVa 679. Dropping Balls
    关于时间复杂度
    欧拉序列 (Euler Tour)
    莫队算法
  • 原文地址:https://www.cnblogs.com/wjcdx/p/10171621.html
Copyright © 2011-2022 走看看