【问题标题】:Examples in Chisel that make use of MuxCaseChisel 中使用 MuxCase 的示例
【发布时间】:2019-10-10 23:02:03
【问题描述】:

如何在不使用 2:1 Muxes 的情况下在 chisel 中实现 4:1 Mux?有没有一种方法可以让我们通过像 Mux(sel, A,B,C,D.......N) 这样的东西来选择 N 个输入中的一个输入,其中 N 可以作为参数?我知道凿子中的 MuxCase,但我还没有找到使用 MuxCase 的示例,非常感谢任何类型的文档或示例。谢谢。

【问题讨论】:

    标签: chisel


    【解决方案1】:

    MultiWidthFifo.scala@@987654321 中的 Rocket-chip 有几种用法

    这很简单。如果提供的条件都不为真,它会采用默认值,否则它会查看一系列元组,其中每个元组的形式(布尔条件,结果)通常写成条件 -> 结果。返回值是第一个布尔条件为真的结果。

    这是一个 toy 模块示例,该模块将输入 bool 的数量传递给模块,然后使用该值构造一个 mux 案例序列。

    class UsesMuxCase(numCases: Int) extends Module {
      val io = IO(new Bundle {
        val output = Output(UInt(10.W))
        val inputs = Input(Vec(numCases, Bool()))
      })
    
      val cases = io.inputs.zipWithIndex.map { case (bool, index) =>
        bool -> index.U(10.W)
      }
      io.output := MuxCase(0.U(10.W), cases)
    }
    

    【讨论】:

    • 感谢您的回复。是的,我明白这一点,但我的问题是我们可以动态增加在运行时检查的案例数量,而不是固定数量的案例吗?我可以使用某种参数添加更多案例吗?
    • 我已经编辑了答案,以展示如何使用参数化数字来控制传递给 MuxCase 的案例数
    • 谢谢,这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    相关资源
    最近更新 更多