183

回路記述の例として，第 2 章で紹介した電子錠の拡張を行ってみます．実用的にするため，「暗証番号を設定できるメモリ機能」，「7 セグメント LED による表示機能」などを追加しました．そして汎用の FPGA ボードを用いて，この回路を実現してみました．

第 2 章で紹介した電子錠は暗証番号が決まっていたので，実用性はありませんでした．実際の電子錠は，利用開始時に暗証番号を設定でき，また入力確認のための表示機能も付いています．
●全体構成
図 8.1 に拡張版電子錠の仕様を示します．10 個の数値キーのほかに，暗証番号記憶キー（MEM）と，施錠のためのキー（CLS）があります．実際の電子錠では，施錠キーが扉の開閉ノブと連動しているものもあります．また，7 セグメント表示は 5 けたあり，
キー入力による数値
錠の状態を表示します．
●操作仕様
暗証番号の設定は，リセット後の初期状態でのみ行えます．一度設定すると，施錠と開錠しかできません．したがって，勝手に暗証番号を変えて開錠することはできません．リセット・スイッチは扉の内側にあり，開錠しているときしかリセットできないこととします．
操作仕様を図 8.1（b）に示します．初期状態では −−−− を表示し，キー入力を待ちます．キー入力があれば，右のけたから電卓のようにシフトしながら表示します．最後に入力した 4 けたを表示して，超えた分は順次消えます．なお，4 秒間入力がないと表示をすべて −−−− にして，初期状態に戻ります．4 けた入力後，4 秒以内に MEM キーを押せば，暗証番号を設定して開錠状態（ OPEN 表示）になります． N は小文字の n の形で代用します．
CLS キーにより施錠し， CLOSE を表示します．アルファベットの O と S は，数字の 0 と184

第 8 章 電子錠の拡張

図 8.1
拡張版電子錠の仕様

7セグメントLED表示

¡初期状態

4
秒
間
無
入
力

¡記憶用暗証番号を入力中
MEM

7

8

9

CLS

4

5

6

0

1

2

3

5

9

6

¡記憶用暗証番号4けたを入力
3テン・キー（a）操作パネル¡暗証番号を記憶
MEM
¡施錠
4
秒
間
無
入
力

CLS
¡開錠用暗証番号を入力中
5

9

6

開
錠

¡暗証番号4けた目を入力し，一致
30.5秒間点滅（b）キー入力と表示

5 と同じセグメントを点灯しています．開錠のために暗証番号を入力し，最後に入力した 4 けたが一致すれば，全けたを 0.5 秒間点滅し，開錠します．暗証番号入力中に 4 秒間入力がないと，入力した値は捨てられ，施錠直後の状態になります．
●設計仕様
設計仕様を図 8.2 に示します．端子機能（図 8.2（a））は，第 2 章の回路から大幅に追加しています．
テンキーは独立したスイッチではなく，3 行 4 列のマトリックスの交点を ON/OFF する構成になっています．したがって，12 個のキーに対して，3 ビットの出力 rowout と 4 ビットの入力 colin を接続します．7 セグメント表示は，ダイナミック点灯方式を用いています．5 けたの表示に対して，7 ビットの segment と 5 ビットの common を接続しています．
供給するクロック orgclk は 49.195MHz です．また，リセット入力 reset は，内部の全フリップフ
ロップ（FF）に接続した非同期リセット信号です．回路の初期化のためだけに使います．
なお，すべての信号はハイ・アクティブ（ 1 で動作）としました．
●ブロック構成
本回路は四つのブロックから構成されています（図 8.2（b））．最終的に FPGA ボードで動作を確認しましたが，ほかのボードに移植することを考慮して，以下のように回路ブロックを構成しました．
電子錠本体（elelock）
クロック生成部（clkgen）
キー入力部（keyscan）

8.2 クロック生成部

図 8.2

拡張版電子錠の設計仕様
信号名

方向

機 能

信号名

方向

機 能

orgclk入力 クロック（49.152MHz）

common[5:0]

出力 7セグメント表示のコモン

reset

入力 リセット

segment[6:0] 出力 7セグメント表示のセグメント

colin[3:0]

入力 キー・マトリックス入力

sw[2:0]

入力 テスト用スイッチ入力

rowout[2:0]

出力 キー・マトリックス出力

state[2:0]

出力 テスト用ステート出力lock

出力 電子錠出力

regout[3:0]

出力 テスト用レジスタ出力（a）端子機能
最上位階層
elelock_top
クロック生成部
clkgenorgclkreset

電子錠本体
elelock

lock

hz512

orgclk
reset
ck

hz32
ck
hz32

キー入力部
keyscanck hz32
keycode

4

dig0

4

dig0

dig1

4

dig1

dig2

4

dig2

dig3

4

dig4

4

dispen5

keyenblkeyenblrowout

colin

reset

3

4

rowoutcolin

表示部
display
segment

7

7セグメントLEDsegment

dig3

common5commondig4

hz32

dispen

hz512

reset

ck

keycodereset

キー・マトリックス入出力

lock

state
regout
sw
5

ck

4

hz512
hz32

3

sw
regout state
トグル・スイッチ
単体LED（テスト用）（テスト用）（b）ブロック図

表示部（display）●テスト用入出力
FPGA ボードに接続されているトグル・スイッチと単体の LED を使って，テスト用の入出力を追加しました．内部レジスタやステート・レジスタの表示に使っています．

クロック生成部では，FPGA ボード上で供給されているクロック（49.192MHz）を分周して，本回路のシステム・クロックである 32,768Hz を作成しています．回路動作としては 500Hz 程度の周波数で十分ですが，ディジタル・ウォッチなどで多用されているこの周波数を選びました．
●回路構成と HDL 記述
ブロック図とタイミング・チャートを図 8.3 に示します．ボード上のクロック 49.195MHz を 750 分

185

186

第 8 章 電子錠の拡張

図 8.3
クロック生成部（clkgen）

デューティ比50％
orgclk（49.152MHz）

1
750

1
2

1
64
1
1024

ck
（32,768Hz）

FF

hz512
（512Hz） ck1周期分のパルス
hz32（32Hz）（a）ブロック図
ck（32,768Hz）
hz512（512Hz）
hz32（32Hz）（b）タイミング・チャート

周および2 分周して，デューティ比が50%の32,768Hz を得ています．さらに，各ブロックで使う512Hzと 32Hz の信号を作成しています．これらの信号は，システム・クロック ck の 1 周期分のパルスです．
本回路は同期回路システムで設計するので，各種制御信号はすべて，システム・クロックの 1 周期のパルスとします（図 8.3（b））．
記述をリスト 8.1 に示します．10 ビットのカウンタ cnt で，初段の 750 分周を行っています．さらにこれを 2 分周して，デューティ比が 50%のシステム・クロック ck を作成しています．システム・ク
ロックを作成するまでの順序回路では，ボードのクロック（orgclk ： 49.152MHz）をクロックとして記述しています．その後のカウンタでは，システム・クロック ck をクロックとしています．記述のうえでは always 文のイベント式に記述した信号名の違いでしかありませんが，回路構成上は大きな差があります．どちらのクロックで駆動しているかは重要です．

マトリックス構成のキー回路を制御して，キー・コードとキー入力検出信号を得る回路です．多くのキー入力を必要とする場合，配線本数を減らすためにマトリックス方式のキー入力回路を用います．
キー入力を行単位または列単位で順次読み取ることで，すべてのキーの状態を認識することができます．
●キー・マトリックスの回路
本回路で必要なキーは 12 個ですが，実現する FPGA ボードには，4 × 4 の 16 個のキーが格子状に並んで接続されています（図 8.4）．nCOLIN1 〜 nCOLIN4 の 4 ビットに，1 行分の 4 個のキー状態を読み出せます．読み出す行を指定するのが nROWOUT1 〜 nROWOUT4 です．この信号を順番に 0 にし，それに合わせて nCOLIN1 〜 nCOLIN4 を読み出すことで，16 個のキーの状態を判別できます．この動作をキー・スキャンと呼びます．なお，回路に含まれるダイオードは，nROWOUT を駆動するバッファのショートを防ぐために入れてあります．これがない場合，上下方向のキーを同時に押したときにバッファの出
力間がショートして，過大電流が流れる危険があります．