gpt4 book ai didi

chisel - 当我们应该在 chisel3 中使用 ":="而不是 "="时,同样的情况是 "when"和 "if"

转载 作者:行者123 更新时间:2023-12-03 21:42:50 25 4
gpt4 key购买 nike

最近在学习chisel3,有以下问题: 当我们应该使用“:=”而不是“=” 同样的情况是“何时”和“如果”。 或者您能否为这些情况提供一些通用规则?

另一个问题是关于“Wire”,当我们声明一个 val 时,它应该使用或不使用的规则是什么?

非常感谢!碧波

最佳答案

这里的根本区别是某些操作是Scala 操作,而某些操作是Chisel 操作。 Scala 操作被静态评估以构建硬件生成器。凿子操作用于描述硬件组件如何连接和交互。对于您提供的两个示例:

  • Scala 操作
    • this = that 做 Scala 赋值
    • if (condition) { body } 是标准条件
  • 凿子操作
    • this := that 将一种 Chisel 类型连接到另一种 Chisel 类型
    • when (condition) { body } 是一个硬件条件

要具体化这一点,请考虑以下混合了 Scala 操作和 Chisel 操作的 Chisel 模块

import chisel3._
/* param is a Scala Boolean that will change the internals of Foo */
class Foo(param: Boolean) extends Module {
/* We do Scala assignment of a Chisel type (a Bundle) to value "io" */
val io = IO(new Bundle{})

/* We use a Scala conditional to change whether or not "x" will be
* a 1-bit wire or a 2-bit wire */
val x = if (param) { Wire(UInt(1.W)) }
else { Wire(UInt(2.W)) }

/* Finally, we do a Chisel assignment (hardware connection) of x
* to a literal 0 */
x := 0.U
}

在幕后,Chisel“操作”实际上是为使用看起来熟悉的名称的 Chisel 类型定义的方法,例如 := 是 Chisel connect 和 === 是凿子硬件平等。这些必须不同于它们的底层 Scala 操作,例如,= 是 Scala 赋值,== 是 Scala 相等。


Wire 如果你想描述你可以进行硬件操作的实际硬件,则需要。 Reg 也是如此。一个简单的 Chisel 类型,如 UInt 通常只用于描述一个 Bundle 或一些 io.要使用此 Chisel 类型进行硬件连接/操作,您需要将其包装在 Reg()Wire() 中。

关于chisel - 当我们应该在 chisel3 中使用 ":="而不是 "="时,同样的情况是 "when"和 "if",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51644857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com