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

Contenu connexe

Plus de nishio

Plus de nishio (20)

夏プロ報告
夏プロ報告夏プロ報告
夏プロ報告
 
ITと経営
ITと経営ITと経営
ITと経営
 
部分観測モンテカルロ計画法を用いたガイスターAI
部分観測モンテカルロ計画法を用いたガイスターAI部分観測モンテカルロ計画法を用いたガイスターAI
部分観測モンテカルロ計画法を用いたガイスターAI
 
交渉力について
交渉力について交渉力について
交渉力について
 
If文から機械学習への道
If文から機械学習への道If文から機械学習への道
If文から機械学習への道
 
組織横断型研究室構想
組織横断型研究室構想組織横断型研究室構想
組織横断型研究室構想
 
2017首都大学東京情報通信特別講義
2017首都大学東京情報通信特別講義2017首都大学東京情報通信特別講義
2017首都大学東京情報通信特別講義
 
強化学習その5
強化学習その5強化学習その5
強化学習その5
 
良いアイデアを出すための方法
良いアイデアを出すための方法良いアイデアを出すための方法
良いアイデアを出すための方法
 
強化学習その4
強化学習その4強化学習その4
強化学習その4
 
強化学習その3
強化学習その3強化学習その3
強化学習その3
 
強化学習その2
強化学習その2強化学習その2
強化学習その2
 
強化学習その1
強化学習その1強化学習その1
強化学習その1
 
線形?非線形?
線形?非線形?線形?非線形?
線形?非線形?
 
機械学習キャンバス0.1
機械学習キャンバス0.1機械学習キャンバス0.1
機械学習キャンバス0.1
 
首都大学東京「情報通信特別講義」2016年西尾担当分
首都大学東京「情報通信特別講義」2016年西尾担当分首都大学東京「情報通信特別講義」2016年西尾担当分
首都大学東京「情報通信特別講義」2016年西尾担当分
 
勾配降下法の 最適化アルゴリズム
勾配降下法の最適化アルゴリズム勾配降下法の最適化アルゴリズム
勾配降下法の 最適化アルゴリズム
 
Wifiで位置推定
Wifiで位置推定Wifiで位置推定
Wifiで位置推定
 
ESP8266EXで位置推定
ESP8266EXで位置推定ESP8266EXで位置推定
ESP8266EXで位置推定
 
Raspberry Piで Wifiルータを作る
Raspberry PiでWifiルータを作るRaspberry PiでWifiルータを作る
Raspberry Piで Wifiルータを作る
 

FPGAX 2