1.はじめに
通常ディジタル回路ではシステムクロック(以下クロック)をベースに動作するのでクロックが停止するとシステムがダウンします。
従ってクロックの停止を監視し、クロックが停止したらフェイルセーフとなる様なエラー処理を行なうのが一般的です。
クロック監視方法で良く見かけるのは図1の様に、例えばHC123の様なリトリガラブルワンショットタイマを被監視クロックCLKで常時リトリガするものです。
その為にはコンデンサ、抵抗等が必要で、検出時間はC,Rの定数に依るのでバラツキ大です。
また、この種のICはアナログ系に属し、ディジタル回路内で使用するのはスマートとは言い難いものです。
クリックで拡大
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 が立ちます。
クリックで拡大
(2)clk0 停止動作部拡大
クリックで拡大
(2)clk1 停止動作部拡大
クリックで拡大
以上。