FPGAにライフゲームを実装した
Xilinx社のSpartan6LX9にライフゲームを実装して動かしてみた。
VGA出力
VGAは素直で実装しやすい。
参考
ピンアサインについて VGA端子 - Wikipedia
信号タイミングについて VGA Video (6.111 labkit)
640*480 60Hzを出力したければ、25.175MHzで9bitのカウンタ*1をインクリメントしてSyncパルスの時だけHSYNCを落とせばいい。VSYNCも同様にして1行毎にカウントアップするだけで行ける。
ライフゲーム実装
参考
昔c言語で書いてあった c言語でLifeGameを再実装 - AccessViolation Exception
ライフゲームの計算はムーア近傍から写像を作るだけである。RAMから読み出すアドレスを生成する回路と、ムーア近傍値をストアして結果を出す回路を作る。
近傍の値を再利用する都合上RAMを2つ用意し、交互に写像を取る実装にした。*2
VGA出力は計算元になっているRAMからデータを読み取り出力している。
乱数生成
乱数はLFSRで生成している。種はVGAのカウンタの値をいじって0にならないようにしたものが指定できるようにしてある。