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