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

FPGA開発日記

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

yuki-sato.comの「LinuxからFPGAを使ってみる」をやってみる (ZedBoard版 #8)

前回までで独自にビルドしたハードウェアを使ってLinuxを立ち上げることに成功した。 次に、ZedBoardに付属しているLEDを制御する。LEDを制御するためのハードウェアは、myLEDというIPとして実装し、あらかじめPL部に組み込んである。 devmem2を使えるように…

6th RISC-V Workshopの全発表資料が公開されました

riscv.org 6th RISC-V Workshopの記事が公開された。一個ずつチェックしていこう。

yuki-sato.comの「LinuxからFPGAを使ってみる」をやってみる (ZedBoard版 #7)

前回まででU-BootでLinuxをブートする準備が整った。次に、Linuxのルートファイルイメージを用意しよう。 今回も簡単化のため、既に存在するイメージを利用した。LinaroのUbuntuのイメージだ。 参考にしたのは以下のページ。 qiita.com 以下のページから最新…

yuki-sato.comの「LinuxからFPGAを使ってみる」をやってみる (ZedBoard版 #6)

最初に作成したブートイメージを試行して、ZedBoardで何故かブートできなかったので、いろいろ立ち戻って調査していたのだが、やはりZybo用のものを使うのは結構ハードルが高くて、Xilinxのオフィシャルパッケージを使うほうが楽なのかもしれないと思い出し…

yuki-sato.comの「LinuxからFPGAを使ってみる」をやってみる (ZedBoard版 #5)

前回の続き。ZedBoard向けのFSBLを作成する。 ハードウェアをエクスポートして、SDKを起動した。 [New] –> [Application Project]をクリックして、新しいアプリケーションプロジェクトを作成した。 新しいプロジェクト名として、「myLED_FSBL」を記入して、…

yuki-sato.comの「LinuxからFPGAを使ってみる」をやってみる (ZedBoard版 #4)

前回の続き。前回はハードウェアデザインまで作成したのだが、直後に自作したIPが壊れてしまい、環境を構築しなおしたのだった。 さらに、ZedBoardのADV7511の環境を引っ張ってきた場合、ブロックデザインのsystem.vまではLEDの出力ポートが生成されるのだが…

64bit BOOMプロセッサでCoremarkを動作させたい (2. RTLによるシミュレーション)

前回に引き続き、RocketChipおよびBOOMでCoremarkを動作させる。いろいろ調査した結果、RocketChipとBOOMでコンパイラを切り分けなければならないので、 それを適用してCoremarkをコンパイルしてみる。 ここでは、RocketChip版は${ROCKET_CHIP} リポジトリ、…

XmingよりもVCXsrvのほうが断然使いやすいので移行する

VirtualBoxなどで仮想マシンを作り、Puttyなどでコマンドラインから接続していてXを立ち上げる場合、Xサーバを立ち上げてWindowsにGUIを転送する必要がある。 WindowsにおいてフリーのXサーバといえば、Xmingしか知らなかったが、ひょんなことからVCXSrvを見…

RISC-V RocketコアとBOOMコアでサポートされているISAの違い

msyksphinz.hatenablog.com 前回BOOMコアでRTLシミュレーションを行おうとしてRTLシミュレーションエラーになってしまっていたのだが、どうしてもエラーの理由が分からず、まさかと思いriscv-toolsをboomのブランチでリコンパイルして動作させてみた結果、動…

RISC-V UCB実装のメモリマップまとめ

実装を確認するにあたり、RISC-Vの実装のメモリマップを各種資料からまとめた。 たぶんあっていると思うが、オフィシャル文章ではないので、間違いを発見した場合は指摘お願いします。。。

yuki-sato.comの「LinuxからFPGAを使ってみる」をやってみる (ZedBoard版 #3)

前回の続き。 参考ページ。 yuki-sato.com カスタムIPを接続する 作成したカスタムIPをインスタンスして、AXIポート、LED出力ポートと接続する。 myLEDカスタムIPにインスタンスとAXIポートの接続 まずはBlock Design上で作成したmyLEDIPを追加しよう。 myLE…

yuki-sato.comの「LinuxからFPGAを使ってみる」をやってみる (ZedBoard版 #2)

前回の続き。 参考サイト。 yuki-sato.com IPに外部ポートと機能を追加する。 AXIに接続されるIPは作成したが、まだ機能を追加していないのと、LEDと接続するポートが空いていないので、Verilogを記述してIPを改造する。 編集する必要のあるファイルは、 myL…

yuki-sato.comの「LinuxからFPGAを使ってみる」をやってみる (ZedBoard版 #1)

ZedBoard上で動作するLinuxで、ZynqのPL部を制御する方法について調査していたところ、以下のページを発見した。 yuki-sato.com Vivadoの立ち上げから、Linuxのビルド、そしてデバイスドライバの記述まで丁寧に解説してある。早速やってみよう。 このページ…

64bit BOOMプロセッサでCoremarkを動作させたい

RISC-V環境であるE51プロセッサを動作させたときに、Coremarkの公称値と実際の値が少し違っているのを見つけた。 64bit版Coremarkバイナリの生成 Coremarkをriscv-testsの環境でコンパイルしてみる RISC-V ISS Spikeでシミュレーション BOOMコアでRTLシミュ…

RISC-V Instruction Set Privileged Architecture 1.10 / User-Level ISA 2.2が出ました

RISC-V Instruction Set Architectureに更新が入っていた!こういうのをシレッとアップグレードするのは正直止めてほしいのだが。。。 User-Level ISA Specification 2.1 –> 2.2 (2017/05/07) Draft Privileged Architecture 1.9.1 –> 1.10 (2017/05/07) ど…

SiFiveの64bit RISC-Vコア Soc E51でCoremarkを動作させる(MCSの作り方)

前回、RISC-Vの64bitコアを搭載したSoCプラットフォームE51を使ってCoremarkを動作させたが、このときにあらかじめ提供されているMCSを改造してCoremarkを挿入した。 この方法はハードウェア設計の師匠に教えてもらったものだが、師匠から許可を得たのでその…

SiFiveの64bit RISC-VコアE51でCoremarkを動作させる

前回、MCSをダウンロードしてSiFiveのRISC-VコアE51を起動させた。 その時は、デバッグ用の機器を用意していなかったので自分のプログラムを動作させることができなかったが、ハードウェア設計の師匠からメールをもらい、プログラムを動作させることができる…

「ローグ・ワン スターウォーズ ストーリー」DVD買った

ローグワンのDVD買っちゃった。 msyksphinz.hatenablog.com 劇場で見ても結構面白かったので、もう一度見たいと思いDVDを買ってしまった。 ローグ・ワン/スター・ウォーズ・ストーリー MovieNEX(初回限定版) [ブルーレイ+DVD+デジタルコピー(クラウド対応)+M…

「Zedroid - Android (5.0 and later) on Zedboard」をやってみる(9. uramdisk.image.gzの展開)

前回は、u-bootが立ち上がったもののinitを起動させることができず、どうしたらよいのか分からないところで終わった。 そこまで日記に書いたところ、uramdisk.image.gzを事前に展開しておく必要があるということを @ksmakoto さんに教わった。 確かにその通…

「Zedroid - Android (5.0 and later) on Zedboard」をやってみる(8. Kernel Panic)

前回からいろいろブートファイルを作り直して、どうにかu-bootが立ち上がるようになった。 そして zedroid_device_xilinx_zedboard-kernel を少し変更する必要があったが、U-bootでの動作は始まったようだ。 zynq-zed-adv7511.dtsi diff --git a/arch/arm/bo…

SiFiveの64bit RISC-VコアE51をArty FPGAで動作させる

SiFiveはフリーのRISC-Vコアデザインとして、32bitのE31、64bitのE51を提供している。 www.sifive.com これらのソースコードはリクエストしないとダウンロードすることは出来ないが、mcsファイルが配布されているためこれを使って手っ取り早くFPGAで動作させ…

SiFiveの新RISC-VコアIP(E51, E31 Coreplex IP)

RISC-V 6th Workshop にて、SiFiveが新RISC-VコアIPであるE51を発表した。これまで発表されていたE31 Coreplex-IPは32ビット版だが、E51は64bitだ。 www.eetimes.com SiFiveはそれ以外にも、E51の有償サポートを発表している。足回りのIPにより値段が若干変…

コンパイルオプションを変えてCoremarkベンチマークを改善する

自作RISC-Vプロセッサは16バイト単位で命令をフェッチしてくる。つまり分岐などで新しい場所に命令フェッチを発生した時も、16バイトアラインで命令をフェッチする。 このとき、分岐先や関数の先頭が16バイトに乗っていると効率的だ。16バイトアラインの乗っ…

命令バッファのサイズによる性能変化の調査

自作RISC-VプロセッサでCoremarkベンチマークを計測しているが、命令フェッチをどれだけ投機的に実行するかによって性能がずいぶん変わってきた。 投機フェッチは、命令バッファが空いている限り実行しているが、あまりフェッチを出しすぎると、パイプライン…

自作RISC-VプロセッサにRASを実装する

自作RISC-VプロセッサにRAS(Return Address Stack)を実装して性能を調査した。 RASの実装をここしばらくやっていたのだが、意外と難しいということが分かった。 Return命令の判定をどこで行うか RAS以外の分岐予測、アドレスを使って分岐予測を行う方式の分…

「Zedroid - Android (5.0 and later) on Zedboard」をやってみる(7. Linuxブート途中で失敗)

前回のLinuxが立ち上がらない原因を調べていたのだが、どうやらBOOT.binを作成するとき、U-bootのファイルはu-bootではなく、u-boot.elfに改名しておかなければならない気がする。 生成されるBOOT.binのファイルサイズも違うので、ファイル名が違うだけでは…

「Zedroid - Android (5.0 and later) on Zedboard」をやってみる(6. SDカードへの書き直し)

前回SDカードを使ってブートしてみたが、動作しなかった。 いろいろ解析を続けていたのだが、まずZedBoardのプログラム書き込み終了の青色LEDが点灯していなかった。 そこでデザインなどの再ビルドと再度SDカードに書き込みを行い、再度SDカードから起動する…

「Zedroid - Android (5.0 and later) on Zedboard」をやってみる(5. SDカードへの書き込み・ブート失敗)

ここまででAndroidをブートさせるためのファイル群ができたので、SDカードに書き込んでブートの試行をしてみよう。 参考にしている資料は以下。 Zedroid - Android (5.0 and later) on Zedboard from Industrial Technology Research Institute (ITRI)(工業…

6th RISC-V Workshop Agendaが発表されました

RISC-V Workshopの第6回目、今回は上海だ。 riscv.org 開催日:May 8-11, 2017 場所:Shanghai Jiao Tong University (SJTU) in Shanghai China 今回はnVIDIAが協賛している。アジェンダは上記のリンクの通りだが、ざっと眺めてみた感じ、第5回ほどのバリエ…

「Zedroid - Android (5.0 and later) on Zedboard」をやってみる(4. Androidのビルド)

前回の続き。参考にしているのは以下の資料。 Zedroid - Android (5.0 and later) on Zedboard from Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院) www.slideshare.net 今回はAndroidのビルドを行う。 Androidのソースコードダ…

「Zedroid - Android (5.0 and later) on Zedboard」をやってみる(3. uImageのビルド)

前回の続き。参考にしているのは以下の資料。 Zedroid - Android (5.0 and later) on Zedboard from Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院) www.slideshare.net uImageのビルドを行う。 カーネルビルド。 sudo apt insta…

「Zedroid - Android (5.0 and later) on Zedboard」をやってみる(2. U-Bootの作成)

前回の続き。参考にしているのは以下の資料。 Zedroid - Android (5.0 and later) on Zedboard from Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院) www.slideshare.net U-bootをビルドする まずは、ZedBoard Linux用のU-Bootを…

「Zedroid - Android (5.0 and later) on Zedboard」をやってみる(1. ZedBoardターゲットハードウェアの作成)

ひょんなことから見つけた、「Zedroid」(ZedBoardでAndroidを動かす)をやってみようと思う。 環境としてはVivado 2017.1を使用し、XMPなどの過去のツールが使えなくなっているのでいろいろ問題はあるが、行けるところまで行ってみよう。 Zedroid - Android (…

DMPのAIプロセッサVIA DV700とTensorFlowプロトコルバッファ

ちょっと面白い製品がリリースされていたので調べてみた。 DMPのエッジ向けAIプロセッサVIA DV700という製品で、「エッジ向け」という名の通りIoTデバイスなどで動作することを前提としたAI用プロセッサだ。 Youtubeでデモンストレーションが公開されている…

RISC-Vでコンピュータアーキテクチャの基礎を学びたい人向けの入門書(Computer Organization and Design RISC-V Edition)

RISC-Vで書き直されたパタヘネこと"Computer Organization and Design"が発売された。 Computer Organization and Design RISC-V Edition: The Hardware Software Interface (The Morgan Kaufmann Series in Computer Architecture and Design)作者: David A…

RISC-VがGCC7.1に取り込まれた(インストール試行)

[sw-dev] Fwd: GCC 7.1 Release Candidate available from gcc.gnu.org groups.google.com 以下からダウンロードすることが可能だ。 とりあえずダウンロードして、ビルドして様子を見てみることにする。 ftp://gcc.gnu.org/pub/gcc/snapshots/7.0.1-RC-20170…

The RISC-V メモリコンシステンシモデル

RISC-Vウェブサイトに出ていたこの記事。 Vengineerさんにも言及いただいた。 @dev_msyksphinz Tool checks computer architectures, reveals flaws in emerging designApril 12, 2017https://t.co/sMVySElt8j読みました?— 無限ゲームのなか (@Vengineer) 2…

RISC-V LLVM を用いたベンチマークビルドの方法(Compressed ISAを生成させない方法)

前回のRISC-V LLVM 32ビット版命令生成には一つ問題があり、そのままパッチを当ててしまうとCompressed ISA(16ビット版 RISC-V ISA)を生成してしまう点にある。 現状自作CPUも自作ISSもCompressed ISAには対応していないので、32bit版命令しか生成しないよう…

Vivado 2017.1 AXI VIP packageの情報

Vivado 2017.1 AXI VIP Packageについていくつか情報が出ている。 japan.xilinx.com XILINX_AXI_VIP_2017_1.zipをダウンロードすると、いくつかVIPパッケージ内の機能について記述されている。 また、VivadoインストールディレクトリにはAXI VIPパッケージの…

RISC-V LLVM を用いたベンチマークビルドの方法

前回、RISC-V LLVMをビルドしたが、実際にベンチマークプログラムをビルドするためにはどのようにすればよいのだろう。 まず、チュートリアルにのっとってみるのがよいだろう。Freedomプラットフォームの32bit RISC-Vプロセッサ向けにclangを用意する。 いろ…

RISC-V LLVMのビルドとインストール手順

RISC-VはLLVMにも対応しており、リポジトリがgithubに公開されている。 github.com ブランチがいくつか存在するが、 riscv-trunk を選択すること。これは最新のLLVMを追いかけているブランチだ。 リポジトリのチェックアウトとビルド ビルドまでは非常に簡単…

Vivado 2017.1がリリースされていました

Vivado 2017.1がリリースされていた。 japan.xilinx.com 一応リリース情報を見てみよう。結構内容が盛りだくさんだ。 • Vivado IDE のユーザーインターフェイスを刷新。 まじで? こんな感じだった。 AXI Verification IP を導入 - SystemVerilog ベース、ラ…

RISC-Vコア BOOM向けのCoremarkリポジトリの準備

BOOMコアの解析の続き。やはり途中で割り込みに飛んでしまう動作が気に食わないので、riscv-testsのリポジトリをForkしてCoremarkを追加してみようと思った。 まず、Coremarkのriscv-testsのディレクトリを解析してみよう。riscv-testsのbenchmarkディレクト…

RocketChip RISC-V実装RTLにてベンチマークを計測する(3. -O3によるCoremarkコンパイル)

ずいぶん大昔の記事を引っ張り出してきたが、RASの解析などを行うにあたり、BOOMの実装を調べたくて、BOOMの実性能がどうなっているのか調べたくなってきたので調査している。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com gem5を使えばBOOMのパイ…

ランニング用のイヤホンを買い替えた

ランニング時に音楽を聴くため、Bluetoothのイヤホンの非常に安いものを購入していたのだが、何度か使用しているうちに問題が分かってきた。 msyksphinz.hatenablog.com www2.elecom.co.jp このイヤホンは非常に軽くて良いのだが、コントローラの部分が左右…

プロセッサの高速化技法: リターンアドレススタックの実装方法検討

リターンアドレススタック(Return Address Stack: RAS)は、関数呼び出しなどの命令(Call命令)が実行された場合、その関数の戻り先をあらかじめスタックに記憶しておき、Return文が実行された場合にスタックから戻りアドレスを取り出し、 そこからフェッチを…

即値ジャンプ命令の分岐予測実装

即値命令、RISC-VにおけるJAL命令は分岐予測の実装としては非常に単純だ。 即値命令は比較の必要もなく、またジャンプ先も常に固定だ。予測が容易であるため、実装も簡単だ。 一つだけ難しいのは、レジスタ参照の即値ジャンプの場合。これはレジスタの内容に…

リザベーションステーションの1サイクル先出し命令発行

リザベーションステーション(Reservation Station: RS)というのは、アウトオブオーダプロセッサにおける命令待ち合わせ機構の一つで、その命令が必要とするオペランドデータが、リザルトバスに流れてくるの監視している機構である。 リザルトバスに自命令の…

命令フェッチラインに基づく最適化

マイコンでは一般的なのかもしれないが、プログラムの最適化の1つの方法として命令フェッチラインに基づく最適化というものがある。 これは早い話が、ループの境界がなるべく命令フェッチの範囲を超えないようにし、フェッチ回数を減らすというものだ。 例…

自作RISC-VのSystemVerilog化と命令発行方式の変更

ちまちまRISC-Vの自作プロセッサを改造している。まずは拡張性の向上のためにRISC-Vプロセッサの実装をSystemVerilogに置き換えている。 SystemVerilogの詳細についてはここでは述べないが、いくつか便利な記述があるので紹介。 packed struct 制御信号線周…