FPGA体験記(ライフゲームを作った話)西尾泰和13年6月5日水曜日
自己紹介• 最近DE0を買いました(素人)13年6月5日水曜日
自己紹介• 最近本を出しました4/24発売nhiro.org/langbook13年6月5日水曜日
13年6月5日水曜日
ビビっときた!13年6月5日水曜日
 http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:IBM_JX.jpg「テレビに  絵が出る」これこそ原体験!13年6月5日水曜日
VGA出力• 初めてのLED点灯からVGA出力までは本の通りすんなり…13年6月5日水曜日
• 背景色を白にしようとして、VGA規格上0じゃなきゃいけないところまで塗って表示されなくなった すんなり…というわけでもなく13年6月5日水曜日
• 円を書こうとしてなぜか1/4しか書かれないと思ったら、うっかり符号付きのつもりでコードを書いていた すんなり…というわけでもなく13年6月5日水曜日
 すんなり…というわけでもなく• 背景を白、前景を青にしたつもりが全部青い→RGBの3bitを通すはずのwireが[2:0]なしで宣言されていてBのビットしか通っていない!13年6月5日水曜日
 すんなり…というわけでもなく→LEの中のFFと、Embedded Memory Blockと SDRAMの区別がついていなかった(reg vram[307200:0]してた)13年6月5日水曜日
13年6月5日水曜日
 すんなり…というわけでもなく• 640 * 480 = 307200bitの「RAM: 2-PORT」(1-read I-write)を作成してVRAMに使った• 書き込んでみるとなぜか同じ模様が5箇所に出たり、描かれない領域があったり• 先...
• 原因や抜本的な解決方法がわからない• RTLViewerで見てみたらMegaWizardが出力した回路のアドレスのビット幅が期待より小さいように見えたが、そうなら手のうちようがない• 面倒になったので4x4ピクセルで1bitにして160x1...
13年6月5日水曜日
ライフゲーム• 作りました• http://www.youtube.com/watch?v=LGOcRXNXB78• FPGAでライフゲームを作りました - 西尾泰和のはてなダイアリーhttp://d.hatena.ne.jp/nishiohi...
ランダムな初期化• 線形帰還シフトレジスタ• 十分なランダムさか不安だったけど、やってみたら今回の用途には十分だった• 「リングオシレータ型真性乱数器」というアプローチもあるようだけど今回はパス13年6月5日水曜日
全体の流れ• 160x120のメモリからの読み書きアドレスをインクリメントする• 読んだデータを323bitのシフトレジスタにpush• シフトレジスタの0, 1, 2, 160, 161, 162, 320, 321, 322の9ビットを束ね...
• 4ステップを各1クロックで動かそうと思ったけど画面が流れる現象が起きたので各2クロックで動かしてる(多分アドレスの計算が間に合ってない) 酷いところ13年6月5日水曜日
• Verilogにfor文があることを知らず、Pythonで323行生成して貼りこんだ• →for文を覚えたので書きなおした• →そもそも代入文1個でよかった 酷いところ13年6月5日水曜日
• とりあえず簡単な方法で作って、その後カリカリに高速化しよう、とか思っていた• 消費したリソースは、LEが459個(3%)、メモリが57912bit(11%)なので全然使い切ってない• しかし現状、画面の更新に 3msec *と十分速いのでこ...
future work• VGAを読む方をやろうとしたけど...• そもそもアナログで読むのにはクロックが足りない…(DE0は50MHz、VGA信号は25MHz、DE0-nano搭載のADコンバータが1つのアナログピンを読むのに13クロック∼)...
future work• 「VGAを読んでそれを機械学習」をやるつもりだったのだけどデータの入力部分で頓挫• 他にデータを流し込む方法は…?シリアル通信を実装する??• 何のデータでやると楽しいかな…?産総研の一杉先生の考案された大脳皮質のモデ...
future works• ブロックス・デュオのモンテカルロ木探索を実装する?(UCB1までは実装経験あり)• プレイアウトを画面に出したら楽しそう• でも木構造とかFPGAに相性悪そう…という先入観(malloc等の仕組みをまず自作?13年6...
Upcoming SlideShare
Loading in …5
×

FPGAX 2

1,936 views

Published on

  • Be the first to comment

FPGAX 2

  1. 1. FPGA体験記(ライフゲームを作った話)西尾泰和13年6月5日水曜日
  2. 2. 自己紹介• 最近DE0を買いました(素人)13年6月5日水曜日
  3. 3. 自己紹介• 最近本を出しました4/24発売nhiro.org/langbook13年6月5日水曜日
  4. 4. 13年6月5日水曜日
  5. 5. ビビっときた!13年6月5日水曜日
  6. 6.  http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:IBM_JX.jpg「テレビに  絵が出る」これこそ原体験!13年6月5日水曜日
  7. 7. VGA出力• 初めてのLED点灯からVGA出力までは本の通りすんなり…13年6月5日水曜日
  8. 8. • 背景色を白にしようとして、VGA規格上0じゃなきゃいけないところまで塗って表示されなくなった すんなり…というわけでもなく13年6月5日水曜日
  9. 9. • 円を書こうとしてなぜか1/4しか書かれないと思ったら、うっかり符号付きのつもりでコードを書いていた すんなり…というわけでもなく13年6月5日水曜日
  10. 10.  すんなり…というわけでもなく• 背景を白、前景を青にしたつもりが全部青い→RGBの3bitを通すはずのwireが[2:0]なしで宣言されていてBのビットしか通っていない!13年6月5日水曜日
  11. 11.  すんなり…というわけでもなく→LEの中のFFと、Embedded Memory Blockと SDRAMの区別がついていなかった(reg vram[307200:0]してた)13年6月5日水曜日
  12. 12. 13年6月5日水曜日
  13. 13.  すんなり…というわけでもなく• 640 * 480 = 307200bitの「RAM: 2-PORT」(1-read I-write)を作成してVRAMに使った• 書き込んでみるとなぜか同じ模様が5箇所に出たり、描かれない領域があったり• 先頭から1024bitずつ交互に塗ってみたら5箇所同時に縞模様が描かれて、縞模様が10本描かれた後、残りがベタ塗りに…13年6月5日水曜日
  14. 14. • 原因や抜本的な解決方法がわからない• RTLViewerで見てみたらMegaWizardが出力した回路のアドレスのビット幅が期待より小さいように見えたが、そうなら手のうちようがない• 面倒になったので4x4ピクセルで1bitにして160x120の解像度にした(160 * 120は19200) すんなり…というわけでもなく13年6月5日水曜日
  15. 15. 13年6月5日水曜日
  16. 16. ライフゲーム• 作りました• http://www.youtube.com/watch?v=LGOcRXNXB78• FPGAでライフゲームを作りました - 西尾泰和のはてなダイアリーhttp://d.hatena.ne.jp/nishiohirokazu/20130424/136673698013年6月5日水曜日
  17. 17. ランダムな初期化• 線形帰還シフトレジスタ• 十分なランダムさか不安だったけど、やってみたら今回の用途には十分だった• 「リングオシレータ型真性乱数器」というアプローチもあるようだけど今回はパス13年6月5日水曜日
  18. 18. 全体の流れ• 160x120のメモリからの読み書きアドレスをインクリメントする• 読んだデータを323bitのシフトレジスタにpush• シフトレジスタの0, 1, 2, 160, 161, 162, 320, 321, 322の9ビットを束ねてアドレスとし、ライフゲームのルールがハードコードされた512bitのROMから1bit読む• 読んだ値を160x120のメモリに書き込む13年6月5日水曜日
  19. 19. • 4ステップを各1クロックで動かそうと思ったけど画面が流れる現象が起きたので各2クロックで動かしてる(多分アドレスの計算が間に合ってない) 酷いところ13年6月5日水曜日
  20. 20. • Verilogにfor文があることを知らず、Pythonで323行生成して貼りこんだ• →for文を覚えたので書きなおした• →そもそも代入文1個でよかった 酷いところ13年6月5日水曜日
  21. 21. • とりあえず簡単な方法で作って、その後カリカリに高速化しよう、とか思っていた• 消費したリソースは、LEが459個(3%)、メモリが57912bit(11%)なので全然使い切ってない• しかし現状、画面の更新に 3msec *と十分速いのでこれ以上高速化しても楽しくない、640x480にしても48msec* 8クロック * 160x120ピクセル / 50MHz13年6月5日水曜日
  22. 22. future work• VGAを読む方をやろうとしたけど...• そもそもアナログで読むのにはクロックが足りない…(DE0は50MHz、VGA信号は25MHz、DE0-nano搭載のADコンバータが1つのアナログピンを読むのに13クロック∼)• デジタルピンに無理やりつないでも1bitの色深度で読めるんじゃないかと思ったが、うまくモニタとして認識しない13年6月5日水曜日
  23. 23. future work• 「VGAを読んでそれを機械学習」をやるつもりだったのだけどデータの入力部分で頓挫• 他にデータを流し込む方法は…?シリアル通信を実装する??• 何のデータでやると楽しいかな…?産総研の一杉先生の考案された大脳皮質のモデルBESOMに興味ありBESOM ver.2.0を描いてみた - 西尾泰和のはてなダイアリーhttp://d.hatena.ne.jp/nishiohirokazu/20130404/136506037613年6月5日水曜日
  24. 24. future works• ブロックス・デュオのモンテカルロ木探索を実装する?(UCB1までは実装経験あり)• プレイアウトを画面に出したら楽しそう• でも木構造とかFPGAに相性悪そう…という先入観(malloc等の仕組みをまず自作?13年6月5日水曜日

×