FPGAやCPLDに実装可能な

カウンタによるクロック監視回路

(改訂C 2016/2/29)


1.はじめに
 通常ディジタル回路ではシステムクロック(以下クロック)をベースに動作するのでクロックが停止するとシステムがダウンします。
 従ってクロックの停止を監視し、クロックが停止したらフェイルセーフとなる様なエラー処理を行なうのが一般的です。

 クロック監視方法で良く見かけるのは図1の様に、例えばHC123の様なリトリガラブルワンショットタイマを被監視クロックCLKで常時リトリガするものです。
 その為にはコンデンサ、抵抗等が必要で、検出時間はC,Rの定数に依るのでバラツキ大です。

 また、この種のICはアナログ系に属し、ディジタル回路内で使用するのはスマートとは言い難いものです。
図1クリックで拡大



2.カウンタによるクロック監視回路
 クロック源(発振器)を異にしたクロックが2系統以上ある場合はカウンタを用いてクロック相互に監視する図2の方法があります。
 これにより上記回路の欠点を解決できます。
図2クリックで拡大


 CLK2でCLK1を監視するには、CLK2で歩進する2個のカウンタを用意し、一方はCLK1でクリアし、他方はCLK1を反転させた/CLK1でクリアします。
 さらに監視時間に見合ったカウンタのタップでDFFをセットする様にします。
 CLK1が停止すると何れかのカウンタタップが'H'になってDFFがセットされ、クロック停止信号CLK1_STOPが'H'になります。

 同様にしてCLK1でCLK2の監視ができます。


3.VHDL ソース
 図2の回路をディスクリート素子で組むと素子が多くメリットが薄れますが、CPLDやFPGAを使用している場合はそれらに間借りすれば事実上 クロック監視回路の為の必要部品はゼロになります。

 一例として clk0 と clk1 で相互監視する場合の VHDL での記述例とシミュレーション用テストベンチをダウンロード のページからダウンロードできます。
 同ソースはあくまでも基本形であり、実回路へ応用する際は、同期回路化、クロック周波数の最適化(分周)、監視時間(クロック数)の最適化、 ホールド信号のクリア信号追加等、種々のカスタマイズが考えられます。

 また、同ソースは ASIAN記法で記述しているので、ASIAN記法の使用例にもなっています。

 なお、当社はソースについての責任を負えません。応用する場合は応用者の責任で行なって下さい。

 以下に ModelSim ALTERA STARTER EDITION 10.1e Revision: 2013.06 (ALTERA)によるシミュレーション結果を示します。

(1)全体
 clk0が 16監視クロック間以上停止するとエラー a_clk_down0、 ah_clk_down0 が立ちます。

 同様に clk1 が 32監視クロック間以上停止するとエラー a_clk_down1、 ah_clk_down1 が立ちます。

シミュレーション図1クリックで拡大


(2)clk0 停止動作部拡大

シミュレーション図2クリックで拡大


(2)clk1 停止動作部拡大

シミュレーション図2クリックで拡大


 以上。

−−−−− 本ページはここまで −−−−−