AccessViolation Exception

仕事でもはんだづけ、家でもはんだづけ

FPGAにライフゲームを実装した

www.youtube.com

Xilinx社のSpartan6LX9にライフゲームを実装して動かしてみた。

VGA出力

VGAは素直で実装しやすい。

参考

ピンアサインについて VGA端子 - Wikipedia

信号タイミングについて VGA Video (6.111 labkit)

640*480 60Hzを出力したければ、25.175MHzで9bitのカウンタ*1をインクリメントしてSyncパルスの時だけHSYNCを落とせばいい。VSYNCも同様にして1行毎にカウントアップするだけで行ける。

ライフゲーム実装

参考

ライフゲーム - Wikipedia

c言語で書いてあった c言語でLifeGameを再実装 - AccessViolation Exception

ライフゲームの計算はムーア近傍から写像を作るだけである。RAMから読み出すアドレスを生成する回路と、ムーア近傍値をストアして結果を出す回路を作る。

近傍の値を再利用する都合上RAMを2つ用意し、交互に写像を取る実装にした。*2

VGA出力は計算元になっているRAMからデータを読み取り出力している。

乱数生成

乱数はLFSRで生成している。種はVGAのカウンタの値をいじって0にならないようにしたものが指定できるようにしてある。

線形帰還シフトレジスタ - Wikipedia

*1:水平ピクセルは640 + 16 + 96 + 48カウントできればいい

*2:実際にやるなら3行ストアしてしまったりしてもいいのかもしれない