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

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

Chisel

Rocket ChipのGeneratorのソースの解析メモ(3) - TestHarnessの中身

Rocket Chip環境の仕組み解析メモの垂れ流し記事。前回のgenerateFirrtlで実際にChiselのモジュールとして回路化されるTestHarnessを見ていく。 TestHarness dontTouchPorts tieOffInterrupts connectSimAXIMem connectSimAXIMMIO dut.l2_frontend_bus_axi4.…

Rocket ChipのGeneratorのソースの解析メモ(2) - generateFirrtlを追ってみる

Rocket Chip環境の仕組み解析メモの垂れ流し記事。前回見ていったGeneratorの中のgenerateFirrtlを見ていくのが良さそうだったので、今回からはそれを少しずつ見ていく。 generateFirrtl トレイト"GeneratorApp"の挙動 elaborateの処理

Rocket ChipのGeneratorのソースの解析メモ(1)

Rocket Chip環境の仕組み解析メモの垂れ流し記事。とりあえずRTL生成時のざっくりした流れを追ったメモを元に少しだけ手直し。 Rocket ChipのRTL生成フロー(全体の流れ) src/main/system/Generator.scala オブジェクトの宣言 テストスイートの構築メソッド…

Chiselのハードウェアを型のインスタンスに変換(chiselTypeOf)

Chiselのutil以下に存在するモジュールに自分のモジュールのIOを接続しようとした時に遭遇したエラーとその解決法であるchiselTypeOfについて簡単にまとめておく。

Mux内でVecの要素を選択しようとして遭遇したエラーについて

今日はとあるモジュールの実装中にVecの取り扱いで遭遇したエラーとその解決方法について簡単にまとめておく。

chisel3.utilに入ってるアービターの再調査(Arbiter/RRArbiter/LockingArbiter/LockingRRArbiter)

今日はChiselのutilに入っているArbiterについてを再度調べてみたのでその内容をまとめようと思う。 ChiselのArbiter utilに入っているArbiterについて テスト対象のアービター・モジュール 動作を確認する Arbiterの波形 RRArbiterの波形 LockingArbiterの…

Chiselの便利なアノテーション@chiselNameを試してみた

今日はあるのは知ってたけど、まだ試せてなかったChiselの機能をやっと試せたのでその機能についてご紹介をば。 Chiselのアノテーション@chiselName 使い方 効果をRTLで確認

Chiselのutil.Queueの使い方の再確認

今日はChiselのutilに入っているQueueについてを再度調べてみたのでその内容をまとめようと思う。

IntelliJ IDEA上でRocket Chipのエミュレータをビルドする

前回に引き続きRocket Chipについて。 通常の手順だとソース追いづらいので、InteliJ IDAE上に環境を構築してデバッガ使ってトレースをするための環境を整えていきます。

Rocket Chipの環境構築

最近Chiselもそれなりに扱えるようになってきたので、もう少し深く突っ込むべくRocket Chipの解析を進めています。 なので、これからしばらくはRocket Chipのコード読み進めた際のメモを垂れ流しにしていくつもりです。 今回はその前段階の準備としてRocket …

Chiselの文法 - 入門編 〜その10:Chiselのテスト機構〜

Chiselの文法入門の続きで今回は第10回目&最後 前回の終わりに書いたとおり、Chiselのテストの仕組みについてを解説します。 Chisel入門編〜その10:Chiselのテスト機構〜 PeekPokeTesterを使ったテスト用クラスの作成 PeekPokeTesterのテスト用メソッド Dr…

Chiselの文法 - 入門編 〜その9:I/Oポートのパラメタライズ〜

Chiselの文法入門の続きで今回は第9回目 前回の終わりに書いたとおり、I/Oポートのパラメタライズについて とは言いながら、I/O以外の例も示そうと思います。 Chisel入門編〜その9:回路のI/Oポートのパラメタライズ〜 I/Oのパラメタライズ パラメタライズし…

Chiselの文法 - 入門編 〜その8:回路のビット幅のパラメタライズとrequire〜

Chiselの文法入門の続きで今回は第8回目 前回までの記事でChiselの基本的な要素についての解説を一通り終えました。 今回からはChiselを使って論理回路を設計する際のメリットである回路のパラメタライズについての基本的な部分を紹介していきます。 Chisel…

Chiselの文法 - 入門編 〜その7:ChiselのBundle〜

前回の続きでChiselの文法入門編その7 今回はChiselにおける拡張型の続きとしてBundleについてを見ていきます Chisel入門編〜その7:Bundle〜 Bundleの宣言 例で見るBundleの使い方 IOで使うBundle

Chiselの文法 - 入門編 〜その6:ChiselのVec〜

前回の続きでChiselの文法入門編その6 今回はChiselにおける拡張型である`Vec`と`Bundle`の2つについてまとめて書こうを思ったのですが、思いの外膨らんだので、`Vec`メインにしました

Chiselの文法 - 入門編 〜その5:Chiselの制御構文〜

前回の続きでChiselの文法入門編その5。 5回目はChiselの制御構文についてです。

Chiselの文法 - 入門編 〜その4:Chiselの演算子〜

前回の続きでChiselの文法入門編その4。4回目はChiselの各演算子について。

Chiselの文法 - 入門編〜その3:Chiselのハードウェアの要素〜

前回の続きでChiselの文法入門編その3。 前回の冒頭に書いたChiselにおける3つ目の要素であるChiselのハードウェアの要素について見ていきます。

Chiselの文法 - 入門編〜その2:Scala/Chiselの基本的なデータ型〜

前回の続きでChiselの文法入門編その2 自分の理解ではChiselでハードウェアを実装する場合に、以下の3つの要素についての区別を理解する必要があると思っています。 1. Scalaの型 1. Chiselの型 1. Ciiselのハードウェアの要素 これは言い換えると、以下の…

Chiselの文法 - 入門編〜その1:モジュールの定義とエラボレート〜

前回はGW中に作ったRISC-Vの紹介をしてみましたが、その記事ではそのRISC-Vプロセッサの概要と作った所感についてをまとめただけでした。 まず最初の目標としていたのがこの取り組みだったため、ひとまず最初の目標は達成したというところ言う感じです。 そ…

Chiselで簡単なRISC-Vを作った話

今年のGWの自分宿題としてものすごく簡単なRISC-Vを作っていました。 ツイッター見てる方はご覧になってたかもしれませんが、GW中に一応riscv-tests位ならPASSするものが出来ています。 今回はその後にVivadoで合成してみた結果も取ることが出来たのでそれも…

自分で作ったBundleでレジスタ作ったらハマった話

今回は最近進めていたRISC-Vの実装の際にBundleの使い方でハマったのでそれについての話を Bundleのおさらい 基本的な使い方 BundleのインスタンスでRegを作る 本題:自分で作ったBundleでRegを作ったらハマった テストコードを作って確認 RTLはどうなってる…

Chiselで3次元メモリっぽいのを作る

今回もChiselのMemについての話。 元ネタは自分の以下のツイート。 因みにこの先は全部一緒でVecを入れ子にすれば、、、後はわかるな??— diningyo (@diningyo) 2019年4月30日 おそらくお察し頂けたとは思うが、3次元のメモリを作る場合についてまとめてお…

Chiselで2次元メモリっぽいのを作る(2)

令和になって最初の投稿。ほんとは昨日上げたかったんだけど。。 いずれにしても読んでくれてる方は引き続きどうぞよろしくですm(_ _)m 前回の記事の終わりに以下のようなこと書いた。 MemBaseにマスク付きのライトタスクが用意されているので、ひょっとする…

Chiselで2次元メモリっぽいのを作る(1)

今回はふとChiselで2次元のメモリは作れるのか??と思ったので試してみたのでそれをまとめてみようと思う Chiselで2次元のメモリ 試してみたことその1~Mem in Mem~ 試してみたことその2~じゃあBundleでくるんでみよう~ 試してみたことその3~それな…

ChiselのBundleをRegInitに渡すときに各フィールドを任意の値で初期化する方法(2)

今日は昨日の続き。 昨日はBundleをRegInitに渡すときにBundle内の各フィールドを任意の値で初期化する方法について考えた。 目的の処理は出来ることは分かったのだが、記述がイマイチなので今日はそれを少し整えてみようと思う。

ChiselのBundleをRegInitに渡すときに各フィールドを任意の値で初期化する方法(1)

以前にBunldeで構造化したデータを使ってレジスタをインスタンスする方法を紹介したのだがその記事を書いたときにもう一つコレ出来たらいいなっと思いながら出来なかったことがあった。 それは”Bundleを使ってレジスタ郡を作る際に、各フィールド毎に任意の…

Chiselのメモリにファイルのデータをロードする方法

今回もChiselのTips的なやつでChiselのメモリにファイルのデータをロードする方法についてを紹介する。

ChiselFlatSpecを使ったテストを並列化して高速に実行する方法

今日はChiselのテストの時にTips的なやつを。 ChiselFlatSpecを使って作ったテストクラス内の各テストは通常、実装した順に逐次実行される。 この単一クラス内のテストを並列に実行する方法はないのかしら??と探してみたところ、めちゃくちゃお手軽にテス…

Chisel Bootcamp - Module3.6(5) - 型クラスと使うジェネリクス型

今日は久しぶりにChisel-Bootcamp。 前回のChisel-Bootcampの学習ではジェネリクス型について学んだ。 今回はModule3.6の残りの部分を見ていく。ただエラーが出たりするので、そのへんは追って調査する事にして飛ばしていく。