テレワークでずっと家にいて暇なのでLEDデジタル時計をFPGA設計から作成してみることにした。FPGAはザイリンクスのKINTEX7を使用したいと思う。実機検証用のボードは追々考えることにしよう。
作りながらまとめていこうと思うので、随時更新していく予定。
まず、LEDデジタル時計を作成する際に、必要な機能を書き出すと大きく分けて下記の四つになるかな?
①Switchコントローラ
・時計の時刻設定を行う際に、外部から入力される信号を制御する(ボードのどこのボタンを押したら、どんな動作をさせるか決める箇所)
・外部入力信号を使用するのでチャタリング対策も必要
②カウンタ
・時計のコア
・1秒、1分、1時間を計算する
・使用するボードの原振により、ここの設計は異なる
③デコーダ
・カウンタで計算した結果(2進数)を、7セグに表示させるために10進数へ変換する
④7セグ表示回路
・7セグを制御する
ブロックで表すとこんな感じ
大雑把にブロックが決まったところで、それぞれの詳細について考えていこうと思う。
①Switchコントローラ
Switchコントローラには、ステートマシンが必要。
ステートマシンとは何かということは後述するとして、
とりあえずステートマシンがとりうる状態は下記の三つにする。
① ノーマルモード
② 分合わせモード
③ 時合わせモード
上記のステートマシンの説明を簡単に記載する
sw1 : sw1信号が入力されるたびにノーマル→分合わせ→時合わせ→ノーマル→…と、回路のモードが変化する。
sw2 : sw2信号が入力されるたびに、そのモードによるカウンタがインクリメントされる。(分合わせモードなら、時計の分がインクリメントされる)
これでSWコントローラの大まかな仕様は決まった。
次回は上記の仕様をもとに、実際にRTLを記載していきたいと思う。
コメント