FPGA開発日記

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

2018-11-01から1ヶ月間の記事一覧

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

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

Chiselを使ってCPUを作ろう(11. 例外やシステムコールでのCSRの取り扱いなど)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト。テストパタンを動かすためには、CSRレジスタを扱えければならないのと、Ecallなどの例外を扱う命令が実行できなければならない。 Ecallは、例外を発生させ例外コードをmcauseに書き込み、mtve…

Chiselを使ってCPUを作ろう(10. Configurationを1つのcaseにまとめる)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト、テストパタンを動かしながらデバッグしている。 いくつかコンフィグレーションを変えながら動かしたいところがあり、またVerilogのパラメータのように扱いたい部分があるのだが、Chiselにはca…

"Creating an LLVM Backend for the Cpu0 Architecture"をやってみる(2. Cpu0の最初のビルド)

Cpu0のインポートを実施したLLVMの最初のビルドを実施してみる。参考にしたのは以下だ。 Cpu0 architecture and LLVM structure — Tutorial: Creating an LLVM Backend for the Cpu0 Architecture チュートリアルのLLVMのバージョンはどうも古いようで、きち…

"Creating an LLVM Backend for the Cpu0 Architecture"をやってみる(1. Cpu0のアーキテクチャ)

なんかLLVMのバックエンドの資料を読み漁るの、浮気ばっかりしているが面白そうな資料を見つけたのでこっちに浮気してしまった。 もともとはこっちをやろうとしたのだが、Step by Stepじゃないので根気が続かなくなってしまった。 Writing an LLVM Backend —…

TileLinkはどのようにしてコヒーレントを維持するのか(1. TileLinkのコマンド)

https://static.dev.sifive.com/docs/tilelink/tilelink-spec-1.7-draft.pdf より抜粋 RISC-Vの多くの実装で採用されているTileLinkには、大きく分けて3つのグレードが存在している。 TL-UL (TileLink Uncached Lightweight) TL-UH (TileLink Uncached Heavy…

Chiselを使ってCPUを作ろう(9. テストベンチを走らせる)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト、算術演算命令、ロード・ストア命令、CSR命令が多少動くようになってきたので、RISC-Vのテストパタンを動かしてみてもよさそうな気がしてくる。 riscv-testesに乗っているテストパタンを動かし…

Chiselを使ってCPUを作ろう(8. CSR命令の実装方法調査)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト、算術演算命令、ロードストア命令とくれば次はCSR命令だ。 RISC-VにはCSR(Control and Status Register)が多くの数定義されている。 これらをChiselで記述するためにはどうしたらよいのだろう…

Chiselを使ってCPUを作ろう(7. Load / Store命令の実装)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト、ある程度演算命令は動き始めたので、次はLoad/Store命令を実装する。 RV64の命令系列では、64-bit, 32-bit, 16-bit, 8-bitのメモリアクセスが行える必要がある。 メモリの部分はVerilogで記述…

Chiselを使ってCPUを作ろう(6. パイプラインと分岐命令の実装)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト、ある程度演算命令は動き始めたが、ちゃんと動作しているのかどうかを確かめたい。 分岐命令はALUで比較を実行して、その結果に応じてPCを切り替える。 RISC-Vには3種類のPCアップデートの方法…

Chiselを使ってCPUを作ろう(5. トレース記述をどう作る?)

Chiselを使って、非常にシンプルなCPUを作ってみるプロジェクト、ある程度演算命令は動き始めたが、ちゃんと動作しているのかどうかを確かめたい。 普通CPUを作るときは、波形をわざわざ観測するなんてそんなダサいことはしなくて、トレースファイルを出力し…

Chisel-Templateを使ってオリジナルデザインを作ってみるチュートリアル (4. ALUの実装)

随分とほったらかしにしていたが、Chiselを使ってオリジナルデザイン開発を再開した。 簡単なRISC-VコアをフルスクラッチでChiselで作ってみて、Chiselの理解を深めようと思う。 msyksphinz.hatenablog.com 各種命令の実装 まずはシンプルな算術演算命令の実…

Chisel-Templateを使ってオリジナルデザインを作ってみるチュートリアル (3. CPUのコアのDebug-Trace作成)

随分とほったらかしにしていたが、Chiselを使ってオリジナルデザイン開発を再開した。 簡単なRISC-VコアをフルスクラッチでChiselで作ってみて、Chiselの理解を深めようと思う。 msyksphinz.hatenablog.com まず、テストパタンを用意しなければならない。テ…

RISC-V for LLVMのビルド試行 (2. RISC-Vターゲットでのコンパイルとテスト)

RISC-V on LLVMについて少し調べている。 LLVMのソースコードを眺めていると、TargetとしてRISC-Vが追加されているのを発見した。 なんだ、追加されてるじゃないか。じゃあ動くんじゃないか。 という訳で最新版のLLVM(ver 8.0?)とClangを落としてきて、パッ…

2018年のRISC-V関係の(私の)講演資料をすべて公開しました

ずいぶんとアップロードするのを忘れていましたが、今年の予定しているRISC-V関係の講演はすべてやり切ったので、発表資料をすべて公開したいと思います。 今年は4件講演しました。秋頃から集中したのでずいぶんと息切れしました。 特にDesign Solution Foru…

Ubuntu on Windows Subsystem for LinuxでRISC-V環境のビルド試行

Ubuntu on Windows Subsystem for Linux上でRISC-Vのツールチェインとデザインが使えるのかどうか試行した。 なんでこんなことをしているのかというと、自宅で使っているUbuntu on Virtual Boxがクラッシュして自宅のRISC-V環境を全部失ったから。 折角なの…

Writing an LLVM Backendをやってみる(1. RISCV64プロジェクトを作成)

LLVMのバックエンドについてより理解するために良さそうな資料を見つけたので一通り触ってみることにした。 Writing an LLVM Backendという。 Writing an LLVM Backend — LLVM 8 documentation この資料では、新しいターゲットアーキテクチャを追加するにあ…

RISC-V for LLVMのビルド試行

コンパイラ勉強会に参加してコンパイラ熱が高まっているので、LLVM for RISC-Vについて久しぶりに調べた。 これまで何度かRISC-V for LLVMについて調べてきたが、Mailing Listなどを見ていてもあまりアップデートがない。 msyksphinz.hatenablog.com msyksph…

Chiselで記述された教育用RISC-VプロセッサSodor (1. ビルドとセットアップ)

Chiselのイントロダクションを一通りやり終えたので、次はより実践的なデザインを見ていくために、RISC-V Sodorを見ていくことにした。 Sodorは教育用に作られたRISC-Vのプロセッサで、Rocketよりも単純な構成を取っている。 デザインも1ステージのものから5…

PortSmashで学ぶ高性能プロセッサの同時マルチスレッディング

CPUの脆弱性として新たに報告された "PortSmash" 、どういう脆弱性なのかを調べるために論文を探すと公開されていた。 Port Contention for Fun and Profit https://eprint.iacr.org/2018/1060.pdf "Port Contention for Fun and Profit" という論文として公…

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

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

ET/IoT Technology 2018のテクニカルセッションで講演します

Embedded Technology(今はET/IoT Technologyと言うのかな) 2018のテクニカルセッションで講演することになりました。 発表の一週間前になりましたので、例によって告知です。 日付 : 11月14日(水) 14:00-15:30 場所 : パシフィコ横浜 F201 アネックスホール …

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

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

Chisel-Bootcampを試してみる(1. Chiselの基礎からScalaを活用した回路設計法まで)

Chiselの勉強を本格的にやっているのだが、教材として良いものを見つけた。Chisel-Bootcampというものだ。 github.com Chiselの基礎から、チュートリアル風に、サンプルを交えながら、途中でExerciseも出てくるのでそれをこなしながら進めていく。 本来はJup…

Environmental-Modulesを止めてLmodに移行した

ツールチェインとかコンパイラの環境を変更するために、Environmental-Modulesというツールを使用している。 Environmental-Modulesは、使用するツールチェインに応じてPATHや環境変数を変えるためのツールだ。 ソフトウェア界隈ではあまり知られていないと…

Pythonを経由してC++のオブジェクトを扱う方法(2. C++のオブジェクトをPythonのオブジェクトのように扱う方法)

自作RISC-Vシミュレータは、バイナリファイルを指定するとそれを読み込んで、指定したプログラムカウンタの場所からシミュレーションを実行し、tohostのアクセスに到達するか最大実行サイクルに到達すると終了するのだが、そうでなく、もう少しInteractiveに…

Quantum Convolutional Neural Networksの勉強

ニューラルネットワークを量子コンピュータの考え方で改良する方法、Quantum Convolutional Neural Networksについて論文を読んでみた。 Quantum Convolutional Neural Networksを「量子畳み込みニューラルネットワーク」と考えればよいのだろうか。 畳み込…

Pythonを経由してC++のオブジェクトを扱う方法

自作RISC-Vシミュレータは、バイナリファイルを指定するとそれを読み込んで、指定したプログラムカウンタの場所からシミュレーションを実行し、tohostのアクセスに到達するか最大実行サイクルに到達すると終了するのだが、そうでなく、もう少しInteractiveに…