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を適切に
設定してご使用下さい。
イベントリラクゼーションタイマのサンプルコードです。発生するイベントをその都度伝えるのではなく、
ある頻度を超えて発生した場合にのみ通知する、フィルタ的動作が必要な場合に使用されます。
(このコードの場合、イベント数を計数するというよりも時間を計測する意味合いが強いことから、
以降、カウンタではなくタイマと呼んでいます)
本タイマは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を適切に
設定してご使用下さい。
※特に注記のない限り、信号は全て正論理です。
本ソースコードはVerilog/VHDL-2008を用意しています。
詳細は下記の資料ダウンロードをクリックください。
詳細は下記の資料ダウンロードをクリックください。