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._
我是 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._