scala - 是否可以根据 Chisel 数据类型的条件在 Chisel 中进行 while 循环?

标签 scala while-loop hdl chisel

这就是我想要完成的事情:我有一个 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 < io.in”是一个 chisel.Bool,而不是 bool 值。我知道我无法将其转换为 Scala 类型,对吧?

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

最佳答案

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

关于scala - 是否可以根据 Chisel 数据类型的条件在 Chisel 中进行 while 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60358354/

相关文章:

scala - 整数 vs 整数 : type mismatch, 找到 : Int, 需要:字符串

java - while 循环不会因异常而停止循环

javascript - 如何在它外面打破 while 循环

verilog - Vivado 2016.2 模拟器不支持 System Verilog $cast 或 $sformatf

scala - Scala 中的选项 monad

json - 在 Scala 中使用 play ws POST 请求

scala - Maven 未正确构建 Scala 项目

java - 循环时不接受我输入的 key - Java AWT

verilog - Quartus 不允许在 Verilog 中使用生成模块