趣味でVerilogで書いたデザインをChiselに移植していたのだが、VerilogとChiselの文法的な違い、移植するにあたり注意すべき点が少しずつ分かってきた。 まだ文法的な部分しか見ていないが、Verilogで書いたデザインをChiselに移植するために気を付けなけれ…
LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 簡単なReturn IRが変換できるように実装を進めていこう。 実装するのに見ている関数群は以下のようなものだが、まず関数の意味が…
Chiselでのトレイトの活用 Chiselでトレイトを使って機能を拡張する話、関数の追加やポート幅の拡張などの方法は分かったが、ポートを増やすためにはどのようにすれば良いのだろうか。 いろいろ調べていると、MultiIOModuleという機能が使えそうであった。 g…
LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 少しずつ進んでいるが、まだターゲットのプログラムを正しくバイナリに変換することができない。 SubtargetFeature.cppを確認し…
Chiselでのトレイトの活用 Chiselはハードウェア記述言語だが、ベースの言語はScalaなので様々な高級言語の機能を活用することができる。 ScalaやRustではトレイトという機能を使うことができる。 トレイトというのはあまり私も詳しくないのだが、 ja.wikipe…
ChiselでRISC-Vプロセッサを設計するプロジェクト、しばらく手を付けていなかったのだが、実際にFPGAで動かすことを想定してVivadoで論理合成を実施した。 github.com Vivadoの論理合成スクリプトは、まだCPUのIP単体だけなので単純に合成をするだけで配置配…
LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 前回までで独自アーキテクチャのオプション(MYRISCVX)をllcに表示できるようになった。 実行してみると、アサーションで落ちる問…
LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 前回までで独自アーキテクチャのオプション(MYRISCVX)をllcに表示できるようになった。 しかしまだいろいろ追加していないので、…
LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 まだ現時点ではビルドにすら成功していないが、徐々に修正しながら必要なものを追加してビルドしている。 前回までのビルドした…
Chiselという言語はVerilogとは似て非なる。 ハードウェアを記述する言語ではあるが、Verilogと同じように考えているとどのようにハードウェアを作ればよいのかわからなくなったり、Chiselの本来のうま味を引き出せなくなる。 前回は、Chiselの記述中にVeril…
LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 まだ現時点ではビルドにすら成功していないが、徐々に修正しながら必要なものを追加してビルドしている。 ビルドを通すためには…
LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 まだ現時点ではビルドにすら成功していないが、徐々に修正しながら必要なものを追加してビルドしている。 まず、ターゲットアー…
ChiselはScalaをベースにしたハードウェア記述言語で、より高位な記法を使ってハードウェアを設計しようという考え方を持っている。 しかし、どうしてもVerilogを使いたい場合、あるいはある部品は既存のVerilogで記述されたものを使いたいと思うときがある…
LLVMについて理解するために、RISC-Vをネタにしていろいろ勉強してみたい。 Release 7.0では一応RISC-Vの32-bitと64-bit版がサポートされているようなので、ビルドに追加して様子を見てみる。 次はRISCV_msyksphinzのターゲットアーキテクチャについて定義し…
LLVMについて理解するために、RISC-Vをネタにしていろいろ勉強してみたい。 Release 7.0では一応RISC-Vの32-bitと64-bit版がサポートされているようなので、ビルドに追加して様子を見てみる。 ここで追加するのは、新しい"RISCV_msyksphinz"というアーキテク…
LLVMについて理解するために、RISC-Vをネタにしていろいろ勉強してみたい。 Release 7.0では一応RISC-Vの32-bitと64-bit版がサポートされているようなので、ビルドに追加して様子を見てみる。 $ cmake -G Ninja -DCMAKE_BUILD_TYPE="Debug" -DLLVM_TARGETS_T…
Cpu0のバックエンドをLLVMに追加するプロジェクト、9章の後半では、関数コールの様々な方法についてみてみる。 今回も非常にファイル量が多くて、とりあえずLLVMをビルドするためだけにパッチを作って当てているが、LLVM 7.0は未サポートになっている部分が…
あけましておめでとうございます。本年も、「FPGA開発日記」をよろしくおねがい致します。 昨年は、 RISC-Vに関連して4件の発表を行った。特に福岡のMICRO51で発表できたのは貴重な機会だった。 ディープラーニングについて理解を深めた。keras2cppを通じて…
このブログも始めてから4年が経った。 年末年始なので、今年一年はどうだったかな、ということでまとめてみよう。 今年の元旦には、こんな目標を立てていたのだった。 msyksphinz.hatenablog.com 引き続きRISC-Vをベースとしたエコシステムの勉強。自分でOSS…
Cpu0のバックエンドをLLVMに追加するプロジェクト、9章では、さまざまな形の関数コールをサポートする。 今回も非常にファイル量が多くて、とりあえずLLVMをビルドするためだけにパッチを作って当てているが、LLVM 7.0は未サポートになっている部分が多く、…
Cpu0のバックエンドをLLVMに追加するプロジェクト、8章では、if文などの制御文をサポートする。 今回も非常にファイル量が多くて、とりあえずLLVMをビルドするためだけにパッチを作って当てているが、LLVM 7.0は未サポートになっている部分が多く、ソースコ…
Cpu0のバックエンドをLLVMに追加するプロジェクト、7章では、これまでint型だけであった型のサポートを拡張する。 今回も非常にファイル量が多くて、とりあえずLLVMをビルドするためだけにパッチを作って当てているが、LLVM 7.0は未サポートになっている部分…
タイトルの通りなのだが、Chiselというハードウェア記述言語を用いて、5ステージのRISC-Vパイプラインプロセッサの設計に挑戦していた。 プロセッサをはじめとするハードウェア設計は、大体の場合はVerilog-HDLやVHDLなどのハードウェア記述言語を使用するか…
Cpu0のバックエンドをLLVMに追加するプロジェクト、6章では、グローバル変数のアクセスをサポートする。 今回も非常にファイル量が多くて、とりあえずLLVMをビルドするためだけにパッチを作って当てているが、LLVM 7.0は未サポートになっている部分が多く、…
Cpu0のバックエンドをLLVMに追加するプロジェクト、第5章に入った。オブジェクトファイルのサポートを行う。 今回も非常にファイル量が多くて、とりあえずLLVMをビルドするためだけにパッチを作って当てているが、LLVM 7.0は未サポートになっている部分が多…
Cpu0のバックエンドをLLVMに追加するプロジェクト、今回からは4章に入って、算術論理演算命令を追加する。まずは算術演算から。 算術演算において、特殊な演算ケースの場合は演算を最適化できる場合がある。この方式についても見ていく。 実装は以下。cpu0_c…
Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト。5ステージまで拡張したので、次はフォワーディングパスを追加して正常に演算を実行できるようにする。 github.com ALUのフォワーディングパスは、 WBステージ → EXステージ MEMステージ → EX…
年末なので技術以外のことも日記に書きたいと思います。1年に1回くらいは、エモい記事を書いてもいいでしょう。 まあ今年のまとめみたいな記事です。 今年も飽きもせずほぼ毎日技術ブログを書いていました。今見たら今年の投稿数は340件に近いので、まあほと…
Cpu0のバックエンドをLLVMに追加するチュートリアル、第3章(?)のBackendの追加の章をやり終えた。 やり終えたといっても、ひたすら写経して、ビルドして、テストパタンを動かして終わりである。 これではさすがにもったいないので、もう少しまとめておきた…
Cpu0のバックエンドをLLVMに追加するチュートリアル、第3章(?)のBackendの追加の章をやり終えた。 やり終えたといっても、ひたすら写経して、ビルドして、テストパタンを動かして終わりである。 これではさすがにもったいないので、もう少しまとめておきた…