ストップウォッチの設計 9秒まで計測できるストップウォッチを設計

ストップウォッチの設計
9秒まで計測できるストップウォッチを設計
9の次は0に戻る
一つの押しボタンiKEY_Bで、スタートストップを制御
もう一つの押しボタンiRST_Bで、リセット(時間を0秒に戻して停止)
時間は、1個の7セグに表示
FPGAで実現
a
iKEY_B
iRST_B
キー
判定
キー
判定
fsm.v
(既設計)
制御回路
(設計対象)
4
7セグ
デコーダ
decoder.v
(既設計)
7
f
g
e
b
c
d
7セグ
ディスプレイ
1
1秒を計測するには? (復習)
周波数 f = 50MHz のクロックが与えられているとする
クロックの1周期 = T = 1/f = 20 ns
1クロック周期
20 ns
……
1s (20nsが50M個)
1s
1s =
=
-9
20ns 20×10 s
109
20
7
クロック
100×10
=
= 50×106=50M 周期
20
クロックの立上りをカウントし値が50×106 になればよい
50×106 回のカウンタは、何ビットあればよい? 26 ビット
なぜならば、226 = 64×106 > 50×106
2
ストップウォッチのデータパス付きステートマシン
入出力
iCLK
iRST
制御回路
(設計対象)
4
oBYOU
信号名
iCLK
iRST
iKEY
oBYOU
種類
入力
入力
入力
出力
論理
正論理
正論理
-
内部レジスタ
iKEY
レジスタ名
oBYOU
rCOUNT
rSTATE
iRST == 1 /
rCOUNT <= 0
oBYOU <= 0
iKEY == 1
/
IDLE
else/
RUN
iKEY == 1
ビット幅 意味
1
クロック(50MHz)
1
同期リセット
1
キー入力
4
秒の2進表示
/
ビット幅意味
4
秒(2進数)を保持
26
1秒をカウント
1
状態を保持
oBYOU == 9 && rCOUNT == 50000000 /
oBYOU <= 0
rCOUNT <= 0
rCOUNT == 50000000
oBYOU <= oBYOU + 1
rCOUNT <= 0
else /
rCOUNT <= rCOUNT + 1
/
3