できました!やはり前回の記事で述べたクロックを共通化することがうまく効きました!!
動いたぞ
ちょっと二次元キャラが映っていて気が引けますが、動画の通りうまく動きました。5秒でできるラーメンなんかないですが、ちゃんと分から秒への繰り下がりには対応しています。
FPGAのみで「ラーメンタイマー」、完成しました!!
画面右に映るのは不注意で殺してしまったFPGAボードくん pic.twitter.com/kxYgdanRDP— しまじゃき (@obknt) November 17, 2021
挙動はだいたいこんな感じ。
- ボード上のボタンで分および秒のインクリメント/デクリメントが可能
- SW0 というスライドスイッチを ON にするとカウント開始
- SW0 == ON の状態でカウントが 00:00 になるとブザーが鳴る
- 再度 OFF にするとブザーが消える
バグ?
ただ、この HDL には微妙な点があります。
- 1Hz クロックの誤差が最大1秒
- 秒数の繰り上がり(59 → 00) の時に分がインクリメントされない
まあ、ラーメンタイマーなので秒数まで細かく操作することはないでいいでしょう。その程度の粒度で開発しています。
怠惰っちゃ怠惰ですが、そもそも FPGA を使ってハードウェアの難しさを知ったので十分かと思います。論理合成時間かかるし。
〆
ということで非常に勉強になりました。これまでずっとマイコン (ソフトウェア) ばかりいじって来ましたが、ハードウェアって難しいですね。
今後は PYNQ-Z1 の PS (Processing System) を使って遊んでいきたいですね。
ちょっと最近、またマイコンにお熱ですので時期が開くと思いますが...
そういえば今回のプロジェクトをこちらにて配布しておきます。