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

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

GitLab Runnerを使ったChiselの自動テスト環境の構築

技書博向けの作業において、サンプルコードの自動テスト環境を作りたいなーと考えていて、それを構築するにはGitLabとGitLab Runnerを使用するのが良さそうに見えたので試してみた。

ChiselのBlackboxで複数のファイルから構成されるVerilog-HDLのモジュールを読み込む

ふと気になったのでChiselのBlackboxで複数のファイルから構成されたVerilogのRTLを指定できるのかを試してみた。 Blackboxのおさらい Blackboxで指定するモジュールが複数のファイルで構成される場合

Github Actionsを使ってChiselの自動テスト環境を構築

Github Actionsが使えるようになったので、ChiselのCI環境を構築できないかを試してみる。

Chiselで作ったRISC-VとUARTをArty 35Tで動かしてみた

今回は作ってたRISC-V(dirv)とUARTを接続した簡単なシステムがFPGAで動いたので、その結果について簡単にまとめておきたいと思う。

desiredNameを使ったChiselのモジュール名の変更

Chiselのモジュール名は通常宣言したクラス名がそのまま使用されるのだが、これだと問題起こりそうなケースってあるよな、、、って思っていた。 そこで今回はこれに関する解決方法が無いかを調査したので紹介したい。

GithubのGPG keysの設定を試した話

唐突にgithubのGPG keysの設定を行ってみたのでそれの手順をメモ。

MultiIOModuleを使ったデバッグ用ポートについての作成

今回はデバッグ用にポートを作る場合の方法について、今の時点の知識で考えなおしてみた。

Chiselのモジュールのテスト時に出くわした分かりにくかったエラー

今日はChiselで実装したモジュールをテストしていて出くわした、わかりにくかったエラーについて解析した際のメモを。

Rocket ChipのGeneratorのソースの解析メモ(7) - サンプルに沿ってPWMモジュールをTileLinkバスに追加してみる(1)

なんとなく内部構造も見えてきたので、ここらでRocket Chipにモジュールを追加する例題を追っていった際のメモ書き。 長くなりそうなので、適宜分割予定(Maxで5回、、かな)。最初にお断りしておきますが、まだ理解があやふやなのです。 ご承知おきください…

ChiselのMultiIOModuleを使ったポートのカスタマイズ

Rocket Chipの記事で以下のように書いたのを試してみたという記事。 あとRocketChipで使われているMultiIOModuleについても少し気になることがあるので、それは別途紹介する予定。 LazyModuleImp MultiIOModule 簡単な例 Rocket Chipの実装から出来そうなこ…

ChiselのDecoupledIOの使い方を考えなおした話

ChiselのQueueを使って設計をしていて、少し考えたことがあったので今日はそれについて。 ただ単にDecoupledIOをどう使うか、、、という話。 Queueの実装例 IOの形を書き換えてみる 継承してスッキリ コンパニオンオブジェクト版

Rocket ChipのGeneratorのソースの解析メモ(6) - ExampleRocketSystemのIOポート

前回はとりあえずLazyModuleを使った最小のモジュールを作ってみる、という話をまとめた。 その際に以下の要素があればLazyModuleを使ったモジュールを作れるということがわかった。 Parametersから派生したモジュールのパラメータクラス LazyModuleから派生…

riscv-toolsリポジトリのデータでRV32Iのビルド環境を作りなおした話

RISC-Vのビルド環境を作りなおす必要が出てきたので、せっかくだから最新のriscv-toolsのリポジトリの環境を使って作りなおすことにした。 今回はその際に幾つか躓いた部分があったのでそれについてまとめておく。 crosstool-ngを使ったRISC-Vのコンパイラの…

Chiselのユーティリティ - log2Up / log2Down / log2Ceil / log2Floorについて

Twitterでつぶやいてた以下のスレッドに書いてたやつをまとめてみた話。 ある数字Nが表せる状態数のビット幅を取得するとき→log2Ceil(N)その数字Nを表現するために必要なビット数を取得するとき→log2Ceil(N+1)を使えってソースに書いてあった!(ランダム試…

Rocket ChipのGeneratorのソースの解析メモ(5) - LazyModuleを使った最小??のモジュールを作る

Rocket Chipの解析の話の5回目。 今日はソースコードの解析の傍らで行っていたLazyModuleの使い方を探っていた結果についてを少し。 LazyModule LazyModuleを使った最小??のモジュール

Rocket ChipのGeneratorのソースの解析メモ(4) - Config、Parameters、Field

Rocket Chipの解析の話の4回目。 今回は"make"に渡す引数の一つDefaultConfigの中身でああるConfigやParametersについて。 この辺の話はすでにmsyksphinzさんのFPGA開発日記で解説してくれているけど、解析の関係上で扱っておくべきだと思うのでざっと見てい…

Chiselのテストでshould be (true)付けてなくてプチハマりした

今作り直してるオレオレRISC-V(dirv)の対向に接続するメモリモデルがバグってるので、バグ再現パターンを起こしてシミュレーションを行っていた。その際に出くわした「いや、当たり前でしょ」な話をメモ書き程度に残しておく。ScalaTest使ってる人は多分タイ…

Chisel3.2-SNAPSHOTを試した時に遭遇したエラー

もうそこそこ経ってはいるがChiselの3.2-SNAPSHOTがgithubのリリースに上がっている。今回はそれを使うにあたって遭遇したエラーについて。 Chsiel-3.2のSNAPSHOTが公開された ImplicitModuleが、、、消えた?? おまけ ~ 他のプロジェクトでもアップデート…

Chiselのシミュレーションを所定のサイクルで終了する方法

ある意味前々回の続きのネタ。前々回の記事ではシミュレーション実行時にログにサイクル数を出す方法を探したが、今回は波形上で確認するための細工を行ってみる。 ”前々回の記事”は以下。 Chiselの波形上に経過サイクルを表示 WDT(Watchdog Timer) WDTが勝…

Chiselのシミュレーション時のexpectメソッドの細かい話

今日はChiselで書いたモジュールをテストする際に使用する期待値比較メソッドexpectについての細かい仕様の話。 expectで期待値比較 気づいてなかった細かい仕様 再現コードと動作ログ expectの実装を確認してみる

Chiselのシミュレーション実行時にサイクル数を表示する方法

Chiselで書いたモジュールを`iotesters.Driver`でテストする際に地味ーーに便利(だと思う)なシミュレーションのサイクル数を表示する方法についてまとめる。

ChiselのArbiterのvalid/readyの調停テストコードが上手く作れなかった話

今日の記事はChiselでテストを書いていた時に出くわしたトラブルとそれに対する修正について。回路自体は前回まで記事にしていたNICのArbiter部分のような調停回路。 トラブルと言ってもChiselのバグとかそういう話ではなく、自分の理解不足からくるもので、…

Chiselで作るNIC - (4)- トップモジュール

前回に引き続きChiselで作るお試しNICの話。 最後はDecoder/ArbiterをインスタンスするTopブロックについて。 NICTop ソースコード パラメタライズ用のパラメータ IOポート Decoder/Arbiterのインスタンス 各モジュールの接続 テスト 動作波形

Chiselで作るNIC - (3)- Arbiter

前回に引き続きChiselで作るお試しNICの話。 3回目はArbiter部分について。 NICDecoder ソースコード IO部分 Arbiter 入力とArbiterの接続 テスト NICDecoderの動作時の波形 レジスタスライスなしの場合 レジスタスライスありの場合

Chiselで作るNIC - (2)- Decoder

前回に引き続きChiselで作るお試しNICの話。 2回目はDecoder部分について。 NICDecoder ソースコード IO部分 入力用のレジスタスライス 出力のvalidの選択 Queueのdeq.readyの制御 NICDecoderの動作時の波形

Chiselで作るNIC - (1)- 仕様について

ちょっとパラメタライズのやり方を検討したかったので、ものすごく簡単なデータ用のインターコネクト的なやつをChiselで書いてみたのでそれについてをまとめておく。 今回の記事は全体の仕様について。 NICの仕様 バスの仕様 パラメタライズについて ブロッ…

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について簡単にまとめておく。