読者です 読者をやめる 読者になる 読者になる

FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://sites.google.com/site/fpgadevelopindex/

5th RISC-V workshop @ Google Mountain View のアジェンダが公開されました

5th RISC-V Workshop @ Google Mountain View のアジェンダが公開されました。 riscv.org 日時 : November 29-30, 2016 場所 : Google’s Quad campus (468 Ellis Street, Mountain View, CA 94043) Mountain Viewなんて行けないけど、イベント後には毎回資料…

RISC-Vで実機動作可能な実装まとめ

RISC-Vは、様々なグループ、団体がその実装を行っており、RISC-V Workshopではいくつかの実装の発表も行われている。 そこで、現時点で一般ユーザが入手可能なRISC-Vとしてはどのようなものがあるか、ここでまとめておきたい。 この記事は情報がアップデート…

FreeBSD 11.0でのRISC-V環境生成試行 (4. RISC-V QEMUのビルド)

(画像はriscv.org, freebsd.orgより拝借) RISC-V向けQEMUのビルドでハマったのでメモしておく。 基本的には以下のページを参照してビルドすれば良いのだが、いくつかハマる点がある。パッケージのインストールが必要なのと、環境変数の設定だ。 riscv - Free…

RISC-V BOOMについて (2. ビルド試行とVagrant環境構築)

(画像は riscv.org より拝借) RISC-V BOOMについて、環境構築を行っている。例によってVagrant上にRISC-V BOOMのビルドを行うことのできる環境を作っておきたい。 前回のFreeBSD on RISC-Vの環境と同様に、Vagrant上の環境を作成したのでメモしておく。 msyk…

FreeBSD 11.0でのRISC-V環境生成試行 (3. Vagrantでの環境構築完成)

(画像はriscv.org, freebsd.orgより拝借) 前回、FreeBSD 11.0のRISC-V環境構築を試行したのだが、うまく行かなくて止まってしまっていた。 msyksphinz.hatenablog.com 結局RISC-Vのメーリングリストに質問して、うまく行く方法が分かった。Vagrantの環境を構…

RISC-V BOOMについて、とビルド試行 (1. チェックアウトとビルド、シミュレーションまで)

RISC-Vについては様々な団体からISAを実装したプロセッサコアが登場していうが、そもそもRISC-Vを提唱した Berkeley が開発したRISC-Vプロセッサコアは、以下の2種類であるという理解でいる。 RocketCore BOOM (Berkeley Out-of-Order Machine) RocketCoreに…

FreeBSD 11.0でのRISC-V環境生成試行 (2. ツールチェインがビルドできない問題点)

(画像はriscv.org, freebsd.orgより拝借) msyksphinz.hatenablog.com FreeBSD 11.0でRISC-Vアーキテクチャがサポートされたとのことで、休日にビルド試行を行っていたのだが、どうもまだうまく行かない。 FreeBSDの仮想マシン上でRISC-Vのツールチェインをビ…

FreeBSD 11.0ではRISC-Vをサポートしている (環境構築試行)

(画像はriscv.org, freebsd.orgより拝借) The FreeBSD Project FreeBSD 11.0-RELEASE Announcement FreeBSD 11.0がリリースされた。アーキテクチャのサポートとして、ARM64およびRISC-Vのサポートが追加されたらしい。 FreeBSDは、昔から積極的にRISC-Vをサ…

FreeBSD on RISC-Vのビルド試行(1)

(画像はriscv.org, freebsd.orgより拝借) FreeBSD on RISC-Vの開発が進んでいるという話を以前紹介した。 msyksphinz.hatenablog.com これ、ちゃんとシミュレータや実機で動作させることができるらしい。そうと分かれば、自分でビルドして使ってみたい。 ris…

CPUのテストパタンを自動生成する方式の検討

趣味でRISC-VのCPUコアを設計しているのだが、デバッグおよび性能検証を行うためのパタンが必要になる。 様々なアプリケーションを使って検証すれば良いのだが、網羅的かどうかも分からない。また、基本的な命令セットの性能検証も行う必要がありそうだ。 そ…

FreeBSD on RISC-VとRISC-V近況

FreeBSD on RISC-V あまりフォローしていなかったのだが、FreeBSDのRISC-Vへの移植が進んでいるようだ。 riscv - FreeBSD Wiki サポート状況なのだが、Spike ISSにてサポートが完了しているようだ。また、実機であるRocketChip, QEMUでのエミュレーションも…

xv6ブートとISSの機能拡張(デバッグ用トレースを常にflushさせる)

xv6のブートをRISC-VのISSで再現させている。途中までうまくいっているのだがどこで止まっているのかわからない。そのときは階層トレース機能を使ってどの関数まで飛んできたかをチェックする。 <FunctionCall 183795: main(0x80104ec8)> <FunctionCall 183803: kinit1(0x80103a98)> <FunctionCall 183814: initlock(0x80106d2c)> <Return: initlock> <FunctionCall 183836: freerange(0x80103b38)> </functioncall></return:></functioncall></functioncall></functioncall>

RISC-Vのオペランドフォーマットについて(デコードの容易性とISSの修正)

RISC-Vのオペコードは、取り揃えはおそらくMIPSをベースにしているが、その命令フォーマットはMIPSのそれとは異なっている。 一応、彼らの言い分としてはデコードのしやすさを基準に設計してあるらしいが、それが本当に有用かどうかは正直分からない。 特に…

RISC-Vユーザレベル命令セットVer.2.1が公開

RISC-Vのユーザレベル命令セットの改版Ver.2.1が公開された。 http://www.eecs.berkeley.edu/Pubs/TechRpts/2016/EECS-2016-118.pdf 64ビットよりも大きいデータを扱う命令において、RDフィールドが移動しないためのフォーマット変更 CSR命令を整数命令の章…

RISC-V向けISSの修正(32ビットモードと64ビットモードの混在)

RISC-V向けISSでは、32ビットモードと64bitモードを1つのオプションで混在できるようにしている。 ここ最近、32ビットモードでベンチマークを走らせてどうしても動かない場所があったのだが、突き詰めていくとアドレス計算と符号拡張のところにバグを仕込ん…

CSRのVerilogモデルを自動生成するためのジェネレータ

RISC-V対応のパイプラインプロセッサをちまちま作ってみている。基本的な命令発行制御などはできるようになってきたが、プロセッサとしてベンチマークなどを動作させるために必要になってくるのは、やはりシステムレジスタの実装だ。 RISC-Vのシステムレジス…

RISC-Vのptパタン(timer付きパタン)の調査

画像: UCB-BAR: RISC-V Instruction Set Architecture より。 ISSにRISC-Vのタイマー機能を搭載したら、pt系のパタンが軒並み落ちるようになった。 もともとあまりカバーしていなかった部分なので、これを機にパタンが通るように修正しようとしたのだが、だ…

RISC-VパタンをPASSさせるためのいくつかのISS修正(AMO命令)

画像: UCB-BAR: RISC-V Instruction Set Architecture より。 RISC-Vにおいて、アトミック命令としてAMO命令群が存在している。これは、 メモリリード データ操作 メモリライト、レジスタアクセス をアトミックに実行する。例えば、AMOSWAP命令は amoswap.w …

ISSの多倍長演算命令の修正

RISC-Vには64bitの乗算など、通常の計算の範囲では追いつけないような演算も含まれている。 例えば、MUL命令やMULHSU命令などは、64bitのデータ同士の演算であり、MULHは演算結果の128bitのうち上位の64bitを返してきたりする。 これらの演算をサポートする…

ISSのテストパタンでハマったところ修正

画像: UCB-BAR: RISC-V Instruction Set Architecture より。 久しぶりにISSのメンテナンスをしていたのだが、結構落ちているパタンがある。これをメンテしていると、いろいろ考えなければならないところがあって実装をちょっとずつ変更していった。 整数の…

例外が発生した場合のステータスの処理

画像: UCB-BAR: RISC-V Instruction Set Architecture より。 これまでいくつかのパタンでRISC-VのISSでPASSしていなかったものがあるのだが、今日は久しぶりにその修正をしていた。 RISC-Vには、例外が発生した場合の処理について、いくつかのパタンが存在…

RTLにおける検証用トレース機能の実装

RISC-VのCPUを作るにあたり、どのように検証するかということだが、基本的にISSとの一致検証を行うことになる。 この場合、まずはRTLの生成したトレースファイルとISSのトレースファイルを一致させることになる。 ISSのトレースファイルは、普通のログファイ…

RISC-Vのbenchmarkパタンセットを動作させる

前回、RISC-Vのパタンセットを動作させるためにecallを変更したのだが、変更が間違っていた。mstatusの下位だけでなく、上位ビットもずらしてしまっていた。これでは動作モード以外に、MMUのモードも変わってしまう。 だからSV32が選択されていたのか。 msyk…

RISC-Vのbenchmarkパタンセットを動作させる(2)

引き続きRISC-VのISSをメンテナンスして、OSのポーティングと調整を行っているのだが、そういえばベンチマークセットの動作確認をやっている途中で忘れていた。 ISSの調整ついでに、失敗したパタンについて何が起きているのかを見ていこう。 msyksphinz.hate…

RISC-Vのbenchmarkパタンセットを動作させる

RISC-VのGDBの動作を検証するために、benchmarkプログラムを動作させてみよう。RISC-Vのベンチマークセットは、riscv-testsに格納されている。 github.com これを動作させてみるために、コンパイルおよび動作の調査を行ったのだが、見たことないシステムレジ…

RISC-VのGDBのビルドとISSの対応

RISC-V向けにxv6の移植に挑戦したくて、そのためにはRISC-VのGDBの対応を考えないとデバッグがつらい。 いろいろ調査していると、RISC-V向けのGDBの移植が進んでいるようだ。早速使ってみよう。 1. RISC-V向けGDBのビルド 以下のリポジトリを落としてきて、…

RISC-Vのアドレス変換機能であるSV39の仕組みと実装

やっとこさ、RISC-VのMMUの実装が完了した。理解するまでに長かった。。。 一応、まとめておいた。RISC-VのMMUの変換の仕組みの概要を示している。 docs.google.com RISC-Vのアドレス変換モードはいろいろあるのだが、ここではSv39と呼ばれるものを示してい…

RISC-Vのテストベンチにおけるページテーブルの構成について

RISC-Vのページテーブルを作っていて、riscv_testsでテストしようとしたのだがつまづいた。 vmモードのテストパタンでは、実際のテストを実行する前に、テストパタン上でページテーブルを作成している。 それが、vm_bootとよばれる関数だ。 github.com void …

RISC-Vにおける動作モードの管理

前回の日記で、RISC-Vにおける動作モードの管理が良く分からないと書いたが、良く考えるとちゃんと仕様書に書いてあった。 RISC-Vでは、システムレジスタであるmstatusを使って複数の動作モードの遷移を管理している。 このルールに基いて、特権モードを移行…

RISC-VのMMUにおけるアクセス権限について

RISC-VのISSの実装の続きをしているが、まだまだ謎が多い。アドレス変換のために、RISC-Vでは複数のアドレス変換モードを持っている。 Draft Privileged ISA Specification v1.7 - RISC-V Foundation Sv39: Page-Based 39-bit Virtual Address System このSv…

32ビット以上のメモリアクセスをシミュレートする機能を実装

前回の続きで、結果的にメモリ渡しの部分が間違っていたため、動作していない部分があった。 データ形式の変換については、よく分からない部分が多いので、memcpyで変換しながらコピーするようにした。 github.com MemResult RiscvEnv::LoadFromBus (Addr_t …

32ビット以上のメモリアクセスをどのようにしてISSでシミュレートするか検討

RISC-VのISSで、MMUの実装を検討している。その中で、MMUのテーブルサイズは64ビットとして定義されているが、これまでは、これを32ビットアクセスの2回として実現していた。 しかし、やはり実際には、64ビットアクセスは一度のアクセスとして実現したい。と…

1FPGAに400コアのRISC-Vプロセッサを実装するプロジェクト"GRVI Phalanx"

RISC-V界隈の調査をしていたところ、なかなか面白い文献を発見した。 3rd RISC-V Workshopにて発表されたものだが、なんでもFPGA上に400個ものRISC-Vプロセッサを実装し、動作させたようだ。 その意味や、何に使うの?というのはともかく、実装面の挑戦とし…

RISC-Vにおける32ビットモードと64ビットモードの違い

RISC-Vには、32ビットと64ビットの実装が定義されている(ちなみに128ビットもある)が、それぞれにおいて実装の違いが存在する。 それにより、ISSの挙動も変わるし、ちょっとした違いというか、ビット長が異なることにより様々な取扱も変わってくる。そのあた…

RISC-VのISSを修正してテストパタンが通るように調整

RISC-VのISSのメンテナンスを継続している。前回から殆ど調整していなかったが、RISC-VのテストパタンをパスできるようにISSを調整していこう。 github.com github.com ISSの実装を進めていった結果、Failになっているパタンは以下となった。 The following …

RISC-Vのアトミック演算について

RISC-VのISS実装を進めていっている。今回はアトミック演算についてだ。 アトミック演算は、Read Modify Writeを使って実現している。ReadModifyWriteは、メモリからの読み込み、値の変更、メモリへのストアを1つの命令で実現しており、またこれらのメモリア…

RISC-VのISS修正中...

msyksphinz.hatenablog.com RISC-VのISSを引き続き修正している。 MMUの実装と、ベクタの部分が間違っていたので修正した。RISC-Vでは、ECALLという命令を使って一つ上の権限に移ることができる。 RISC-Vには4つの権限があり、上から Machine Mode Hyperviso…

RISC-Vのメモリ仮想化の方式について

RISC-Vのテストパタン(riscv-tests)をパスさせるにあたり、RISC-Vの持つ仮想化の方式について勉強する必要が生じた。 これを機に、RISC-Vの仮想化の方式についてまとめてみよう。 RISC-Vの持つ仮想化のモード RISC-Vには、オペレーションモードに応じていく…

RISC-VプロジェクトにHP, Oracle, Googleが参加

徐々にRISC-Vに注目が集まってきましたね。 www.publickey1.jp www.eetimes.com オープンなプロセッサということで、ARMなどと違い無料で利用することができるという点や、ARMに拘束されるよりもオープンに開発した方が良いという点も挙げられるが、個人的に…

Privileged命令の実装 (命令フェッチミスアラインの動作)

かなりのパタンが動作するようになってきた。 msyksphinz/swimmer_riscvgithub.com ma_fetchというパタンは、フェッチ時にミスアラインが発生したときの対処をチェックするテスト項目だ。 RISC-Vのアーキテクチャでは、JALRのジャンプ先アドレスのLSBは無視…

システムレベル命令のテストパタン実行結果

以下のリビジョンでテストを実行。rv32si-p-*.hexを実行してパスするかをチェックした。 msyksphinz/swimmer_riscvgithub.com rv32si-p-csr.hex 156 : [00000184] 780e1073 : csrrw r00,0x780,r28 mtohost=>00000000 r28=>00000019 mtohost<=00000019 rv32si…

RISC-Vの環境をDockerfileで構築する

現在はRISC-Vの環境をVagrantで構築しているが、それをDockerfileを記述してみる。 Dockerを使うことで、vagrantを利用している場合はOSを別々に起動するところが、同じOSを利用することでメモリ使用量を抑えることができるかもしれない。 msyksphinz/docker…

RISC-Vの省サイズ実装 PicoRV32

cliffordwolf/picorv32github.com これは使ってみたいな。RV32Iの実装ということで、とにかく小型であることを売りにしている。 最高周波数は7series FPGAで400MHz程度まで出るらしい。実装して試してみるか、シミュレーションをしてみると面白いかもしれな…

Coremark-Proをコンパイルしてシミュレータで流せる形式にする(奮闘中)

Coremark-ProをRISC-Vのgccを使ってコンパイルする - FPGA開発日記msyksphinz.hatenablog.com まだ格闘しているが、なんかうまく行かないなあ。 まず、システムコールあたりは正しく動作しないのは当然だ。bare-metalでコンパイルしているため、mallocでメモ…

Coremark-ProをRISC-Vのgccを使ってコンパイルする

msyksphinz/benchmarksgithub.com Coremark-ProをRISC-Vの環境でコンパイルするためにいろいろ修正したまとめ。 まず、util/make/ にRISC-V向けの環境ファイルを追加した。 基本は、fakeio.mak と linux.mak を使ってそれを変更することで対応している。 $ d…

RISC-Vの例外処理の機構

RISC-Vの権限階層は4階層構造を取っている。強い方から順に、 Machine Mode Hypervisor Mode Supervisor Mode User mode ちなみに、Hypervisorモードはまだちゃんとした規定が無い。命令については、Under constructionという感じだ。とりあえずパタンとして…

自作RISC-Vシミュレータのシステムレジスタ表記拡張

自作RISC-Vシミュレータのシステムレジスタの表記を拡張した。これまではCSRはアドレス番号でしか表記されなくなっていたが、これをシステムレジスタの名前で表記できるようにした。 Func: support CSR name is displayed in log file · msyksphinz/swimmer_…

RISC-VのCSR転送命令は何故即値をデコードしないのか?(回答編)

RISC-V のCSR転送命令は何故即値をデコードしないのか? - FPGA開発日記msyksphinz.hatenablog.com の疑問をRISC-Vのチームに聞いてみた。理由としては、即値で数ビットを同時に編集できるほうが用途としては有利だし、ハードウェア的にも軽くなるから、との…

RISC-V のCSR転送命令は何故即値をデコードしないのか?

RISC-Vのシステム系命令には、CSRRSI, CSRCIという命令が存在する。 http://riscv.org/spec/riscv-privileged-spec-v1.7.pdf The CSRRWI, CSRRSI, and CSRRCI variants are similar to CSRRW, CSRRS, and CSRRC respectively, except they update the CSR us…

RISC-V のマイクロ命令セットのドラフト版が公開!

RISC-V Draft Compressed ISA Version 1.7 Released | RISC-V BLOG RISC-Vは基本的に32ビット固定長命令なのだが、これに加えて16ビットのスモールサイズの命令セットが公開された。 ARMで言うところのThumb命令セットみたいなものか。 命令長が16bit レジス…