FPGA開発日記

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

2018-01-01から1年間の記事一覧

年末年始なので今年のまとめをしよう2018

このブログも始めてから4年が経った。 年末年始なので、今年一年はどうだったかな、ということでまとめてみよう。 今年の元旦には、こんな目標を立てていたのだった。 msyksphinz.hatenablog.com 引き続きRISC-Vをベースとしたエコシステムの勉強。自分でOSS…

"Creating an LLVM Backend for the Cpu0 Architecture"をやってみる(14. 関数コール)

Cpu0のバックエンドをLLVMに追加するプロジェクト、9章では、さまざまな形の関数コールをサポートする。 今回も非常にファイル量が多くて、とりあえずLLVMをビルドするためだけにパッチを作って当てているが、LLVM 7.0は未サポートになっている部分が多く、…

"Creating an LLVM Backend for the Cpu0 Architecture"をやってみる(13. 制御文のサポート)

Cpu0のバックエンドをLLVMに追加するプロジェクト、8章では、if文などの制御文をサポートする。 今回も非常にファイル量が多くて、とりあえずLLVMをビルドするためだけにパッチを作って当てているが、LLVM 7.0は未サポートになっている部分が多く、ソースコ…

"Creating an LLVM Backend for the Cpu0 Architecture"をやってみる(12. Int型以外のサポート)

Cpu0のバックエンドをLLVMに追加するプロジェクト、7章では、これまでint型だけであった型のサポートを拡張する。 今回も非常にファイル量が多くて、とりあえずLLVMをビルドするためだけにパッチを作って当てているが、LLVM 7.0は未サポートになっている部分…

Chiselを使って波形を全く使わずにRISC-Vパイプラインプロセッサを設計した

タイトルの通りなのだが、Chiselというハードウェア記述言語を用いて、5ステージのRISC-Vパイプラインプロセッサの設計に挑戦していた。 プロセッサをはじめとするハードウェア設計は、大体の場合はVerilog-HDLやVHDLなどのハードウェア記述言語を使用するか…

"Creating an LLVM Backend for the Cpu0 Architecture"をやってみる(11. グローバル変数のサポート)

Cpu0のバックエンドをLLVMに追加するプロジェクト、6章では、グローバル変数のアクセスをサポートする。 今回も非常にファイル量が多くて、とりあえずLLVMをビルドするためだけにパッチを作って当てているが、LLVM 7.0は未サポートになっている部分が多く、…

"Creating an LLVM Backend for the Cpu0 Architecture"をやってみる(10. Objectファイルのサポート)

Cpu0のバックエンドをLLVMに追加するプロジェクト、第5章に入った。オブジェクトファイルのサポートを行う。 今回も非常にファイル量が多くて、とりあえずLLVMをビルドするためだけにパッチを作って当てているが、LLVM 7.0は未サポートになっている部分が多…

"Creating an LLVM Backend for the Cpu0 Architecture"をやってみる(9. 算術演算命令の追加)

Cpu0のバックエンドをLLVMに追加するプロジェクト、今回からは4章に入って、算術論理演算命令を追加する。まずは算術演算から。 算術演算において、特殊な演算ケースの場合は演算を最適化できる場合がある。この方式についても見ていく。 実装は以下。cpu0_c…

Chiselを使ってCPUを作ろう(17. 5ステージにCPUにフォワーディングパスを追加する)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト。5ステージまで拡張したので、次はフォワーディングパスを追加して正常に演算を実行できるようにする。 github.com ALUのフォワーディングパスは、 WBステージ → EXステージ MEMステージ → EX…

毎日技術ブログを書いていたら、権威のある国際学会(の併設ワークショップ)で講演することになった話

年末なので技術以外のことも日記に書きたいと思います。1年に1回くらいは、エモい記事を書いてもいいでしょう。 まあ今年のまとめみたいな記事です。 今年も飽きもせずほぼ毎日技術ブログを書いていました。今見たら今年の投稿数は340件に近いので、まあほと…

"Creating an LLVM Backend for the Cpu0 Architecture"をやってみる(8. BackEnd追加のまとめ2.)

Cpu0のバックエンドをLLVMに追加するチュートリアル、第3章(?)のBackendの追加の章をやり終えた。 やり終えたといっても、ひたすら写経して、ビルドして、テストパタンを動かして終わりである。 これではさすがにもったいないので、もう少しまとめておきた…

"Creating an LLVM Backend for the Cpu0 Architecture"をやってみる(8. BackEnd追加のまとめ1.)

Cpu0のバックエンドをLLVMに追加するチュートリアル、第3章(?)のBackendの追加の章をやり終えた。 やり終えたといっても、ひたすら写経して、ビルドして、テストパタンを動かして終わりである。 これではさすがにもったいないので、もう少しまとめておきた…

"Creating an LLVM Backend for the Cpu0 Architecture"をやってみる(7. Cpu0 Architecture and LLVM Structure 続き)

LLVMにCpu0アーキテクチャを追加するチュートリアル。ちょっと飛ばしすぎたので一度立ち戻って、LLVMのアーキテクチャについてもう一度勉強し直す。 LLVMにバックエンドを追加するチュートリアル の Cpu0 architecture and LLVM structure をもう一度読み直…

Chiselを使ってCPUを作ろう(16. 5ステージにCPUに拡張してみる)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト。折角なので5ステージまで拡張して、テストパタンが通るようにしたい。 参考にしたのはヘネパタの後ろの方に乗っている5ステージのプロセッサの解説。とりあえず図に乗っていることをすべてChi…

"Creating an LLVM Backend for the Cpu0 Architecture"をやってみる(6. Cpu0 Architecture and LLVM Structure 続き)

LLVMにCpu0アーキテクチャを追加するチュートリアル。ちょっと飛ばしすぎたので一度立ち戻って、LLVMのアーキテクチャについてもう一度勉強し直す。 LLVMにバックエンドを追加するチュートリアル の Cpu0 architecture and LLVM structure をもう一度読み直…

"Creating an LLVM Backend for the Cpu0 Architecture"をやってみる(5. Cpu0 Architecture and LLVM Structure 続き)

LLVMにCpu0アーキテクチャを追加するチュートリアル。ちょっと飛ばしすぎたので一度立ち戻って、LLVMのアーキテクチャについてもう一度勉強し直す。 LLVMにバックエンドを追加するチュートリアル の Cpu0 architecture and LLVM structure をもう一度読み直…

"Creating an LLVM Backend for the Cpu0 Architecture"をやってみる(4. Cpu0 Architecture and LLVM Structure)

LLVMにCpu0アーキテクチャを追加するチュートリアル。ちょっと飛ばしすぎたので一度立ち戻って、LLVMのアーキテクチャについてもう一度勉強し直す。 LLVMにバックエンドを追加するチュートリアル の Cpu0 architecture and LLVM structure をもう一度読み直…

Windows Subsystem for Linux 上で Visual Studio Code 環境を構築する

LLVMのコードとか、非常に巨大なリポジトリを追いかけるときは、やはりIDEに近いような高機能なエディタを使いたい。 Emacsでも良いのだけれども、もっと新しいエディタは無いものか、ということでVisual Studio Codeを使ってみる。さらに、せっかくなのでVi…

"Creating an LLVM Backend for the Cpu0 Architecture"をやってみる(3. BackEndの追加)

LLVMにCpu0アーキテクチャを追加するチュートリアル。次はBackEndの追加を行う。参考にしたのは以下。 Tutorial: Creating an LLVM Backend for the Cpu0 Architecture : Backend structure Backend structure — Tutorial: Creating an LLVM Backend for the…

Chiselのパラメタライズについて調査(2. Advanced Parameterization Manualの続き)

Chiselについて少しずつ勉強を進めているが、SystemVerilogと同様のことが実現できないと、マスターしたとは言えないだろう。 Verilogでも多く使われるパラメータ化、これをどのようにしてChiselで使用するのか、Rocket-Chipのデザインを見ても良く分からな…

Chiselを使ってCPUを作ろう(15. デザインのパラメタライズ)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト。 CPUコアのバスサイズ、Debug情報のON/OFFなどをパラメータにより調整する。 github.com デザインのパラメタライズ パラメータ化する項目は、以下のようにして1つのクラスにまとめた。 RVConf…

Chiselを使ってCPUを作ろう(14. 2段パイプラインのデザインをGitHubに公開しました)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト。 とりあえず、rv64ui-pのリグレッションテストがすべてPass するようになったのでGitHub上に公開した。 といっても、2段ステージのパイプラインで非常にしょぼいものだが。 ただし、このデザ…

RISC-Vのフォーマル検証環境riscv-formalを試す

RISC-V Summitで発表があったRISC-VのFormalツールに、riscv-formalというものがある。 内容はまだ未確認だが、どうやらRISC-Vのプロセッサに対してFormal検証をかけることができるツールらしい。 github.com もともとこのツールはVerilogなど通常のデザイン…

Chiselのパラメタライズについて調査(1. Advanced Parameterization Manualを読む)

Chiselについて少しずつ勉強を進めているが、SystemVerilogと同様のことが実現できないと、マスターしたとは言えないだろう。 Verilogでも多く使われるパラメータ化、これをどのようにしてChiselで使用するのか、Rocket-Chipのデザインを見ても良く分からな…

Chiselを使ってCPUを作ろう(13. リグレッションテストを流してみる)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト。 とりあえず一旦リグレッションテストを全部流してみるとどのようになるのだろうか。 リグレッションテストは、ホームディレクトリにあるtest.hexを書き換える形で行う。 本当はファイルオー…

Gem5 for RISC-Vのビルド試行 (3. Gem5でCoremarkをコンパイルして実行してみる)

Gem5のリグレッションテストが流れたので、次は自分でプログラムをコンパイルして動かしてみたい。 手っ取り早く、Coremarkのベンチマークプログラムが動かないかと思い、試行してみることにした。 CoremarkをGitHubからダウンロードし、展開する。 github.c…

Gem5 for RISC-Vのビルド試行 (2. リグレッションテストの実行)

Gem5のビルドが完了して簡単なテストが実行できたので、次はリグレッションテストを実行してみたい。 Gem5にはあらかじめRISC-V向けの命令セットのテストパタンが用意されている。これをビルドして、全て流してみればよいわけだ。 cd tests/test-progs/asmte…

Gem5 for RISC-Vのビルド試行 (1. ビルドとhelloを流す)

Gem5というのは命令セットシミュレータの一つで、複数のISAをサポートしている。 現在のサポートしているアーキテクチャの状況はこんな感じだ。 Supported Architectures - gem5 RISC-Vも限定的にサポートされており、ビルドの試行くらいは出来そうだ。 ソー…

TensorFlow LiteでのRISC-V向けビルド試行(1. riscv32-gccを使ったビルド試行→失敗)

TensorFlow Liteは、Raspberry Pi向けであったり、iOS向けにコンパイル環境が用意されているようだが、よく見てみると一応RISC-V向けのビルドファイルが用意されている。 ちゃんとしたサポートになっているのかは分からないが、これを使えばとりあえずRISC-V…

Chiselを使ってCPUを作ろう(12. テスト終了コードの取り扱いについて)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト。RISC-Vにはfromhostやtohostといったレジスタ(メモリマップドレジスタ)が定義されており、それを使用してシミュレーションの制御を行う。 このメモリマップドレジスタはだいたい0x1000あたり…