デジタル回路のスイッチ入力

デジタル回路のスイッチ入力

 スイッチ入力の回路を仕上げます。これまでのリンクを以下に貼っておきますので、各々の理解を深めてください。

 改めてブロック図を示します。

 今回は上記ブロック図のように各ブロックを接続して1つの親を作ります。

 今回の回路を設計する上で、FPGAの設計としては3つの重要な考え方をお伝えできれば成功だと思っています。

  1. クロック同期化(メタステーブル対策)
  2. 同期カウンタの設計
  3. 同期微分

 この3つの設計方法はFPGAでデジタル回路設計を学ぶにあたり、非常に重要な設計手法です。しかも、すべて同期設計で行う。という事が重要です。わざわざ非同期設計の例を挙げていませんので、必然的に同期設計が身につくことでしょう。

 今回解説するのは同期微分を二重につかう。という部分です。同期微分はクロックの幅の微分波形を生成する回路ですが、10msecでイネーブルをかけると、10msecの幅のパルスができてしまいます。

 上記のブロック図の「同期微分」の部分は、二重に同期微分回路を形成しています。この様子を図示すると次のようになります。

 「同期微分1回目」の出力である、10msecのパルスでも10MHzに同期していますので、そのまま使うこともできますが、せっかくだから10MHzの1パルスにしたいので、同期微分を今度はイネーブル無しで行って、10MHzのパルス幅に成形している。という事です。

 どちらかというと、同期微分の回路は「同期微分1回目」の使い方よりも、「同期微分2回目」のようにFPGAのクロック1パルス分を作る回路としての役割の方が多いと思います。(これを伝えたかったので、わざわざ二重に使っています)

 デジタル回路設計が思うようにできない。という人は、どんな信号が要所要所でほしいのか。という事が想像できていないと思います。上のようにブロック図を描いて、その入力信号はどんな幅なのか、どんなタイミングなのかを理解し、それに対する出力信号を描いてください。

 ベテランのエンジニアでも普通はブロック図無しでは設計しません。回路規模が大きくなればなるほど、ブロック図の重要性が増します。

 さて、今回冒頭に説明したように3つの重要な回路を説明する方法として、スイッチの読み取りを解説しましたが、スイッチをFPGAに取り込むにあたり、おそらく一番多い回路はスイッチを押している時間を測る。という方法だと思います。スイッチのチャタリングはFPGA外部のCRフィルタで概ね除去しておき、FPGAの入力ピンではシュミットトリガで受ける。受けた後はカウンタのスタートにいれておいて、カウンタを起動させる。という方法です。

 この方法にしても、スイッチ動作の時間概念というのは変わりありません。ただし、これは「デジタル回路へのスイッチ入力の波形解析」で波形をオシロスコープで解析したことが基本になっていますので、今回使ったスイッチと私の操作スピードです。実際には、本設計が終わってみてから、「操作感」というのはいろいろな人で操作してみて、製品の使い方にマッチしているのかを確認する作業を怠るわけにはいきません。

 せっかくスイッチを扱うので、静電気に関する記述をしましたが、初心者には難しかったかもしれません。しかし、製品を安定に動作させる。という点では実際の製品を扱うユーザーにとってベテランが設計したのか、ビギナーが設計したのか。というのは関係ありません。製品となる以上、会社の看板を背負ってリリースするのですから、ビギナーでも安定動作に関する知識を増やすきっかけになればと思います。