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

FPGA開発日記

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

RISC-V 5th Workshopの発表紹介 (RISC-V Vector Extension)

この記事は ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016 - Qiita の15日目の記事です。 Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 僕一人では、クオリティのある記事を続けられそうにありません。。…

RISC-VのOoOプロセッサ、BOOMの性能を読み解く(1)

この記事は ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016 - Qiita の9日目の記事です。 Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 僕一人では、クオリティのある記事を続けられそうにありません。。…

組み込み向けプロセッサの性能評価指標、ベンチマークを動作させる

この記事は ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016 - Qiita の9日目の記事です。 Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 僕一人では、クオリティのある記事を続けられそうにありません。。…

RISC-V 5th Workshopの発表紹介 (Fast Instruction Set Simulator)

この記事は ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016 - Qiita の7日目の記事です。 Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 僕一人では、クオリティのある記事を続けられそうにありません。。…

RISC-V 5th Workshopの発表紹介 (Time Traveling Coherence Algorithm)

この記事は ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016 - Qiita の6日目の記事です。 Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 僕一人では、クオリティのある記事を続けられそうにありません。。…

RISC-Vの特権命令まとめ

この記事は ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016 - Qiita の5日目の記事です。 Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 僕一人では、クオリティのある記事を続けられそうにありません。。…

RISC-Vアーキテクチャの実装についてまとめ

この記事は ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016 - Qiita の2日目の記事です。 Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 僕一人では、クオリティのある記事を続けられそうにありません。。…

RISC-VのFreeBSD実装をZedBoardで動作させたい(解決したがFPGAで動作不良)

結局、いろいろ調べたところFreeBSDのカーネルを作るのにはもう一段階くらい必要で、 riscv - FreeBSD Wiki のWikiでFreeBSDをビルドする際、 make TARGET_ARCH=riscv64 buildworld の次に、 make TARGET_ARCH=riscv64 KERNCONF=ROCKET buildkernel を追加し…

RISC-VのFreeBSD実装をZedBoardで動作させたい(トラブルあり未解決)

(画像はriscv.org, freebsd.orgより拝借) FreeBSDは現在RISC-Vに移植されており、RISC-Vで動作させることが出来るらしい。 いろいろチュートリアルはあるのだが、まだちゃんと動作させたことが無い。 riscv - FreeBSD Wiki BBLというものをビルドしなければ…

RISC-Vの実装をZedBoardで手っ取り早く試すためのチュートリアル

自分でも良く分からなくなるのでまとめておく。RISC-Vを手っ取り早くFPGAボードで動作させたいときのために、githubからいろんなビルド済みの何かをダウンロードして動作させる方法をまとめておく。 用意するもの FPGAボード (ZedBoard, Zybo, zc706) 私はZe…

MicrosemiのFPGA向けRISC-Vソフトコア

Microsemiが自社のFPGA向けに、RISC-Vのソフトコアを発表した(FPGA向けは世界初ということだが)。 www.newelectronics.co.uk (画像はMicrosemiのウェブサイトより引用。) Microsemiの発表によれば、自社のFPGA(SmartFusionおよびIGLOO)向けのRISC-Vソフトコ…

RISC-Vのトレードマークと商標利用について(1)

RISC-VのMLにて、商標利用およびトレードマークの扱いについて議論が起きている。 正直、商標や、著作権などについては全くの素人のため、あまり詳しい部分は分かっていないのだが、現状のRISC-Vの商標について調べてみた。 ロゴについて riscv.org RISC-V商…

Debian on RISC-V情報

Twitterで知ったのだが、Debian GNU/LinuxのRISC-Vへの移植プロジェクトが進んでいるようだ。先日、メーリングリストが公開された。 New mailing list created for porting Debian to free and open RISC-V CPU arch https://t.co/o2q5TjZ5pj— The Debian Pr…

RISC-V BOOMプロセッサのRTLシミュレーションを実行(VCS用プロジェクトで試行)

前回は、Verilator用の生成ファイルおよび環境を移植して、VeritakでのRTLシミュレーションを試行しようとしたが、シミュレーションが始まらず失敗したのだった。 いろいろ調査していると、Verilator用だけでなく、SynopsysのRTLシミュレータであるVCSでのシ…

RISC-V BOOMプロセッサのRTLシミュレーションを実行したい(Veritakで挑戦→解析中)

RISC-Vのアウトオブオーダ実装であるBOOM (Berkeley Out-of-Order Machine)のRTLシミュレーションは、基本的にverilatorを使って実行されている。 それもそのはず、BOOMはオープンソースハードウェアであるため、オープンソースのシミュレータを使わないと万…

RISC-VプロセッサBOOMを分解 (vhierによる内部構造把握)

RISC-Vプロセッサの実装バリエーションのうち、性能重視のプロセッサであるBOOM (Barkeley Out-of-Order Machine)は、どのような構造で実装されているのだろう。 git clone https://github.com/ucb-bar/rocket-chip.git cd rocket-chip git checkout boom gi…

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の挙動も変わるし、ちょっとした違いというか、ビット長が異なることにより様々な取扱も変わってくる。そのあた…