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

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

Scala

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の文法 - 入門編〜その2:Scala/Chiselの基本的なデータ型〜

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

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

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

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

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

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

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

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

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

ChiselFlatSpec使うためにScalaTestのFlatSpecを調査した話

今日はChiselのためのScalaのお勉強ネタを。調べるのはScalaのテストハーネスの一種であるScalaTestについて。 事の発端はSCR1というRISC-Vの実装をChiselで書いてみようとしていて、その際にriscv- testsの各試験をChiselのテストハーネスであるChiselFlatS…

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(2) - SaclaのunapplyとPartial Function

前回はChisel-Bootcampの学習に戻りModule3.6を見ていった。 www.tech-diningyo.info 今回も引き続きModule3.6を進めていく。今日はScalaのunapplyだ。 ジェネレータ:型について unapply 部分関数

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

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

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

前回のChiselの記事ではBundleの基本的な使い方についてをまとめたみた。 www.tech-diningyo.info 今回は前回まとめたBundleを使ってモジュールのIOポートをオプション化する方法についてをまとめておく。 ChiselでIOポートのオプション化するには? モジュ…

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

前回のChiselの記事では出力ポートに`0xdeadbeaf`を定数で入れたらエラーが出てハマったので解決方法について調べた。 今回はChisel-Bootcampではサラッと流されているChiselの`Bundle`を使ったデータの構造化についてをまとめてみる。

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

前回のChiselの記事ではChisel-bootcampのModule3.5のコンパニオン・オブジェクトとケース・クラスについてを勉強した。 今回はちょっとChisel-Bootcampから離れてChiselを試していたハマったUIntの大きい定数値の扱いについてを紹介していく。

Chisel Bootcamp - Module3.5(2) - Scalaのコンパニオン・オブジェクトとケース・クラス

前回のChiselの記事ではChisel-bootcampのModule3.5に入りScalaのオブジェクト指向言語としての特徴からクラスとトレイトについてを見ていった。・ 今回も引き続きModule3.5に取り組んでいく。前回の最後に記載したとおり今日はScalaのオブジェクト。

Chisel Bootcamp - Module3.5(1) - Scalaの抽象クラスとトレイト

前回のChiselの記事ではChisel-bootcampのModule3.4の練習問題でニューラルネットワークのニューロン回路を実装するという問題に取り組んだ。 www.tech-diningyo.info 今回はModule3.5に入っていく。ここで扱うトピックはScalaの関数型言語とは別に存在する…

Chisel Bootcamp - Module3.4(3) - Chiselで作るニューロン回路とChiselのFixedPoint

前回のChiselの記事ではChisel-bootcampのModule3.4でScalaの持つ関数型言語としての特徴をChiselにどう活かすかについてを勉強した。 www.tech-diningyo.info 前回の終わりにも書いたとおり、今日はModule3.4の残している練習問題に取り組んでいく。 Chisel…

Chisel Bootcamp - Module3.4(2) - 関数型言語の特徴を活かしたChiselのHW設計

前回のChiselの記事ではChisel-bootcampのModule3.4に入りChiselのベースになっているScalaの関数型言語としての特徴についてを確認した。 今日も引き続きModule3.4を勉強するが、今日はいよいよ関数型言語の特徴をどうChiselに活かすかという部分についてを…

Chisel Bootcamp - Module3.4(1) - 関数型言語

前回のChiselの記事ではChisel-bootcampのModule3.3の高階関数を使った設計の仕上げとして練習問題に取り組んだ。 今日からModule3.4に入る。Module3.4は関数型言語についてだ。

Chisel Bootcamp - Module3.3(2) - 高階関数 - map等を使ったアービターの設計

前回のChiselの記事では久しぶりにChisel-bootcampの学習に戻りScalaの高階関数についてを学習した。 www.tech-diningyo.info 今日も引き続き高階関数の章でもう少し例題の確認と練習問題に取り組んでいく。 高階関数 練習問題:map 例題:zipWithIndex 例題:r…

Chisel Bootcamp - Module3.3 (1) - 高階関数

前回のChisel-Bootcampの記事ではやっと標準ライブラリの紹介を終えたところだった。 www.tech-diningyo.info ちょっと間が空いたがChisel-Bootcampを進めていこうと思う。今日は高階関数だ。 Module 3.3: 高階関数 モチベーション 2つのFIRフィルタの物語 …

riscv-sodorをintelliJ IDEAで解析する環境を整えた話

前回のChiselネタではVCD波形の確認に使うGTKWaveのビルドについてをまとめた。 www.tech-diningyo.info 今回はChisel-bootcampの傍らで確認を始めているRISC-Vの実装の一つsodorの実行&解析環境を作る際にIntelliJ IDEAとsbtの扱いでハマった話を備忘のた…

Chisel Bootcamp - 幕間(6) - マルチプレクサ(PriorityMuxとMux1H)

前回の記事ではChiselの標準ライブラリに含まれているOneHotエンコードに関するブロックを紹介した。 今日はChiselのライブラリに用意されている2つのマルチプレクサについて見ていく。

Chisel Bootcamp - 幕間(5) - OneHotなデータを扱うライブラリ(UIntToOHとOHToUInt)

前回の記事ではChiselの標準ライブラリに含まれているビット単位の操作を行うブロックをを紹介した。 今日はChiselからOneHotエンコードのユーティリティを勉強していく。

Chisel Bootcamp - 幕間(4) - PopCountとReverse

前回の記事ではChiselの標準ライブラリから`Arbiter`を紹介した。 今日も引き続きChiselの標準ライブラリを紹介していく。今日はChiselのユーティリティブロックからいくつかのモジュールを勉強する。

Chisel Bootcamp - 幕間(3) - ChiselのArbiter

前回の記事ではChiselの標準ライブラリからQueueを紹介した。 今日も引き続きChiselの標準ライブラリを紹介していく。今日はChiselのアービターだ。