TEL:086-227-0113
info@gopher-tec.jp
TOP page 製品情報 FPGAサンプルコードリポジトリ Event Relaxation Timer
Event Relaxation Timer

アップ時とダウン時とでカウントレートの異なるプログレッシブレートカウンタを応用した、
イベントリラクゼーションタイマのサンプルコードです。発生するイベントをその都度伝えるのではなく、
ある頻度を超えて発生した場合にのみ通知する、フィルタ的動作が必要な場合に使用されます。
(このコードの場合、イベント数を計数するというよりも時間を計測する意味合いが強いことから、
以降、カウンタではなくタイマと呼んでいます)

本タイマはTIMER_ENがHiの間だけ有効です。CLKの立ち上がりでEVENT_Iをサンプリングし、
Hi(=イベントあり)であれば内部のタイマを1つ進めます。EVENT_Iが連続してHiであれば、
内部のタイマも連続してインクリメントしていきます。また、EVENT_IがLo(=イベントなし)になると、
インクリメント時のカウントレートの1/2Nのレートで内部のタイマをデクリメントしていきます。
こうしてアップ・ダウンするタイマ値が2Mだけ累積すると、タイマがキャリー出力を生成し、EVENT_O
がHiとなって保持されます(M、Nについては信号一覧参照)。この状態はEVENT_Iが変化しても
変わらず、TIMER_EN をLoにするまで保持されたままとなります。

タイマ値を1つ進めるためのEVENT_I=Hiの検出が1CLK期間であるのに対し、それを解消、つまり
タイマ値を1つ戻すためのEVENT_I=Loの検出は2NCLK期間必要であることに注意して下さい。
これによってデューティ1/2N未満のイベントは計測キャンセル(都度解消)され、タイマ値に
累積されません。一方、デューティ1/2N以上で発生するイベントは、キャンセルされる前に次の
イベントが発生するため、徐々にタイマ値に累積されていきます。高デューティなイベントが
繰り返し発生し、タイマ値が2Mに到達すると、EVENT_O出力がHi となってイベントのフィルタ通過
を知らせます。

低中レベルの過電流検出や電圧低下検出、ファンの速度低下アラーム等、発生頻度がある程度
増えるまで通知を抑制可能なイベントのフィルタリングに最適です。用途に応じてMとNを適切に
設定してご使用下さい。

Name I/O  Description 
RST in 非同期リセット入力です。パワーオン時、またはシステムリセット時にアサートして下さい。
CLK
in クロック入力です。本モジュール内部と入出力信号はCLKの立ち上がりエッジで動作します。
TIMER_EN in Hiにすると本タイマの機能が有効となります。Loにすると内部タイマと出力が初期値に
戻ります。
EVENT_I in Hiにするとイベントあり、Loにするとイベントなしの意です。
EVENT_O out リラクゼーションタイマによるフィルタ通過後のイベント出力です。
イベントあり時にはHiとなり、TIMER_ENをLoにするまでラッチされたままとなります。
TIME_LMT
(integer)
Param モジュール内パラメータ(VHDL版ではgeneric port)で、上記のMに相当します。
例えばM=10ではタイマ値が210=1024となった際にEVENT_Oをアサートします。
DUTY_LMT
(integer)
Param モジュール内パラメータ(VHDL版ではgeneric port)で、上記のNに相当します。
例えばN=3ではデューティ1/23=12.5%未満のイベントを無視、それ以上を計測します。
※特に注記のない限り、信号は全て正論理です。
本ソースコードはVerilog/VHDL-2008を用意しています。
詳細は下記の資料ダウンロードをクリックください。

Event Relaxation Timer
資料ダウンロード