首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以基于chisel数据类型的条件在Chisel中使用while循环?

是否可以基于chisel数据类型的条件在Chisel中使用while循环?
EN

Stack Overflow用户
提问于 2020-02-23 09:16:57
回答 2查看 278关注 0票数 3

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

代码语言:javascript
复制
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) {

    }
}

我得到的错误是“chisel.Bool < io.in”是一个测试,而不是一个布尔值。我知道我不能将其转换为Scala类型,对吧?

实现这一点的正确方法是什么?是否将信号发送到/从Module1发送到Module2,以指示加速器尚未完成,并仅在加速器完成时才继续?如果是这样的话,如果你有几个函数,每个函数都在不同的模块中,这不是很快就会变得复杂吗?

EN

回答 2

Stack Overflow用户

发布于 2020-02-23 10:57:30

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

票数 1
EN

Stack Overflow用户

发布于 2020-02-27 03:23:56

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

现在回答你的问题,正如奇克提到的,你可以使用chisel3构造when.elsewhen.otherwise来处理实际硬件中的控制流:

代码语言:javascript
复制
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
    }
}

同样,正如奇克提到的,你可能需要一些状态(使用Reg),因为你可能需要在多个时钟周期上做事情。在没有更多信息的情况下,很难在这个简单的例子之外提供建议,但如果您需要更多帮助,请扩展您的问题或询问更多问题。

如果是这样的话,如果你有几个函数,每个函数都在不同的模块中,这不会很快变得复杂吗?

我不确定如何在没有更多上下文的情况下回答这个问题,但Chisel的整个目的是让创建允许您处理复杂性的抽象变得更容易。Chisel支持在设计硬件时进行软件工程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60358354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档