【问题标题】:Is it possible to have a while loop in chisel based on a condition of Chisel data types?是否可以根据 Chisel 数据类型的条件在 chisel 中进行 while 循环?
【发布时间】:2020-02-23 01:16:57
【问题描述】:

这就是我想要完成的事情:我有一个 Chisel 加速器,它调用另一个 Chisel 加速器并传入一个值。我希望第二个在其中有一个 while 循环,其中条件部分基于输入值。下面是一些示例代码:

class Module1 extends Module {
    val in = 0.U
    val Module2Module = Module2()
    Module2Module.io.in := in
}

class Module2 extends Module {
    val io = IO(new Bundle {
        val in = Input(Reg(UInt))
    }
    val test = 0.U

    while (test < io.in) {

    }
}

我收到错误消息,“test

实现这一点的正确方法是什么?是通过向/从 Module1 发送到 Module2 的信号来指示加速器尚未完成并且仅在完成时继续进行吗?如果是这样,如果您有多个功能,每个功能都在不同的模块中,这不会很快变得复杂吗?

【问题讨论】:

    标签: scala while-loop hdl chisel


    【解决方案1】:

    您将需要使用由Reg 系列构造函数创建的寄存器,并使用whenelsewhenotherwise 控制流程。我认为你的一个很好的例子是chisel bootcamp 的 2.6_testers2.ipynb。 GCD 电路相当于一个 while 循环。电路继续运行,直到y 寄存器递减至零。每个时钟周期对应于软件 while 循环的一次迭代。该电路使用Decoupled 输入和输出的就绪和有效字段来协调摄取新数据并在计算 GCD 值时进行报告。看看这个例子,看看你是否还有其他问题。

    【讨论】:

    • 谢谢!我实际上已经完成了 Chisel 训练营;我想我只是在实践中遇到了麻烦。假设我看对了,3.2 节似乎没有使用 elsewhen/otherwise 的控制流示例;你介意推荐一个具体的例子吗?
    • 对不起,我明天做一个例子。我大部分时间都处于离线状态
    【解决方案2】:

    为了详细说明为什么不能将while 循环与chisel3.Bool 之类的硬件值一起使用,您可以将chisel3 设计视为一个在执行时构建硬件设计的Scala 程序。当chisel3 运行时,它只是运行一个程序,其输出是您的电路(最终以Verilog 发出)。 while 是一个 Scala 构造,因此它仅在程序执行期间可用,实际硬件中不存在。有一个similar question and answer about for loops on the chisel-users mailing list

    现在回答您的问题,正如 Chick 所说,您可以使用 chisel3 构造 when.elsewhen.otherwise 来处理实际硬件中的控制流:

    class Module2 extends Module {
        val io = IO(new Bundle {
            val in = Input(Reg(UInt))
        }
        val test = 0.U
    
        when (test < io.in) {
          // Logic for that applies when (or while) the condition is true
        } .otherwise {
          // Logic that applies when it isn't
        }
    }
    

    正如 Chick 提到的,您可能需要一些状态(使用 Regs),因为您可能需要在多个时钟周期内执行操作。如果没有更多信息,除了这个简单的示例之外,很难给出建议,但是如果您需要更多帮助,请扩展您的问题或提出更多问题。

    如果是这样,如果您有多个功能,每个功能都在不同的模块中,这不会很快变得复杂吗?

    如果没有更多上下文,我不确定如何回答这个问题,但 Chisel 的全部目的是让创建抽象概念变得更容易,让您能够处理复杂性。 Chisel 在设计硬件时支持软件工程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-23
      • 1970-01-01
      相关资源
      最近更新 更多