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

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

Chisel

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の残りの部分を見ていく。ただエラーが出たりするので、そのへんは追って調査する事にして飛ばしていく。

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

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

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

前回はChiselのBundleへのアクセスを簡単にする方法を紹介した。 www.tech-diningyo.info 今回はいま実装しているHWの処理の関係で算術右シフトが必要になった時に、どうすれば良いのか悩んだので、その話をまとめておく。 Chiselで算術右シフト Chiselでは…

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

前回のChiselのPeekPokeTesterにはIntをBigIntに変換するメソッドが合ったのでそrを紹介した。 www.tech-diningyo.info 今回も最近Chisel書いていて「あ、これ出来るんじゃん!」という気付きがあったので、それをまとめておこうと思う。ぶっちゃけScalaが…

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

前回のChiselのテスト実行時にプログラム引数を指定する方法についてを紹介した。 www.tech-diningyo.info 今日は以前に書いた”UIntの大きな定数を指定する方法”を書いた時には気づかなかったメソッドを見つけたのでそれを紹介しようと思う。 ChiselでUIntの…

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

前回の記事でChiselFlatSpecを使ったBDDスタイルの開発例、、、、みたいな記事を書いてみた。 www.tech-diningyo.info その際にデバッグの時に引数とか追加できんのかいねー??とか思って、方法を探してみたのでそれを書いてみようと思う。 Chiselのテスト…

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

前回の記事でChiselFlatSpecを使うための前段階として、ベースとなっているScalaのテストハーネスScalaTestについて気になっていた部分を調査していった。 www.tech-diningyo.info 前回の終わりに書いた通り、今日は簡単なChiselのモジュールを作成し、それ…

ChiselのBlackBoxの使い方のまとめ

前回のChiselの記事ではChisel-Bootcampを進めてModule3.6のジェネリクス型を学んでいった。 www.tech-diningyo.info 今回はChiselのTips的な話で、ネタになるのは自分がChiselを使って実装をしていた際に出くわしたVerilog HDLで実装されたモジュールをブラ…

Chisel Bootcamp - Module3.6(4) - Scalaの型パラメータ(ジェネリクス型)のChiselへの応用について

前回のChisel-Bootcampの学習ではChiselの異なる方同士の接続の法則についてを見ていった。 今回も引き続きModule3.6を見ていく。今日はジェネリクスとChiselの型の階層について。

Chisel Bootcamp - Module3.6(3) - Chiselの異なるデータ型の接続について

前回のChisel-Bootcampの学習ではScalaの`unapply`と部分関数についてを見ていった。 今回も引き続きModule3.6を見ていく。今日はChiselの型についてもう少し詳しく見ていく。

Chisel Bootcamp - Module3.6(1) - ScalaとChiselの型について

前回は久々のChisel-Bootcampの学習を勧めModule3.5の残りを見ていった。 www.tech-diningyo.info 今回はModule3.6に入りScalaとChiselの”型”についてを学習していく。 ジェネレータ:型について モチベーション 静的な"型" ScalaとChiselの型 IntとUInt Boo…

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

前回のChiselの記事ではFIRRTLを可視化するツールdiagrammerを試してみた内容をまとめた。 今回はしばらく進めていなかったChisel-Bootcampに戻り、Module3.5の残りを見ていく。 オブジェクト指向プログラミングをChiselに適用すると??という話だ。

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

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

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

前回のChiselの記事では今更ではあるがChiselでデザインしたハードウェアをVerilogのRTLに変換するためにやることについてをまとめた。 今日はついでなので、前回の続きというかその前の段階とかに位置しているはずのChiselで作っているハードウェアをそのま…

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

前回のChiselの記事では`Bundle`を使ってオプションのIOポートをまとめて制御する方法を紹介した。 最近Chisel周りの調査をいろいろやっているが、ChiselのコードをVerilogのRTLに変換する方法についてを簡単にまとめた日本語の記事が見当たらない気がしたの…