Post on 25-Jul-2020
FPGA 課題24 時間時計 仕様書
xxxxxxxxxx 科 xx 番xxx xxx
24 時間時計 - 目次 -
1.使用ハードウェア
2.各モード状態遷移
a.モードの階層化
b.メインモード状態
c.時間単位モード状態
d.時計表示
e.キッチンタイマ
f.ストップウォッチ
g.アラーム設定
h.カレンダー 時刻調整・
3.表示制御
a.出力 LED
b.出力 7 セグ LED
c.出力 LCD(16x2 行 )
4.回路図説明 (Schematic)
a.全体回路図
b.各モジュール
5.まとめ
a.作成状況
b.思ったこと反省点など・
2 32/
1. FPGA ボード:Basys2 Spartan-3EFPGA Board
2. FPGA :Xilinx Spartan 3E, 100K gates
1. 使用ハードウェア
1. I/O 使用:入力 ) ボタン x 4 ( 左からボタン 0-3 、以下 B0-B3)出力 ) LED x 8 、 7 セグメント LED( 以下 7 セグ ) x 4外部出力 ) LCD x 1 (16x2 行 ) 、 VGA x 1
3 32/
②時間単位モード 年、月、日、時、分、秒 … と時間調整を持つ メインモード ( 時計調整、キッチンタイマ、アラーム設定 ) で 共通で使用する状態を定義したもの。
③サブモード 各メインモードで持つ、それぞれの処理状態。
シーケンサ状態を持つ 3 つのモードについて説明する。
本時計では 3 つのモードを 階層化した状態として持っている。
①メインモード 本時計の機能を状態としたもの。 時計表示、ストップウォッチ、 アラーム設定など。
モード階層化イメージ
2. 各モード状態遷移 - a. モードの階層化 4 32/
24 時間時計のメインモードとして、以下①~⑤の状態を持つ。
①時計表示 時計を表示する。
②キッチンタイマ キッチンタイマとなる。
③ストップウォッチ ストップウォッチとなる。
④アラーム設定 アラーム時間を設定する。
⑤カレンダー 時刻調整・ ( 初期 ) 時計を設定する。
メインモード状態遷移図
2. 各モード状態遷移 - b. メインモード状態 5 32/
電源 ON 直後の状態は「カレンダー 時刻調整」モードとする。・メインモードの状態切替には B0 を使用する。
但しアラームが鳴動中の場合、 B0 での状態遷移は行わない。その際にはアラームの停止ボタンとして機能する。
メインモード状態遷移表
2. 各モード状態遷移 - b. メインモード状態 6 32/
0 1
時計表示 0 S1
キッチンタイマ 1 S2
ストップウォッチ 2 S3
アラーム設定 3 S4
カレンダー・時刻調整 4 S0
要因 [E] ボタン0押下(AL非鳴動)
ボタン0押下(AL鳴動中)
状態 [S]
機能1
機能1
機能1
機能1
機能1
機能1 … アラーム鳴動を停止させる。
時間単位モードの状態として、アイドル状態とそれぞれの桁選択状態がある。
時間単位モードの状態は カレンダー 時刻調整モード、・キッチンタイマモード、アラーム設定モード で共通に使用する。上記以外のメインモードが選択中は常にアイドル状態となる。
時間単位モード状態遷移図
2. 各モード状態遷移 - c. 時間単位モード状態 7 32/
時間単位モードの状態切替には B1 を使用する。
時間単位の桁選択が発生しないメインモード選択中は時間単位モードは常にアイドル状態となる。
時間単位モード状態遷移表
2. 各モード状態遷移 - c. 時間単位モード状態 8 32/
共通 ※1
0 1 2 3
アイドル 0 S1 S5 -
1 - - S2 S0
2 - - S3 S0
月 3 - - S4 S0
日 4 - - S5 S0
時 5 - - S6 S0
分 6 - - S7 S0
秒 7 - - S0 S0
要因 [E] ボタン1押下… 選択メインモード(mm)で動作が異なる。
mm[カレンダー・時刻調整] mm[キッチンタイマ],mm[アラーム設定]
状態 [S]
年(yyxx)
年(xxyy)
※1 … mm[カレンダー・時刻調整], mm[キッチンタイマ], mm[アラーム設定]の状態以外。
時計表示モードとして、以下①~⑤の状態を持つ。
①時分表示(初期) 時計の時分を表示する。
②分秒表示 時計の分秒を表示する。
③年表示 時計の年を表示する。
④月日表示 時計の月日を表示する。
⑤曜日表示 時計の曜日を表示する。
時計表示モード状態遷移図
2. 各モード状態遷移 - d. 時計表示 9 32/
現在時刻を表すメインモード。
状態により、 7 セグ LED に対応した表示を行う。 ( 後述する )LCD には年月日、時分秒、曜日の全ての表示を常に行う。
時計表示モード状態遷移表
2. 各モード状態遷移 - d. 時計表示 10 32/
0
時分表示 0 S1
分秒表示 1 S2
年表示 2 S3
月日表示 3 S4
曜日表示 4 S0
※時間単位モードは常にアイドル
要因 [E] ボタン2押下
状態 [S]
設定した時分秒のダウンカウントするキッチンタイマ機能。設定は 23:59:59 まで設定可能。
時間単位モードのアイドル状態時にはサブモードの状態でダウンカウント、停止、リセットの状態で動作する。時間単位モードの選択状態では B2 がアップ、 B3 でダウンカウントする。
時計表示モード状態遷移表
2. 各モード状態遷移 - e. キッチンタイマ 11 32/
設定時刻になったら LED を点滅させ、ユーザに通知するアラームのアラーム設定を行うモード。
時間単位モードのアイドル状態時にB3 を押下することでアラーム ON/OFF を切り替える。時間単位モードの選択状態では B2 がアップ、 B3 でダウンカウントする。
2. 各モード状態遷移 - g. アラーム設定 12 32/
24 時間時計のカレンダー 時刻を調整するモード。・
時間単位モードのアイドル状態では時分の時計表示とする。時間単位モードの選択状態では B2 がアップ、 B3 でダウンカウントする。
時間単位モードの選択状態から抜けた段階の年月日時分秒が現在時刻として設定される。設定前の状態に戻すキャンセル処理は実装しない。
2. 各モード状態遷移 - h. カレンダー 時刻調整 ・
3. 表示制御 - a. 出力 LED
LED 出力割当
13 32/
LED では選択中のメインモードと、アラーム状態を表示する。 (LED2,1 は予約 )
LED7-3 までは選択中のメインモードを示す。 ( 選択モード部が点灯 )LED7 : 時計表示LED6 : キッチンタイマLED5 : ストップウォッチLED4 : アラーム設定LED3 : カレンダー 時刻調整・
LED0 はアラーム設定の現在状態 (ON= 点灯 /OFF= 消灯 ) を示す。また、アラーム通知時には当 LED が点滅してユーザに通知を行う。
3. 表示制御 - b. 出力 7 セグ LED
7 セグ LED 出力パターン (1/2)
表記内容
b
メインモード 汎用フラグ DP4 DP3 DP2 DP1
- Hx ● xH ● Mx ● xM (1)
- "2"(0.5) ● 2Yxx(0.5) ● 2xYx ● 2xxY ●
- "2" ● 2Yxx ● 2xYx(0.5) ● 2xxY(0.5) ●
- Mx(0.5) ● xM(0.5) ○ dx ● xd ●
- Mx ● xM ○ dx(0.5) ● xd(0.5) ●
- Hx(0.5) ● xH(0.5) ● mx ● xm ○
- Hx ● xH ● mx(0.5) ● xm(0.5) ○
- mx ● xm ○ sx(0.5) ● xs(0.5) ●
時計表示
時分表示 - Hx ● xH ● mx ● xm (1)
分秒表示 - mx ● xm (1) sx ● xs ●
年表示 - "2" ● 2Yxx ● 2xYx ● 2xxY ●
月日表示 - Mx ● xM ○ dx ● xd ●
曜日表示 - ● ※1 ● ※1 ● ※1 W ●
○:点灯, (x):点滅x秒, ●:消灯
HH:時, mm:分, ss:秒, ff:1/100秒, 2YYY:2YYY年, MM:月, dd:日, Nx:N部2桁目, xN:N部1桁目
L-NN:ラップタイマN部, "x"...固定値x, W:曜日(0:日~6:土), ddd:曜日(Sun:日~Sat:土)
※1... 曜日表示(0~6)を、DP4~2をビットに見立て表示する。例)月曜(1):{DP4~2:●●○}, 土曜(6):{DP4~2:○○○}など
LED出力判定条件 7セグLED
[時間単位]/サブモード 4桁目 3桁目 2桁目 1桁目
カレンダー・時刻調整
[アイドル]
[年(YYxx)]
[年(xxYY)]
[月]
[日]
[時]
[分]
[秒]
14 32/
7 セグ LED の表示制御は各モード状態、フラグで行う。
3. 表示制御 - b. 出力 7 セグ LED
メインモード 汎用フラグ DP4 DP3 DP2 DP1
キッチンタイマ
"0"(0.5) ● "0"(0.5) ● "0"(0.5) ● "0"(0.5) ●
"0" ● "0" ● "0" ● "0" ●
- Hx(0.5) ● xH(0.5) ● mx ● xm ○
- Hx ● xH ● mx(0.5) ● xm(0.5) ○
- mx ● xm ● sx(0.5) ● xs(0.5) ●
(Hx | xH)!=0 Hx ● xH ● mx ● xm ○
(Hx | xH)==0 mx ● xm ○ sx ● xs ●
(Hx | xH)!=0 Hx ● xH ● mx ● xm (0.5)
(Hx | xH)==0 mx ● xm (0.5) sx ● xs ●
ストップウォッチ
リセット状態 - "0" ● "0" ○ "0" ● "0" ●
カウントアップ - sx ● xs ○ fx ● xf ●
ラップ状態 - L-sx ● L-xs (0.5) L-fx ● L-xf ●
停止 - sx ● xs ○ fx ● xf ●
アラーム設定
"o" ● "n" ● ● ● ● ●
"o" ● "f" ● "f" ● ● ●
- Hx(0.5) ● xH(0.5) ● mx ● xm ○
- Hx ● xH ● mx(0.5) ● xm(0.5) ○
- mx ● xm ○ sx(0.5) ● xs(0.5) ●
LED出力判定条件 7セグLED
[時間単位]/サブモード 4桁目 3桁目 2桁目 1桁目
[アイドル]リセット状態
カウントゼロ=ON
カウントゼロ=OFF
[時]
[分]
[秒]
[アイドル]停止
[アイドル]カウントダウン
[アイドル]
ON/OFFフラグ=ON
ON/OFFフラグ=OFF
[時]
[分]
[秒]
15 32/
7 セグ LED 出力パターン (2/2)
3. 表示制御 - b. 出力 7 セグ LED
7 セグ LED 表示サンプル
時分表示 0 .7 .:5 .8 . 年表示 2 .0 .:1 .1 .分秒表示 5 .8 .:1 .2 . 月日表示 0 .9 .:2 .6 .
曜日表示 . .: .1 .
0 .7 .:5 .8 . 0 .7 .: . .アラーム設定
o .n .: . . o .f .: f . .
時計表示 (2011/09/26 月曜 07:58:12)
カレンダー・時刻調整 (フリッカ動作)
[分]選択
←→0.5秒間隔で繰り返し
[分]選択
アラームON
アラームOFF
16 32/
3. 表示制御 - c. 出力 LCD(16x2 行 )
LCD 出力パターン (1/3)
メインモード 汎用フラグ 0 1 2 3 4 5 6 7 8 9 A B C D E F
メインモード基本形
- -1 "C" "G" ">" - - - Hx xH ":" mx xm "." sx xs - -
2 - "2" 2Yxx 2xYx 2xxY "/" Mx xM "/" dx xd - xdd dxd ddx -
サブモード変更内容
- - 変化なし
-1
2 (0.5) (0.5)
-1
2 (0.5) (0.5)
-1
2 (0.5) (0.5)
-1
2 (0.5) (0.5)
-1 (0.5) (0.5)
2
-1 (0.5) (0.5)
2
-1 (0.5) (0.5)
2
時計表示
メインモード基本形
- -1 "C" "K" ">" - - - Hx xH ":" mx xm "." sx xs - -
2 - "2" 2Yxx 2xYx 2xxY "/" Mx xM "/" dx xd - xdd dxd ddx -
サブモード変更内容
時分表示 - - 変化なし
分秒表示 - - 変化なし
年表示 - - 変化なし
月日表示 - - 変化なし
曜日表示 - - 変化なし
LCD出力判定条件 LCD (16x2行)
[時間単位]/サブモード
カレンダー・時刻調整
[アイドル]
[年(YYxx)]
[年(xxYY)]
[月]
[日]
[時]
[分]
[秒]
17 32/
LCD の表示制御は各モード状態、フラグで行う。
3. 表示制御 - c. 出力 LCD(16x2 行 )
メインモード 汎用フラグ 0 1 2 3 4 5 6 7 8 9 A B C D E F
キッチンタイマ
メインモード基本形
- -1 "K" "T" ">" - - - Hx xH ":" mx xm "." sx xs - -
2 - - - - - - - - - - - - - - - -
サブモード変更内容
1 (0.5) (0.5) (0.5) (0.5) (0.5) (0.5) (0.5) (0.5)
2 "R" "e" "s" "e" "t"
1 "0" "0" "0" "0" "0" "0"
2 "R" "e" "s" "e" "t"
-1 (0.5) (0.5)
2
-1 (0.5) (0.5)
2
-1 (0.5) (0.5)
2
-1
2 "S" "t" "o" "p"
-1
2 "R" "u" "n"
ストップウォッチ
メインモード基本形
- -1 "S" "W" ">" - - - sx xs "." fx xf - -
2 - - - - - "L" "A" "P" - L-sx L-xs "." L-fx L-xf - -
サブモード変更内容
リセット状態 -1 "0" "0" "0" "0"
2
カウントアップ -1
2 "R"
ラップ状態 -1
2 "R" (0.5) (0.5) (0.5)
停止 -1
2 "S"
LCD出力判定条件 LCD (16x2行)
[時間単位]/サブモード
[アイドル]リセット状態
カウントゼロ=ON
カウントゼロ=OFF
[時]
[分]
[秒]
[アイドル]停止
[アイドル]カウントダウン
18 32/
LCD 出力パターン (2/3)
3. 表示制御 - c. 出力 LCD(16x2 行 )
メインモード 汎用フラグ 0 1 2 3 4 5 6 7 8 9 A B C D E F
アラーム設定
メインモード基本形
- -1 "A" "L" ">" - - - Hx xH ":" mx xm "." sx xs - -
2 - - - - - - - - - - - - - - - -
サブモード変更内容
- - 変化なし
-1 (0.5) (0.5)
2
-1 (0.5) (0.5)
2
-1 (0.5) (0.5)
2
-
1
2 "o" "n"
1
2 "o" "f" "f"
LCD出力判定条件 LCD (16x2行)
[時間単位]/サブモード
[アイドル]
[時]
[分]
[秒]
ON/OFFフラグ=ON
ON/OFFフラグ=OFF
LCD 出力パターン (3/3)
3. 表示制御 - c. 出力 LCD(16x2 行 )
LCD 表示サンプル
カレンダー・時刻調整時計表示 (2011/09/26 月曜 07:58:12)
CK> 07: 58: 12 2011/ 09/ 26 Mon
CG> 07: 58: 12 2011/ 09/ 26 Mon
キッチンタイマ (停止状態) ストップウォッチ (カウントアップ)
KT> 00: 20: 00 St op
SW> 48. 09 R LAP 12. 84
アラーム設定 (アラームOFF)
AL> 12: 48: 09 of f
20 32/
4. 回路図説明 (Schematic) - a. 全体回路図 21 32/
4. 回路図説明 (Schematic) - b. 各モジュール
□考慮したことシーケンサ状態を複数モジュールに持たせると、管理や・
モジュール間の配線が煩雑になると考え、シーケンサ状態は 一つのモジュール (STATE_TRANS) で持たせ管理するようにした。
状態遷移と関連が分かるようメインモード毎のモジュールを・ 用意した。内部カウンタを持ち、状態により変化させる。
関連のあるカウンタはバスに纏めるなど配線を少なくした。・
入出力デバイスが直接繋がるモジュールは余計な処理を極力・ 行わないようにした。(信号生成や、受け取った値の表示程度)
□出来上がった回路 (結果 )なるたけ複雑にならないよう考慮して回路設計した甲斐があり、・
一目で見て分かりやすい回路になったと思われる。
回路図の設計に当たって考慮したこと
22 32/
4. 回路図説明 (Schematic) - b. 各モジュール
各モジュールが動作するために必要な信号( イネーブル信号 ) と、 LED や LCD の点滅表示を行うため一定周期で H/L を繰り返す信号( フリッカ信号 ) の生成を行う。
入力信号 ・ iCLK / クロック
出力信号 ・ oENA_10ms / 1/100 秒 イネーブル …ストップウォッチ用 ・ oENA_1sec / 1 秒 イネーブル …時計、キッチンタイマ用 ・ oENA_kHz / kHz イネーブル …チャタリング対策・ 7 セグ表示用 ・ oFLK_500ms / 0.5 秒 フリッカ …点滅用 ・ oFLK_1sec / 1 秒 フリッカ …点滅用
クロックを基に、上記イネーブル信号 フリッカ信号を生成する。・
① ENAFLK_GEN / イネーブル フリッカ信号生成・
23 32/
4. 回路図説明 (Schematic) - b. 各モジュール
<桁上げ信号受け渡し イネーブル生成>・クロック→・ 50万進カウンタ→ 1/100 秒イネーブル
→ 100進カウンタ→ 1 秒イネーブル・ 50万進カウンタ [14:0] → kHz イネーブル
<フリッカ生成>・ 0.5 秒フリッカ: 100進カウンタが 0-49 の間 H 、以外は L を出力・ 1 秒フリッカ: 1 秒イネーブルが H になるたび信号を反転出力
① ENAFLK_GEN / イネーブル フリッカ信号生成・
XOR
'd 4999999iCLK
oENA_10ms
oENA_kHz
F/F
oENA_1sec
oFLK_500ms
oFLK_1sec500000進カウンタ(10ms)
==
'h 7fff
==
100進カウンタ(1sec)
==
'd 99
>
'd50
カウンタ
[14:
0]
24 32/
4. 回路図説明 (Schematic) - b. 各モジュール
本時計で使用するボタン B0-B3 がソフト側で適切に使用出来るようフィルタリング処理を行う。 ⅰ. メタステーブル対策 ⅱ. チャタリング防止 ⅲ.立ち上がり検出
入力信号 ・ iCLK / クロック ・ iENA_kHz / kHz イネーブル ・ iSW_IN / スイッチ入力 … B0-B3 を割当
出力信号 ・ oCHAT / チャタリング防止済スイッチ入力 ・ oUEDGE/ 立ち上がり検出スイッチ入力
② CLOCK_SW / 時計使用スイッチ入力フィルタリング
メタステーブル対策とは 入力をクロックに合わせるため、通常は F/F 回路を入力前に入れる。その際、F/F 回路の Setup/Hold 時間に入力が来てしまうと出力が不定値となってしまう。そこで出力に F/F 回路をもう 1 段挟むことで Setup/Hold 時間の入力を回避する対策。
25 32/
4. 回路図説明 (Schematic) - b. 各モジュール
本時計の心臓部となるモジュール。各モードの状態遷移 ( メインモード、サブモード、時間単位モード ) 、各フラグ状態を管理する。
入力信号 ・ iCLK / クロック ・ iENA_1sec / 1 秒 イネーブル ・ iBTN / ボタン B0-B3 ・ iKT_TIME0 / キッチンタイマ カウンタゼロ ・ iAL_ON / アラーム設定 ON/OFF フラグ ・ iOA_RUN / アラーム出力 鳴動中フラグ
出力信号 ・ oMAIN_MODE / メインモード状態 ・ oSUB_MODE / サブモード状態 ・ oTIMU_MODE / 時間単位モード状態 ・ oST_LED / ステータス LED 出力 ・ oALARM / アラーム設定 ON/OFF フラグ (有効 ) ・ oMDFLAG / 選択モード汎用フラグ
③ STATE_TRANS / 状態遷移管理
26 32/
4. 回路図説明 (Schematic) - b. 各モジュール
<各モード状態管理>「・ 2. 各モード状態遷移」で記述している状態を表す。選択中の各モード状態はメインモードで・ oMAIN_MODE 、サブ モー
ドで oSUB_MODE 、時間単位モード oTIMU_MODE に記憶させる。
<入力フラグ( iKT_TIME0, iAL_ON, iOA_RUN )>本モジュールは各モードで使用のカウンタ管理は行っていない。・
カウンタ関連フラグの制御は出来ないので、外部より貰う。
<選択モード汎用フラグ( oMDFLAG )>選択メインモードに対応した入力フラグの値を出力する。・
キッチンタイマ: iKT_TIME0アラーム設定: iAL_ON上記以外: GND(1'b0)
③ STATE_TRANS / 状態遷移管理
MU
X
iKT_TIME0
iAL_ON
GND
oMAIN_MODE
oMDFLAG
27 32/
4. 回路図説明 (Schematic) - b. 各モジュール
各メインモードに対応したカウンタを持つ。STATE_TRANS モジュールからの入力である各モード状態、ボタン入力などを基にカウンタ値の制御処理を行う。また、カウンタ値に左右されるフラグの出力を行う。
④ MD_xxxxxx / メインモード対応モジュール
28 32/
4. 回路図説明 (Schematic) - b. 各モジュール
出力デバイスを制御する。( 左からアラーム LED 、 LCD 、 7 セグ LED)
STATE_TRANS モジュールからの入力である各モード状態、フラグと、各モード用のカウンタ値を基に出力デバイスの制御を行う。
⑤ OUT_xxxxxx / 出力デバイス制御モジュール
29 32/
■各メインモードの動作処理カレンダー 時刻調整・ :作成済、テスト済時計表示 :作成済、テスト済キッチンタイマ :作成済、テスト未完ストップウォッチ :作成済、テスト未完アラーム設定 :作成済、テスト未完
■出力デバイスの表示 制御処理・LED :作成済、テスト済7 セグメント LED :作成済、テスト済LCD (16x2 行 ) :作成済、テスト済VGA :未着手
■課題・ VGA 出力機能の仕様設定、ソース作成テストの効率化 ・ (modelSim の操作を熟知する )
5. まとめ - a. 作成状況 30 32/
■各メインモードの動作処理カレンダー 時刻調整・ :作成済、テスト済時計表示 :作成済、テスト済キッチンタイマ :作成済、テスト未完ストップウォッチ :作成済、テスト未完アラーム設定 :作成済、テスト未完
■出力デバイスの表示 制御処理・LED :作成済、テスト済7 セグメント LED :作成済、テスト済LCD (16x2 行 ) :作成済、テスト済VGA :未着手
■課題・ VGA 出力機能の仕様設定、ソース作成テストの効率化 ・ (modelSim の操作を熟知する )
5. まとめ - a. 作成状況 31 32/
5. まとめ - b. 思ったこと 反省点など・32 32/
●思ったこと・ Verilog-HDL と C言語の違い。 文法上の構文などは似ているが、⇒ Verilog-HDL はハード、 C言語はソフトという認識を持ち 全く異なる思想でコーディングを行うべきだと痛感した。
●反省点、今後の課題テストをもっとするべきだった。・
開発当初、テストベンチの記述が面倒で実機による動作確認を⇒ 行っていた。結果的にバグに悩まされ時間を浪費してしまった。 設計に時間をかけるべきだった。・
⇒ Verilog-HDLソース記述に慣れておらず、コーディングを 早く行いたいという気持ちから設計が疎かになった。 結果、コーディング後に設計に戻る形になってしまった。