ハードウェアの気になるあれこれ

技術的に興味のあることを調べて書いてくブログ。主にハードウェアがネタ。

Chisel-Bootcampの気になってたことを調べてみた

このブログでは自分のChiselの勉強を進めるための題材としてChisel-Bootcampを使わせてもらっている。
今回はChisel-Bootcampをやっていて今まで放置していた部分について、仕組みを調べてたのでそれをまとめてみる。

  • getVerilogって何よ?
  • dsptoolsが使えるわけ
続きを読む

Chiselで算術右シフトをするにはどうすればいいかを調査した

前回はChiselのBundleへのアクセスを簡単にする方法を紹介した。

www.tech-diningyo.info

今回はいま実装しているHWの処理の関係で算術右シフトが必要になった時に、どうすれば良いのか悩んだので、その話をまとめておく。

  • Chiselで算術右シフト
    • Chiselではどーする??
      • 算術右シフトの挙動確認コード
      • テストコード
    • ちょっとだけ実装を覗いてみる
      • Bits.scalaのBitsの実装部分(L.231(Chiselのバージョンは3.1.7))
      • Bits.scalaのSIntの実装部分(L.683あたりから)
続きを読む

ChiselのBundleをvalで受けるといろいろ便利だった話

前回のChiselのPeekPokeTesterにはIntBigIntに変換するメソッドが合ったのでそrを紹介した。

www.tech-diningyo.info

今回も最近Chisel書いていて「あ、これ出来るんじゃん!」という気付きがあったので、それをまとめておこうと思う。ぶっちゃけScalaが分かってないというのも関係してるので「なんだそんなことかよ。。。」ってなるかも。

  • Bundleで構造化したデータはエイリアスを作ってアクセスしやすく出来る
    • Bundleで構造化した際にめんどくさいなーーって思っていた点
    • Bundleのオブジェクトを丸々受け取ればそれで良かった
      • インターフェース用のBundle
    • Bundleごとvalで受け取った際に、正常に接続が行われるかどうか
    • Bundleを受け取るメソッドを定義して、その中で意図どおりの接続が出来るか
    • スーパークラスを受け取るメソッドを用意して、それにサブクラスを渡した時に意図どおりの接続が出来るか
続きを読む

ChiselのPeekPokeTesterにはIntをBigIntに変換するメソッドがあった話

前回のChiselのテスト実行時にプログラム引数を指定する方法についてを紹介した。

www.tech-diningyo.info

今日は以前に書いた”UIntの大きな定数を指定する方法”を書いた時には気づかなかったメソッドを見つけたのでそれを紹介しようと思う。

  • ChiselでUIntの大きな数字を扱うと。。
  • でもちゃんとIntをBigIntに変換するメソッドがある
    • 実装を見てみる
続きを読む

Chisel使った開発環境でテスト実行時にプログラム引数を指定する方法

前回の記事でChiselFlatSpecを使ったBDDスタイルの開発例、、、、みたいな記事を書いてみた。

www.tech-diningyo.info

その際にデバッグの時に引数とか追加できんのかいねー??とか思って、方法を探してみたのでそれを書いてみようと思う。

  • Chiselのテスト実行時にプログラム引数を指定する方法
    • BeforeAndAfterAllConfigMapを使ってConfigMapを操作する方法
      • テスト実行時のプログラム引数の指定方法
続きを読む

ChiselFlatSpecを使った振る舞い駆動開発(BDD)によるハードウェア実装とテストの例

前回の記事でChiselFlatSpecを使うための前段階として、ベースとなっているScalaのテストハーネスScalaTestについて気になっていた部分を調査していった。

www.tech-diningyo.info

前回の終わりに書いた通り、今日は簡単なChiselのモジュールを作成し、それをChiselFlatSpecを使ったBDDスタイルのテスト環境でテストしてみようと思う。
かなり長くなりましたがよければ読んでみてくださいm(_ _)m

  • ChiselFlatSpecを使ったChiselモジュールの検証環境構築
    • 作成するFIFOモジュールの仕様
      • 入出力端子
      • 動作波形
    • プロジェクトの作成
    • テスト環境の作成
      • テスト対象のFIFOクラスの作成
      • テスト用クラスの作成
        • FifoUnitTesterのメソッドの実装
      • テストの作成
    • 残りのテストの作成
続きを読む

ChiselFlatSpec使うためにScalaTestのFlatSpecを調査した話

今日はChiselのためのScalaのお勉強ネタを。調べるのはScalaのテストハーネスの一種であるScalaTestについて。

事の発端はSCR1というRISC-Vの実装をChiselで書いてみようとしていて、その際にriscv- testsの各試験をChiselのテストハーネスであるChiselFlatSpecを使ってどのように実装すれば良いのかがわからなかったからで少し調べたところChiselFlatSpecを理解するためにはベースになってるScalaTestのFlatSpecを理解しておかないと駄目な気がした、という話。

なお本記事は以下のQiitaの記事をなぞるところからスタートします。 Step単位で説明してくれていて分かりやすかったです。ありがとうございますm(_ _)m
※ScalaTestのバージョンが上がった関係でパッケージが移動したりしてたので、それは新しいものに合わせて直しました。

qiita.com

またScalaTestの説明も含めてドワンゴさんのScalaの研修テキストも併せて参考にさせていただきました。 こちらも分かりやすい資料を公開していただき、ありがとうございますm(_ _)m

dwango.github.io

  • Chisel-templateの例で気になっていたこと
  • ScalaTest
  • FlatSpec使ったテストの例
    • プロジェクトの準備
      • テストの作成
      • テストの追加と実行
        • 特定のテストの実行
続きを読む