FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Chisel

FIRRTLに入門する (4. FIRRTLの.firファイルの読み取り方法)

FIRRTLは入力ファイルとして.firファイルを指定することができる。ということは、FIRファイルのファイルを読み込んで、Parseして、構文解析木を生成する場所があるはずである。それを調査した。 どうやらFIRRTLのコマンドラインを立ち上げたときは、FirrtlCl…

FIRRTLに入門する (3. FIRRTLのざっくりとしたフローを追いかける)

まずはfirrtlに取り込まれる引数を確認した。以下のようにprintlnを挿入した。 firrtl/options/Stage.scala final def execute(args: Array[String], annotations: AnnotationSeq): AnnotationSeq = { println("execute : args") for (i <- 0 until args.siz…

FIRRTLに入門する (2. FIRRTL解析のためのIntelliJ IDEAの立ち上げと最初の解析)

FIRRTLの動作を解析するためには、Scalaの総合開発環境としてIntelliJ IDEAをインストールしておくのが良い。 これまでインストールしていなかったので、これを機にインストールしておこう。 www.jetbrains.com 無料版のCommunity EditionのLinux版をダウン…

FIRRTLに入門する (1. ビルドとVerilog生成テスト実行)

FIRRTLというのはハードウェア記述言語Chiselのバックエンドに相当する部分で、Chisel→FIRRTL→Verilogという段階を取り、FIRRTL→VerilogというのはLLVMで言うバックエンドに相当する部分であると説明にも書いてある。 FIRRTL自体はScalaで記述されており、動…

Chisel-3.2 RC2でAsynchronous Resetを生成してみる

Chisel-3.2 RC2がリリースされている。いくつかの新機能が加わっているが、気になるのはAsynchronous Resetのサポートだ。 www.chisel-lang.org これだけ見ても良く分からないので、ChiselリポジトリのPull Requestを見て何となく使い方を調べてみた。 githu…

ハードウェア記述言語Chiselコンパイラの内部解析(6. もう少し真面目にChiselの型を追加するコードを書く)

前回は少し手を抜いたような形で新しいデータ型を追加してみたが、少し真面目にデータ型の追加方法について検討してみる。 前回も書いたが、UInt, SInt, Boolが定義されており、さらに良く調べてリムとexperimentalでFixedPointが定義されている。 これはBit…

ハードウェア記述言語Chiselコンパイラの内部解析(3. Chiselコンパイルのフローを追いかける)

Chiselのコンパイルフローの解析の続き。前の記事は以下。 どこでChiselからFIRへの変換が行われているのかというと、それはChiselStageのEmitterが変換処理を行っているらしい。 chisel3/src/main/scala/chisel3/internal/firrtl/Emitter.scala private def…

Chisel3で外部モジュールをロードする場合に必要なbuild.sbtの変更点

Chisel3を使っていて、どうもメインディレクトリの外部にあるソースコードを参照したい、Mavenに登録してあるわけではないのだけれども、ローカルに作ってあるクラスを参照して作りたいなと思ったとき。 例えば、以下のようなモジュールを開発しており、これ…

ハードウェア記述言語Chiselコンパイラの内部解析(2. Chiselコンパイルのフローを追いかける)

ハードウェア記述言語ChiselはScalaのプラットフォームの上に構築されている。大きく分けて2つのリポジトリから構成されている。 chisel3 : https://github.com/freechipsproject/chisel3 firrtl : https://github.com/freechipsproject/firrtl chisel3のリ…

ハードウェア記述言語Chiselコンパイラの内部解析(1. カスタマイズ用のローカル環境を作る)

ハードウェア記述言語ChiselはScalaのプラットフォームの上に構築されている。大きく分けて2つのリポジトリから構成されている。 chisel3 : https://github.com/freechipsproject/chisel3 firrtl : https://github.com/freechipsproject/firrtl chisel3のリ…

ChiselのパラメタライズによりGenericなモジュールを作成する手法

Chiselによりインタフェースのパラメタライズの検討を行う。例えば、汎用インタフェースを使用してバスのマルチプレクサを構成することを考える。 インタフェースとしては以下のものを使う。以下のGenBundleはTで汎用化されている。valid, sideband, dataの…

AWS F1インスタンス上のFireSimでBOOMコアをシミュレーションする試行(8. カスタマイズしたアクセラレータをFireSimのプラットフォーム上に構築する)

FireSimの環境で、どうにかRocketシングルコアを動かすことができた。ここまでできれば、今度は様々なハードウェアをf1インスタンスで動かしてみたい。RocketはChiselというハードウェア記述言語で設計されているが、ChiselでオリジナルのモジュールをRocket…

Chiselでモジュールを再帰インスタンスする方法

Chiselでモジュールを書く場合の、いくつか便利な書き方をまとめておく。 Chiselで再帰を書く この程度だったらVerilogでも可能。 class recurse_module (w: Int = 5) extends Module { val io = IO(new Bundle { val inst = Input(UInt(2.W)) val dec = Out…

BOOM(Berkeley Out-Of Order) コアがfpga-zynqに対応したのでFPGAで動かしてみる(1. プロジェクトのビルド)

BOOMメーリングリストで正式リリースのあった、BOOMコアのfpga-zynqリポジトリ対応、面白そうだ。 BOOMというのはRISC-Vのオープンソースアウトオブオーダプロセッサで、GitHubから入手でき、だれでも手を加えることができるプロセッサだ(ただしChiselで記述…

VerilogからChiselへ移行するためのTips(文法編)

趣味でVerilogで書いたデザインをChiselに移植していたのだが、VerilogとChiselの文法的な違い、移植するにあたり注意すべき点が少しずつ分かってきた。 まだ文法的な部分しか見ていないが、Verilogで書いたデザインをChiselに移植するために気を付けなけれ…

Chisel2とChisel3でのVerilog/C++コード生成フローの違い

Chiselにはバージョンがあり、Chisel2とChisel3が公開されている。 微妙に文法が異なっているので要注意だ。 Chisel2ではVerilogとC++を生成する方法が公開されているが、Chisel3ではどうだろう。 Chisel2でのVerilogとC++の生成方法については、以下のサイ…

Chisel-Bootcampを試してみる(2. FIRRTLについて)

Chisel-Bootcampの続き。第4章はFIRRTLについて学習した。 Chiselで記述したハードウェアデザインは、FIRRTLのモジュールを組み込むことでVerilogに変換できる。 また、ASTの情報を作り上げて出力することができる。 Chiselを使ったこれらの処理の利点として…

Ubuntu 18.04でsbtが動かない問題(というか結果的にRocket-Chipが動かない問題)を何とかする

Ubuntuが18.04 LTSになって、さっそくバージョンアップしてRISC-Vの環境を構築しようとしたのだけれども問題にぶち当たった。 RISCV-Toolsは以下のエントリでインストールの試行はしていたし、うまく行くことは確認していたのだけれども、Rocket-Chipの試行…

Chiselを使ったビルド環境を作ってTileLinkの検証環境を作ってみる

Chisel で記述された TileLink は環境を構築するのが大変だ。 そこで、ChiselのTileLinkの実装を最大限活用しつつ、TileLinkのバスを使ったSoCモデルを作成して、モデルを作ってみよう。 github.com Chisel → FIRRTL → Verilog で必要なこと とりあえず試行…

SiFiveのFreedom E300 Platformを単体でカスタマイズできるようにする (3. SRAMモジュールを作成して接続、テストパタンで動作を確認する)

RISC-Vの実装であるRocket-Chipは、RISC-Vの最新使用に追従しているため最初に見るべきデザインとしてはよくできているが、 Chiselで記述されており(初心者には)可読性が低い。 外部のSoCプラットフォームについて情報がない ことから、なかなかオリジナルの…

Chiselでオリジナルデザインを開発し、Verilogを生成する(1. Chisel-template を生成する)

Chiselを使ってオリジナルデザインを作成してみたい。とりあえず、ディープラーニングをターゲットとして、行列計算のためのモジュールをいろいろ作ってみたい。 まずは、Chisel単体で開発環境とテスト環境を構築するためにはどうしたらよいのだろうか。 い…

Rocket-Chipにおけるコンフィグレーション別の面積比較 (BlockRAMを推論させる方法調査)

前回のRocket Chipの標準論理合成では、FPGA向けにVivadoで合成してもBlockRAMが正常に推論されず、Dcacheが面積のほとんどを消費してしまう構成になってしまっていた。 msyksphinz.hatenablog.com どうにかしてBlockRAMを使うように変更することはできない…

UCBのRISC-V FPGAシミュレーション加速環境 "MIDAS"を試行する(1)

CARRVで発表された、UCBのRISC-V FPGAシミュレーション環境 MIDASのリポジトリがあったので、実験してみた。 試してみたのは以下のディレクトリ。 github.com まずは一応全部ダウンロードした。riscv-fesvrを最新に更新しないと動作しないようなので、riscv-…

RISC-V実装 BOOM v2をコンパイルしてRTLシミュレーションを実行する

RISC-Vのアウトオブオーダ実装であるBOOMv2は、githubで既に公開されている。 github.com BOOMv2の実装とRocket Chipの実装は分離されており、内部コアをBOOMv2、外部のインタフェース部分をRocket Chipで実装する。 上記のBOOM v2.0.1は riscv-boom リポジ…

Chiselを記述して回路を作成しテストする(2)

Chiselを使って、独自の回路を作成しテストしてみよう。前回はチュートリアルを実行してみただけだったが、次は独自の回路を作成してみる。 作ってみるのは、16個の32ビット整数を受け取り、その16要素をすべて加算し総和を求めるプログラムだ。 ツリー上に…

Chiselを記述して回路を作成しテストする(1)

前回までで、Chiselのイントロダクションを完了した。 しかし実際に使ってみなければどのように使えばよいのかは分からない。 いろいろ作って試してみよう。 Chiselを簡単に試すことのできるプロジェクトテンプレート github.com 上記のプロジェクトを使えば…

A short User Guide to Chisel勉強中(2)

関数の定義 デザインの再利用のために関数を定義することができる。 def clb(a: UInt, b: UInt, c: UInt, d: UInt): UInt = (a & b) | (~c & d) a, b, c, dの引数を取って、論理演算を実行した結果を返す。 BundleとVec BundleとVecによって、Chiselのデータ…

ハードウェア記述言語Chiselイントロダクション

この記事は ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016 - Qiita の20日目の記事です。 ハードウェア開発、CPUアーキテクチャ Advent Calendarも、25日分ほぼ埋まってきました。あともう少し、各担当者の皆様、頑張りましょう! Chiselをどの…