我刚开始使用 Chisel 并编写了一个简单的计数器来闪烁 LED。FPGA板(Lattice iCEstick)有一个反相的复位信号,而不是改变生成的verilog中的极性,我想在Chisel中设置它。
我发现 Module 有一个_reset
Chisel.Bool 类型的参数,可以将其设置为 false,从而反转复位信号。这是其他人使用它的示例。但是,我遇到了一个似乎无法修复的错误。首先,代码:
import Chisel._
class Blink( rstPol: Bool = null ) extends Module( _reset = rstPol ) {
val io = new Bundle {
val led = UInt( OUTPUT, 1 )
}
val cnt_next = UInt()
val counter = Reg( init = UInt( 0, 24 ), next = cnt_next )
cnt_next := counter + UInt( 1 )
io.led := counter( 23 )
}
object blinkmain {
def main( args: Array[ String ] ): Unit = {
chiselMain( Array( "--backend", "v" ),
() => Module( new Blink( Bool( false ) ) )
)
}
}
我得到的错误是:
[error] Blink.scala:19 < /*??*/ Chisel.Bool(OUTPUT, width=1, connect to 0 inputs: ()) > doesn't have its component,yet. in class blinkmain$$anonfun$main$1$$anonfun$apply$1
如果我不提供Bool( false )
参数,那么我不会出错,但我的复位极性当然仍然是正的。
我已经尝试过rstPol: Bool = Bool( false )
,Module( _reset = Bool( false ) )
但在第 3 行遇到了同样的错误。似乎它试图将 Bool 分配给没有宽度的东西,但我不知道这怎么可能。
我检查了我使用的是哪个版本的 Chisel,它是2.2.33
. 这是我的 build.sbt 文件,以防它很重要:
scalaVersion := "2.11.7"
libraryDependencies += "edu.berkeley.cs" %% "chisel" $ "latest.version"
scalacOptions ++= Seq("-deprecation", "-feature", "-unchecked", "-language:reflectiveCalls")