Chisel徒然メモ
Chiselは UCバークレー校で開発されたHDL(ハードウェア記述言語)です。ScalaベースのDSL(ドメイン固有言語)になります。
気がついたことやハマったことを徒然にメモるページです。もっと良い方法があれば教えてください。
Chisel早見表
https://chisel.eecs.berkeley.edu/2.2.0/chisel-cheatsheet.pdf
https://chisel.eecs.berkeley.edu/doc/chisel-testercheatsheet.pdf
Chiselでコードをを書く
var と val
基本的にはChiselでは val (=value) をつかう。 でも var (=variable) も使えたりする(エラーは出ない)。 Chiselのコードはその後同期回路になるので変数であるvarだと色々おかしなことになりやすい。Testのコードでは var を使うのでぼーっとしてると混じりやすい。
- Ref
- Chisel Style Guide
- Scalaのvar, valの違い
つながってない信号は消える
ModuleのIOポートで外部とつながってない入力があると、その入力は(おそらく)ゼロとして扱われる。またその入力に関する内部信号はFIRRTLからごっそり消される。モジュールも消える。TOPで繋がっている信号は消されないが、内部のモジュール間などで未配線の信号がある場合注意が必要。
Chiselでテストベンチを書く
- Using the PeekPokeTester
- Chisel tutorial
PeekPokeTesterの使い方は、Chisel tutorial のサンプルコードがわかりやすい。TutorialRunnerが実行部分。それぞれのディレクトリにある Launcher で実行するテストを選択する。 Launcherへの入力は run-examples.sh の例のように SBT実行の際の ARGS で何を実行するか指定する。
このあたりはBashでもMakefileでやってもOK。
クロック信号
複数のクロックドメインを扱う場合に、信号をクロックに変換したり、その逆をしたくなる。
クロック信号の宣言
val my_clock = Wire(Clock())
普通の信号をクロックに変換
val my_clock = hoge.asClock()
クロック信号を普通の信号に変換
val hoge = my_clock.asUInt
テストベンチで内部信号の波形を見たい
- 実行にverilatorを使います
- オプション --backend-name verilator をつければOK
- VCDを吐くので、gtkwave なのを使って波形を表示します。
- DUT部分はFIRからVerilogが生成される、Testerの方はC++のコード? 動作の詳細がちょっと良くわからないがとりあえず動く。
- Chiselのprintfは$fwriteに変換される
- verilatorが古いと$fwriteがエラーになる
- Ubuntuのverilatorが少し古い
- 最新版を使います。
- SiFiveがDPKGを作ってくれているのでそれを使ってもOK
- https://github.com/sifive/verilator/releases
- ただし、Install先が /user/local になるので注意
- Chiselのコードにprintfがあっても実行には問題ないが、実行してもコンソールには出ない。うーん?
テスベンチをVerilogバックエンドで実行した時と振る舞いが異なる(1)
val delay1 = Reg(init = UInt(0, 1))
delay1 := io.in_data
だと、Verilogでの実行は問題ないが、Chisel(FIR)の実行ではdelay1がラッチにならない?
val delay1 = Reg(init = UInt(0, 1))
when (!reset) {
delay1 := io.in_data
}
こう書けば問題ない。
テスベンチをVerilogバックエンドで実行した時と振る舞いが異なる(2)
クロックゲートを入れでwithClock でクロックドメインを分離すると、Verilogバックエンドでは動くのに、Chisel/FIRRTLでは動かないことがある。Stackoverflowにも同じ事が報告されていたのでそういうものとして注意するのが良さそう。
- Chisel — clock gating
追記:DUT側でSimulationのClockの2倍のClockをカンター等で生成して、その生成をEnable信号で制御する分には問題ない。Test側のPeek,Pokeも2倍Clockに合わせて動かせばOK.
非同期リセット
Chisel3でサポートの予定
EOF
Author And Source
この問題について(Chisel徒然メモ), 我々は、より多くの情報をここで見つけました https://qiita.com/mune10/items/64e2bfe32d5a6d8a9e64著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .