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

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

Chisel Bootcamp - Module3.5(3) - グレイコードのエンコーダとデコーダ

前回のChiselの記事ではFIRRTLを可視化するツールdiagrammerを試してみた内容をまとめた。

www.tech-diningyo.info

今回はしばらく進めていなかったChisel-Bootcampに戻り、Module3.5の残りを見ていく。 オブジェクト指向プログラミングをChiselに適用すると??という話だ。

続きを読む

FIRRTLの可視化ツールdiagrammerを試してみた

前回のChiselの記事ではiotestersを使って自分のデザインしたChiselのモジュールをテストする方法についてをまとめた

www.tech-diningyo.info

今回は少し前にChiselの公式ツイッターがツイートしていたdiagrammerというChiselから生成されるFIRRTLをグラフにして可視化するツールを試してみた内容を書いてみる。

  • diagrammerを試してみる
    • インストール
    • 依存ライブラリ
    • diagrammerの実行
    • sodorの1stage版のFIRRTLを変換した結果。
続きを読む

Chiselで作ったモジュールをPeekPokeTesterでテストするまでの流れのまとめ

前回のChiselの記事では今更ではあるがChiselでデザインしたハードウェアをVerilogのRTLに変換するためにやることについてをまとめた。

www.tech-diningyo.info

今日はついでなので、前回の続きというかその前の段階とかに位置しているはずのChiselで作っているハードウェアをそのままChiselのテスト機能でテストする方法をまとめてみる。

  • Chiselで作ったハードウェアデザインをテストする方法
    • 変換するChiselのコードが書かれたファイル
    • Chiselのテスト・ハーネスの設定
    • テスト用のメイン関数の追加
      • 追加するテスト用のコード
        • iotestersのインポート
        • テスト用メイン関数の作成
      • テストの改良
        • Topモジュール用のテスター
        • テストを改良
    • まとめ
続きを読む

Chiselで設計したハードウェアをVerilogのRTLに変換する流れのまとめ

前回のChiselの記事ではBundleを使ってオプションのIOポートをまとめて制御する方法を紹介した。

www.tech-diningyo.info

最近Chisel周りの調査をいろいろやっているが、ChiselのコードをVerilogのRTLに変換する方法についてを簡単にまとめた日本語の記事が見当たらない気がしたので今更感はあるがまとめておこうと思う。

  • ChiselのハードウェアデザインからVerilogのRTLを生成する方法
    • 変換するChiselのコードが書かれたファイル
    • build.sbtの準備
    • ディレクトリ構造
    • sbtを実行してRTLを生成
    • まとめ
続きを読む

ChiselのBundleとSomeを使ったデバッグ用インターフェースの作り方

前回のChiselの記事ではBundleの基本的な使い方についてをまとめたみた。

www.tech-diningyo.info

今回は前回まとめたBundleを使ってモジュールのIOポートをオプション化する方法についてをまとめておく。

  • ChiselでIOポートのオプション化するには?
    • モジュールのIOポートのオプション化ーその1
    • モジュールのIOポートのオプション化ーその2
    • FIRRTLレベルでの比較
      • Someを使った場合
      • ビット幅を0にした場合
    • 出力ポートのオプション化
      • Someを使っ出力ポートのオプション化
      • ビット幅を0にする場合
  • 複数のポートをまとめてオプション化する方法
    • 前に紹介したビット幅0にする方法で行う複数ポートのオプション化
    • SomeとBundleですっきり!!
続きを読む

ChiselのBundleの使い方をまとめてみる

前回のChiselの記事では出力ポートに0xdeadbeafを定数で入れたらエラーが出てハマったので解決方法について調べた。

www.tech-diningyo.info

今回はChisel-Bootcampではサラッと流されているChiselのBundleを使ったデータの構造化についてをまとめてみる。

  • Bundleは”データを構造化”するもの
    • Bundleの使い方
      • 使用例
    • 改めて”Bundleはデータを構造化するもの”
    • I/Oポートで使うのはいろいろと便利
      • I/Oポートの構造化
続きを読む

ChiselのUIntで大きな定数を使おうとしてハマった話

前回のChiselの記事ではChisel-bootcampのModule3.5のコンパニオン・オブジェクトとケース・クラスについてを勉強した。

www.tech-diningyo.info

今回はちょっとChisel-Bootcampから離れてChiselを試していたハマったUIntの大きい定数値の扱いについてを紹介していく。

  • ChiselのUIntで大きな定数を使おうとしてハマった話
    • 何がしたかったのか??
    • でもエラボレートするとエラーが起きるんだ
    • どうずれば解決できるのか
      • 解決策1:ScalaのLongを使う(64bit未満のデータ限定)
      • 解決策2:ScalaのBigIntに変換してからChiselのUIntに渡す
      • 解決策3:Chiselの型変換でBigInt→UIntに変換
続きを読む