プレゼン資料

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 ソース記述に慣れておらず、コーディングを
早く行いたいという気持ちから設計が疎かになった。
結果、コーディング後に設計に戻る形になってしまった。