Chisel 和 Scala 中的作用域

Scopes in Chisel and scala

我是 Chisel 的新手,我已经用它设计了基本电路和一个简单的 RISC-V 处理器,但我仍然无法弄清楚示波器在 Scala/Chisel 中是如何工作的。考虑以下简单计数器:

package example

import chisel3._

class GenericCounter(n: Int) extends Module {
  val io = IO(new Bundle {
    val ld   = Input(UInt(1.W))
    val cld  = Input(UInt(log2Ceil(n).W))
    val cout = Output(UInt(log2Ceil(n).W))
  })

  val cnt = RegInit(0.asUInt(n.W))

  when(io.ld === 1.U){
    cnt := io.cld
  } .otherwise{
    cnt :=  Mux(cnt===100.U, 0.U, cnt + 1.U)
  }
  io.cout := cnt
}

在尝试编译上述代码时,编译器给出了 log2ceil 未定义的错误。但是如果我使用 util.log2ceil 它工作正常。这适用于所有 util 函数,例如 Cat、isPow2 等。我知道 import chisel3._ 应该已经导入了所有必要的函数,但似乎我在这里遗漏了一些东西.有人可以帮我吗?

在 Scala 中,导入包的所有内容不会导入任何子包的内容。因此,如果您希望导入 chisel.util 的内容,您还应该编写 import chisel3.util._