Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

私のファミコンのfpsは530000です。もちろんフルパワーで(以下略

7,433 views

Published on

Vivado HLSを使ってFPGA上にNESを再現したお話。

Published in: Engineering
  • Follow the link, new dating source: ❶❶❶ http://bit.ly/39sFWPG ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating direct: ❶❶❶ http://bit.ly/39sFWPG ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THI5 BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

私のファミコンのfpsは530000です。もちろんフルパワーで(以下略

  1. 1. 私のファミコンのfpsは530000です。 ですがもちろんフルパワーで(略 みかん県在住 なかはら @oboe7man ゆっくりしていってね! 1
  2. 2. 今日のお話 • Vivado HLS使ってFPGAでファミコン作ったよ~ 2
  3. 3. ソースコードどうぞ • みきゃんウェア ゆるキャラグランプリ2015でみきゃんに投票すればおk 煮るなり焼くなり論文発表するなり好きにしてください 必 要 な 分 は 見 せ た と い う こ と だ こ れ 以 上は 見 せ ぬ ※ちゃんとお見せするので コンタクトしてくださいね 高位合成 NES 検索 3
  4. 4. なかはら@oboe7man is 誰 • 中原啓貴 (HIROKI Nakahara) • みかん大学で研究しています • みかん県(収穫量日本一とは言っていない)在住 通称愛媛県… 【みかん県の物価】 近所のスーパーで 一箱50個入り580円! つまり… 1みかん=11.6円 4
  5. 5. みかん県の物価! 11みかん ※2015年7月30日時点. FPGAはSpartan3 XC3S50VQ100 (Digikey1個購入価格) 5 約2~3週間分(By みかん県民) 2.5箱みかん
  6. 6. 表の顔 • ディープニューラルネットワーク • 9月にロンドンで開催される国際会議(FPL2015)で発表 • 現時点でFPGAで面積性能効率トップ(なはず) • GPUさん首を洗ってまっとれよ 6H. Nakahara and T. Sasao, "A deep convolutional neural network based on nested residue number system," 25th International Conference on Filed-Programmable Logic and Applications (FPL 2015), (Accepted).
  7. 7. 表の顔 • インターネット用検索エンジン • IPv6プレフィックス • パケットヘッダ • ペイロード(正規表現マッチ) Packet FPGA FPGA + + + + + + Adder + RAM M. M. M. M. M. M. M. M. M. M. M. M. M. 誰もが設計する方法 提案手法 7 H. Nakahara, T. Sasao, M. Matsuura, and H. Iwamoto, " LUT Cascades Based on Edge-Valued Multi-Valued Decision Diagrams: Application to Packet Classification,"IEEE Journal on Emerging and Selected Topics in Circuits and Systems (JETCAS), (To be published).
  8. 8. 表の顔 • 電波望遠鏡用FFT • CASPER ROACH2 45m AirBUS A321 44.51m CASPER ROACH-2 Revision 2 Stand-alone FPGA board -FPGA: Xilinx Virtex-6 SX475T -PowerPC 440 EPx -Multi-gigabit transceiver (SFP+) -2 x ZDOKs 8
  9. 9. 何の脈絡もなく ファミコンを作ることに • 先行者多数、ソースコードも豊富 • マリオという超有名タイトルが! 安直だね! 9
  10. 10. でも(息子が寝てくれないんで) 時間がないんです… ※夜11時過ぎ… 10
  11. 11. Vivado HLSを採用 • Xilinxの中の人に「これスゴイデース」と勧められたから • アカデミック価格は10万 (System Editionに含まれる) • XUP(Xilinx University Program)だと25ライセンス無料 • 上司(教授)のケツを蹴っ飛ばして導入しましょう • Nexys4 DDR を恵んで頂いたから • Xilinxさんありがとう! • Google先生が「HLSでNESを作った人いないよ」って 教えてくれたから(←重要) • 高位合成使うと短期間で設計できますよ~と煽られたから • ちなみにVivado HLSを使ったのは初めて(誰も信じてくれない…) • 前身のAuto-ESLの元になったアルゴリズムを知ってる程度 • 何故が高位合成ツールの査読が降ってくる… 11
  12. 12. NES (Nintendo Entertainment System)のお勉強 • アーキテクチャ • NES Info (http://nesdev.com/) • NES研究室 (http://hp.vector.co.jp/authors/VA042397/nes/) • すずめ愛好会 (http://symfo.web.fc2.com/nes/nes_suzume.html) • アセンブラ • ギコ猫でもわかるファミコンプログラミング (http://gikofami.fc2web.com/) • エミュレータのソースコード(C++) • TASの管理人謹製(http://bisqwit.iki.fi/source/nes.html) • 美しい日本のファミコンエミュレータ (https://github.com/tanakh/bjne/blob/master/README.ja) 12
  13. 13. エミュレータのコーディング • といいつつ、キモの6502コアは拝借 • M. Fayzulli (iNESの作者) (http://fms.komkon.org/EMUL8/) • #define (マクロ) ゴリゴリ…, 後でgcc使うと展開できるからネ • C言語で • いつも通りにビヘイビア(クロック無視)を書く • 標準ライブラリ&再帰&動的ポインタはダメよ~ダメダメ • 配列はstaticで初期値をあらかじめ指定 • レジスタ値を端末に, ゲーム画面をBMPファイルに出力 • ただし, 関数間のやりとりは外部変数を多用 • 高位合成が上手く扱ってくれることを期待 • C++から(メンバ変数)の移植がすっごい楽 • 環境 • Cygwin64bit@Win8.1のgcc (使ったオプション-O3くらい) 13
  14. 14. 案の定… signed charによる 符号拡張ぬけ ミラーリングが逆 14
  15. 15. こいつ…動くぞ… • マッパ0専用(マ○オのみ動けばおk) • ミラーリングは垂直のみ(マ○オのみ動けばおk) • APU(サウンド)は未実装 • Java版はバグ有り…orz 15
  16. 16. 高位合成ツールVivado HLSでGO! こ こ か ら が 本 当 の 地 獄 だ … 16
  17. 17. Vivado HLSに投入…の前に手直し • main()はテストベンチとして記述(つまり合成対象外) • ファミコンはプロセッサ+周辺回路, つまり順序回路…どうやって状態を保持? • 外部・内部変数→Vivado HLS任せ 【今回はこれ】 • 関数外→自分のRTLで管理 main() { // テスト読込み read(); // エミュレーション nes_emu(); } void nes_emu() { int reg_a; // エミュレーション部 } main() { // テスト読込み read(); int reg_a; // エミュレーション nes_emu( &reg_a); } void nes_emu( int *reg_a) { // エミュレーション部 } 17
  18. 18. リセットは? • Vivado HLS上で設定 • プラグマでも可 Solution → General → Add… →Commandで →config_rtlを設定 • none (電源オン時にリセット) • control (制御レジスタのみ) • state (制御+FSMをリセット) • all (メモリも含めてすべてリセット) • 外部変数に static 修飾子をつける • ちなみに const だとROMを明示 18
  19. 19. UG902: Vivado HLS高位合成 ガイドからざっと解説 • 1章をざっと読んで、3章を読むと取り敢えず書けるようになる • main()をテストベンチ, 以降の関数を合成対象とする記述を強く 奨励 • main()は何を記述しても可 • 今回はゲームパッドデータ(テキストファイル)を読み込ん でBMP画像を出力しました • Vivado HLSさん弱気… • まぁ、いきなり高位合成は勇気がいるよ • 一部のシステムコールは記述可(RTL生成時に無視してくれる) • printf, puts, putcharなどデバッグによく使う関数はおk • 逆にfprintf, getc, time, malloc等はダメ! • 当たり前だけど再帰、動的メモリ確保等は、ダメ 19
  20. 20. UG902: Vivado HLS高位合成 ガイドからざっと解説(続) • 小さい関数は自動でインライン展開される • 逆に, 各関数はそのままHDLのモジュールとして出力 +プリミティブ(BRAMと初期値ファイル(*.dat), DSP48E) • 任意精度型サポート • int24, uint1 (じゃあbooleanサポートしてよ…)とか • 1024ビットまでおk…VLIWマシン書けるじゃん • #include “ap_cint.h”をインクルード • (当然のことながら)通常のコンパイラの対象外 • Vivado HLSのCシミュ専用コードになってしまうぞなもし • RAMインプリは static, ROMだと const • 初期化はプラグマ(static int a=2とか書いて, #pragma HLS reset variable=a)、またはconfig_rtlで設定 20
  21. 21. Run C-synthesis…ウボァー 21
  22. 22. Vivado HLSさん優秀っす… • こちらの想定していない状況まで解析していた! int func( int a, int b) { if( a != 0) func( a, b); else return a + b; } a == 0を期待して コードを書いていた… 22
  23. 23. 再帰を直したら合成…できた!? 結構リソース食ってるな、、という感想 Vivadoにかけると全く違う量だったので、 アテになりません(怒) 23
  24. 24. NES全体をHDLで記述 • クロックドメインなVGAコントローラのみHDL手書き • RAM(BRAM)を馬鹿でかいバッファping-pong RAMとして NES 本体 @50MHz NES カートリッジ (RAM) バッファ RAM VGA Ctrl. @25 MHz Vivado HLS で設計 ROM吸出し by Arduino ゲームパッド by Arduino 24
  25. 25. 先生…検証が…したいです… な … な ん と い う こ と だ …… … 世 界 が ち が い す ぎ る …… あ … あ ま り に も … ……VivadoSIM で は ど う し よ う も な い …… Cygwin (Wind8.1, Vaio Pro 11)上の Cで1フレーム(256x240ドット)検証: 1秒 1フレームをVivadoで Behavioral Simulation: 3時間 25
  26. 26. サイクルベースで検証 • タイミング検証を省いてロジックのみ検証 • イベントドリブン:任意時刻の信号変化 • サイクルベース:クロックエッジの変化時のみ • Verilator (http://www.veripool.org/wiki/verilator) • HDLをC++に逆変換 (当時は何故?と思っていました…スマンカッタ) • Ubuntuだと「apt-get install verilator」でインストールできるお手軽さ • べんりな よのなかに なった もの よのう サイクルベース イベントドリブン Clock NESの検証だと 1フレーム 約10秒 26
  27. 27. ウボァー(2回目) • 人手を介した所(グルーロジック)にバグが… XとYが逆 RとBが逆 27
  28. 28. やり直し! • 今度は動いた! 28
  29. 29. ~働いたら負けかな と思ってる R T L に 触 れ た ら エミュレータの ビヘイビアモデルを Cで記述 Vivado HLS用に手直し ・ビット幅の調整 ・再帰構造の見直し Vivado HLS Cシミュレーション Vivado HLS 高位合成 Verilatorによる サイクルベース検証 Vivado HDL合成 全体のHDL記述 6日 30分 3分 5分 30分 10分 20分 Vivado SIMをすると 約3時間x60フレーム 2~ 3回 2~ 3回 数1000回? 全部で約1週間を費やした Vivado SIMだと1回シミュレーション (60フレーム)する時間だよ… こんな画面が でるまで真っ暗 =検証できない 29
  30. 30. 手書きHDLと比較 # 18Kb BRAMs # FFs #LUTs Off‐chip RAM (1) Spartan3E 1000 5 1588 5088 PSRAM (2) Spartan6 LX16 5 1348 2236 16MB Micron Cellular RAM Artix‐7 by Vivado HLS 75 (カートリッジ含む) 6004 6885 ‐‐‐ (1) http://danstrother.com/fpga‐nes/ (2) http://fpganes.blogspot.jp/2013/01/luddes‐ fpga‐nes.html 設計期間…約1週間(ソフト6日+高位合成1日), 手書きは約4か月 (http://gadget.itmedia.co.jp/gg/articles/1105/30/news103.html) 30 手設計より3倍HWが増加するが 20倍短い期間で設計できる
  31. 31. ZedboardのCortex A9と比較 • 800MHz Dual-Core • DDR3 512MB • Xillunux上で計測 • 自作エミュのCコードを使用 • gcc –O3 でコンパイル • APU(サウンド), PPU(描画)は 行わない 【結果】 66.5 fps そこそこ早い!? (HDL不要じゃん…) Vivado HLSでは296.6fps相当 消費電力は意外といい勝負 HDL: 1.04 W CortexA9: 2.42 W 高位合成によるHW高位合成によるHW ARM上のSWARM上のSW 高位合成によるHWは 消費電力性能比で10.79倍優れる 高位合成によるHWは 消費電力性能比で10.79倍優れる 31
  32. 32. 53万FPSへの挑戦 (魔改造) 32
  33. 33. とりあえずgprofを使って プロファイリング… ppu_render 34% ppu_render_bg 30% cpu_exec 15% mbc_read 12% ppu_render_spr 6% mbc_read_chr_rom 3% その他 0%残りは 0.01%未満… ppu_なんとか →描画処理 cpu_exec →命令実行 mbc_なんとか →メモリアクセス 33
  34. 34. 一方Vivado HLSで解析すると… Analysisを クリック 34 すでに描画と CPUエミュレーションを 並列化してくれてる! →ループをインライン展開して ループ回数を減らせばおk?
  35. 35. 高位合成による設計のポイント 35 C. Zhang, P. Li, G. Sun, Y. Guan, B. Xiao and J. Cong, ”Optimizing FPGA‐based  Accelerator Design for Deep Convolutional Neural Networks,” FPGA 2015
  36. 36. 2つの屋根 36 システムには2つの限界が存在 ・リソース量 (Computation) ・メモリ帯域 (Bandwidth) Bandwidth roofが求められる! (性能)/(帯域, ここでは4.5GB/s) C. Zhang, P. Li, G. Sun, Y. Guan, B. Xiao and J. Cong, ”Optimizing FPGA‐based  Accelerator Design for Deep Convolutional Neural Networks,” FPGA 2015
  37. 37. 作戦 37 デザインはこの範囲内に 収まらなければならない! デザインAだと, 95GFlops/5.34 GBs だから メモリ帯域制限 4.5GBsをオーバー! 実効性能は 60 Gflopsに落ちる 結論: この線を 狙っていこう! C. Zhang, P. Li, G. Sun, Y. Guan, B. Xiao and J. Cong, ”Optimizing FPGA‐based  Accelerator Design for Deep Convolutional Neural Networks,” FPGA 2015
  38. 38. 解決策: アルゴリズムの改良 38 デザインはこの範囲内に 収まらなければならない! アルゴリズムA アルゴリズムB C. Zhang, P. Li, G. Sun, Y. Guan, B. Xiao and J. Cong, ”Optimizing FPGA‐based  Accelerator Design for Deep Convolutional Neural Networks,” FPGA 2015
  39. 39. 解決策②: メモリ帯域の向上 39 RAM RAM RAM RAM RAM RAM RAM RAM RAM RAM RAM RAM RAM RAM RAM RAM RAM RAM FPGAのメモリ 数百~千個 (・∀・) 小さい(36Kb)(´・ω・`) C. Zhang, P. Li, G. Sun, Y. Guan, B. Xiao and J. Cong, ”Optimizing FPGA‐based  Accelerator Design for Deep Convolutional Neural Networks,” FPGA 2015
  40. 40. ゲームを絞るべ(マリオ専用化!) • FPGAにROMを埋め込む • さまざまな変数を定数にできる! →条件文が浅くなる →メモリアクセス回数が減る • ゲームの性質を利用して投機実行・並列化 • TASの管理人謹製のNESエミュがすごかった… 40
  41. 41. FPGAならではのテクニック • マリオしかできないYO… リコンフィギュレーション → FPGAは 再 構 成 できるじゃん! 41 MEM CPU MEM CPU ROM MEM MEM CPU マリオ 専用 CPU MEM CPUMEM MEM CPU サッ カー 専用 CPU 再構成 ROM 性能は低いけど なんでもできるよ! 性能高いし なんでもできるよ!
  42. 42. で、こうなった NET FPGA Sume Virtex7 690T Nexys4ボードは インタフェースのみ (VGA + JoyPad) 早すぎて何が起こっているか実機で確認できません… (シミュレーションではうまくいってるっぽいけど) (;´Д`) 42
  43. 43. 感想 • HLSに改宗しました • だってTAT短いんだもん • クロックマターなとこだけHDL • HDLに触れたら負け • サイクルベース等上位レイヤで検証しておけばおk • でも…やっぱり…ねぇ… • 秒オーダでコンパイルするCコンパイラさん手放せない… • Softwareエンジニアにはギャップがでかい • (使いどころを選べば) HWエンジニアには強力な武器 • コード生成品質・ツールの使い勝手・値段のバランスが良い • 人柱!人柱! • みんなで使おうHLS, もっと事例(SWやHWとの比較)が欲しい 43
  44. 44. おしまい! ご清聴ありがとうございました @oboe7man 44

×