这就是我想要完成的事情:我有一个 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
系列构造函数创建的寄存器,并使用 when
、elsewhen
和 控制流程>否则
。我认为一个很好的例子是在 chisel bootcamp 的 2.6_testers2.ipynb 中。 . GCD电路相当于一个while循环。电路继续,直到 y
寄存器递减为零。每个时钟周期对应于软件 while 循环的一次迭代。该电路使用 Decoupled
输入和输出的就绪和有效字段来协调摄取新数据并在计算 GCD 值时报告。查看此示例,看看您是否还有其他问题。
关于scala - 是否可以根据 Chisel 数据类型的条件在 Chisel 中进行 while 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60358354/