2016-04-25 6 views
0

Chiselから始めたばかりで、LEDを点滅させる簡単なカウンタを書きました。 FPGAボード(Lattice iCEstick)には反転されたリセット信号があり、生成されたVerilogの極性を変更する代わりにChiselで設定します。クラスのパラメータ化でBoolを使用してリセット極性を逆転することはできません

モジュールには、リセット信号を反転するfalseに設定できるChisel.Boolタイプの_resetパラメータがあることがわかりました。 Hereは、他の人がそれを使用している場所の例です。しかし、私は修正できないようなエラーが出ています。まず、コード:

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))) 
    ) 
    } 
} 

そして、私が取得エラー:私は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 

は、その後、私はエラーを取得していないが、もちろん私のリセット極性はpositveまま。

私はrstPol: Bool = Bool(false)Module(_reset = Bool(false))を試しましたが、3行目に同じエラーが表示されます。幅を持たないものにBoolを割り当てようとしているようですが、それはどう考えられるかわかりません。

私が使用しているチゼルのバージョンとそれが2.2.33であることを確認しました。ここに私のbuild.sbtファイルは、それが重要だ場合には次のとおりです。

scalaVersion := "2.11.7" 

libraryDependencies += "edu.berkeley.cs" %% "chisel" $ "latest.version" 

scalacOptions ++= Seq("-deprecation", "-feature", "-unchecked", "-language:reflectiveCalls") 

答えて

0

私はスカラ座やチゼルに新たなんだので、私は間違ってModule_resetパラメータが正または負のリセット信号かどうかを示すためにBoolだったと仮定しました生成される。エラーメッセージが言及してあなたはBoolOUTPUTに反ししかし_resetからBoolINPUTを、接続することができます。

これは、(私はカウンター幅パラメータswidthでそれを拡張しましたが、それは無関係です)私はそれを固定する方法である:

import Chisel._ 

class Blink(swidth: Int, rst: Bool = null) extends Module(_reset = rst) { 
    val io = new Bundle { 
    val led = UInt(OUTPUT, 5) 
    } 

    val counter = Reg(init = UInt(0, width = swidth)) 

    counter := counter + UInt(1) 

    io.led := counter(swidth - 1, swidth - 5) 
} 

class Top extends Module { 
    val io = new Bundle { 
    val led = UInt(OUTPUT, 5) 
    val rstn = Bool(INPUT) 
    } 

    val rst = Reg(next = Reg(next = !io.rstn)) 
    val blink = Module(new Blink(27, rst)) 

    blink.io.led <> io.led 
} 

object BlinkMain { 
    def main(args: Array[ String ]): Unit = { 
    chiselMain(Array("--backend", "v", "--targetDir", "verilog"), 
    () => Module(new Top()) 
    ) 
    } 
} 

だから私は反転リセットをとるBlinkをインスタンス化Topモジュールを、作成しました入力(rstn)し、反転して_resetに割り当てます。良い測定のために、私はrstnを2つのフリップフロップに通して入力クロック信号と同期させます。

関連する問題