ハードウェアの気になるあれこれスマートフォン用の表示で見るハードウェアの気になるあれこれ技術的に興味のあることを調べて書いてくブログ。Scalaスポンサーリンク前回のChisel-Bootcampの学習ではChiselの異なる方同士の接続の法則についてを見ていった。www.tech-diningyo.info今回も引き続きModule3.6を見ていく。今日はジェネリクスとChiselの型の階層について。例題:ジェネリクスを使ったシフトレジスタジェネリクスジェネリクスについて、、、とか書いておいて何なんだけど、よく知らんのよね、この概念自体を。いうことで毎度お世話になります、Wikipediaさん。type)とは、型付けされたプログラミング言語においてデータ型の定義とそれを参照する式(型式)の一部にパラメタを許すことによって類似した構造を持つ複数のデータ型を一括して定義して、それらを選択利用する仕組みである。https://ja.wikipedia.org/wiki/%E7%B7%8F%E7%A7%B0%E5%9E%8Bなるほど、わからん。いうことで探した別の方の記事がこちらqiita.comあれだ、ScalaDocとか見てるとよく見るやつ。Bundlechisel.eecs.berkeley.eduあんまり深くは突っ込まないで、そこに指定してある型しか入らんのだろーな、位に考えてた。Bootcampのサンプルを見ていこう。サンプルコードその1これは紹介するのに丁度いいコード、、ということらしい。各々のコメント部分に書いてあるのが、Seqの中に含まれているデータの型を示している。Seq[Any]サンプルコードその2上記は生成時にデータを入れており、それを元にコンパイラが型推論出来るが、そうは行かないケースもあるというのが次の例。defaultの型が定まらずに以降の処理が出来ない、ということらしい。List("2")サンプルコードその3次がジェネリクスを使った例。ebeef動きを見てると、Tを返す匿名関数をもらって、Tを結果として返す、、ということになる、、はず。ここはもう少しきちんと見なきゃだなぁ。Chiselの型の階層このジェネリクスの考えをChiselでどのように使うのか、というのがここからの話。うまく使っていくためには、Chiselの基本的な型がどのような構造をしているのかを知っておく必要があるとのこと。文字で書くと、直感的でないので図にしたものをペタっと。見てもらうとわかる通りChiselの設計で使用されるUIntやBool、Bundleなどなどは全てDataから派生したものになっている。このDataにChiselでハードウェアを記述する際に使用する:=のようなメソッドが定義されている。connectionCompileOptions)このようなDataから派生したデータをRegやWireなのでChiselのハードウェアを構成する要素に入れることで、そのDataの情報に基づいて、レジスタを実体化することが出来るようになっている。chisel3.core.Reg(t)ぶっちゃけ、このことだけ知ってればそれなりにChiselのライブラリをどう使うかは結構わかるような気もする。UInt(8.W)))になるというのは頷ける話。例題:ジェネリクスを使ったシフトレジスタ最後にここまでの話をまとめた例題がBootcampに載っているので、それを見て今日はお終いにしよう。}これまでBootcampを通して作ってきたモジュールと大きく異なるのはクラスの宣言時にジェネリクスを使っており、使う際にChiselのどの型で生成するかを決定できるようになっていること。この例ではUIntとSIntの切り替えのみの例になっているが、BundleもChiselのDataから派生しているため、これをうまく使うことでいろいろパラメタライズの幅が広がりそう。そのへんをうまく使ってるのがChiselの各種ライブラリということだな。PASSED概念はこれまでのChisel-Bootcampの学習やChiselのソースコードを見ていてわかってきているが、使いこなしてパラメタライズの幅を広げるにはもう少し自分で書いてみるしか無いぁ、、、というのが正直なところ。いう機能があって、いろいろ出来そうということを踏まえて自分で実装する際の選択肢の一つとして試していかねば。技書博2にChisel本を出してきました月別アーカイブはてなブログをはじめよう!diningyo-kpuku-jougekiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。