
デジタルエレクトロニクスにおいて、カウンタはクロック信号の正または負の遷移の数をカウントして記憶する順序論理回路です。[ 1 ]カウンタは通常、現在のカウントを表す値を記憶するフリップフロップと、多くの場合、特定のカウントシーケンスを実行したり、クロックを検証したり、その他の機能を実行したりするための追加のロジックで構成されています。関連するクロック遷移ごとに、現在のカウントが増加または減少します(1ずつ増加または減少します)。
デジタルカウンタは有限状態機械であり、[ 2 ]クロック入力信号と、状態をまとめて表す複数の出力信号を備えています。状態は現在のカウントを示し、バイナリまたはバイナリ符号化十進数(BCD)として直接エンコードされるか、ワンホットやグレイコードなどのエンコードが使用されます。ほとんどのカウンタには、カウントを初期化するために使用されるリセット入力があります。設計によっては、カウンタはカウントの有効化や並列データロードなどの機能を制御するための追加の入力を持つ場合があります。
デジタルカウンタは、モジュラスや出力エンコーディングなどの属性、データプリロードや双方向(アップカウントとダウンカウント)カウントなどの付加機能など、さまざまな方法で分類されます。すべてのカウンタは、同期式か非同期式かのいずれかに分類されます。リングカウンタやジョンソンカウンタなど、一部のカウンタは、独自のアーキテクチャに基づいて分類されます。
カウンタは最も一般的に使用される順序回路であり[ 2 ]、コンピュータ、計測および制御、デバイスインターフェース、その他のアプリケーションで広く使用されています。これらはスタンドアロンの集積回路として、またマイクロコントローラやFPGAなどのより大規模な集積回路のコンポーネントとして実装されています。
電子カウンタは、クロック信号と、整数値の「カウント」を表す出力信号群を備えた順序論理回路です。クロックのエッジが満たされるたびに、回路は格納されているカウントをインクリメント(または回路設計によってはデクリメント)します。カウントがカウントシーケンスの終わりに達すると(インクリメントの場合は最大カウント、デクリメントの場合はゼロカウント)、次のクロックによってカウントがオーバーフローまたはアンダーフローし、カウントシーケンスが最初からやり直されます。この現象は一般的にロールオーバーと呼ばれます。

すべてのカウンタには、ステートマシンに共通する基本的な信号群があります。
クロックとリセットに加えて、多くのカウンタは次のような他の入力信号も提供します。
カウンタ入力は多くの場合同期式であり、アクティブなクロックエッジでのみカウンタの動作に影響を与えます。特定のカウンタの場合、各同期入力信号は、適切な動作に必要なセットアップ時間とホールド時間を満たす必要があります(つまり、指定された最小時間の間、すべてのアクティブなクロックエッジの前後に安定している必要があります)。[ 3 ]
一部のカウンタは、次のクロックでオーバーフローまたはアンダーフローが発生することを示すターミナルカウント出力を備えています。これは、以下のようなさまざまな方法で使用されます。
カウンタはカウントを行う際に、カウント出力に一連の出力コード(ビットパターン)を生成します。これらのコードシーケンスの多くは、設計上またはカウンタの特性上、広く用いられている符号化方式に準拠しています。カウンタでは、バイナリ、BCD、グレイコード、ワンホットエンコーディングなど、いくつかの種類の出力符号化方式が一般的に使用されています。
カウンタのモジュラスとは、そのカウントシーケンスにおける状態の数のことです。[ 2 ]モジュラス値がmであるカウンタは、一般的にモジュロmカウンタまたはMOD-mカウンタと呼ばれます。例えば、デケードカウンタは10個の状態を持つデジタルカウンタであり、したがってMOD-10カウンタです。[ 4 ]
カウンタの最大可能なモジュラスは、フリップフロップの数によって決まります。より具体的には、n 個のフリップフロップを持つカウンタの最大可能なモジュラスは2 nです。[ 4 ]例えば、4 ビットカウンタは最大 16 ( 2 4 )のモジュラスを持つことができます。
カウンタの中には(例えばバイナリカウンタのように)、カウントシーケンスにすべての可能な状態を含めるものがあります。一方、カウントシーケンスから1つ以上の可能な状態を省略するカウンタもあります。例えば、4つのフリップフロップを用いたMOD-10(10進数)カウンタは、16個の可能な状態のうち10個のみを使用します。
カウンタは、フリップフロップが同時にクロックされるか、異なるタイミングでクロックされるかによって、同期式と非同期式に大別される。
同期カウンタは、すべてのフリップフロップが共通のクロックを共有し、同時に状態が変化するデジタルカウンタです。[ 3 ]
非同期カウンタ(リップルカウンタとも呼ばれる)では、[ 4 ]各フリップフロップが固有のクロックを持つ。フリップフロップは「チェーン」状に配置され、カウンタの入力クロックは最初のフリップフロップに接続され、各フリップフロップの出力がチェーン内の次のフリップフロップのクロックとなる。このような回路の自然なカウントシーケンスはバイナリであり、したがってほとんどの非同期カウンタはバイナリであり、各フリップフロップはバイナリカウント値の 1 ビットを格納する。[ 5 ]
各フリップフロップはアクティブクロックのエッジから出力トグルまでの遅延を導入するため、カウンタビットは異なるタイミングで状態変化を起こし、入力クロックがフリップフロップを通過する間、カウントが不安定になるリップル効果が生じます。この不安定な状態の間、カウントは一時的に1つ以上の無効な値を通過します。この不安定な状態が続く時間(セトリング時間)は、各フリップフロップのクロックから出力までの遅延や、特定のカウント遷移で状態変化するビット数など、いくつかの要因に依存します。セトリング時間は、すべてのカウンタビットが状態変化を起こしたとき(つまり、カウンタがオーバーフローまたはアンダーフローしたとき)に最大となり、フリップフロップの数に比例します。
このため、リップルカウンタは、カウンタに高速な出力セトリング時間を必要とする同期回路での使用には適していません。 [ 6 ]また、リップル効果によりビット間にタイミングスキューが生じるため、リップルカウンタの出力ビットを外部回路のクロックとして使用することは多くの場合実用的ではありません。リップルカウンタは、瞬時カウントとタイミングスキューが重要でないアプリケーションでは、汎用カウンタおよびクロック周波数分周器として一般的に使用されます。非同期カウンタは、シミュレーションとテストが困難であること、および信頼性の高い動作を確保するために設計に多大な労力が必要となることから、通常はVLSI ICでは使用されません。[ 3 ]
多くのカウンターは一方向のみにカウントするように設計されており、つまり、カウントアップまたはカウントダウンのどちらか一方のみで、両方にはカウントしません。カウントアップのみを行うカウンターは一般的にアップカウンターと呼ばれ、カウントダウンのみを行うカウンターはダウンカウンターと呼ばれます。[ 6 ]
双方向カウンタ(アップ/ダウンカウンタ)とは、方向制御入力信号に応じてカウントアップまたはカウントダウンを行うデジタルカウンタです。同期式アップ/ダウンカウンタでは、制御信号は単一のデジタル入力であり、その状態によってカウント方向が示されます(例:「1」=カウントアップ、「0」=カウントダウン)。非同期式アップ/ダウンカウンタでは、方向制御は、アップクロック入力とダウンクロック入力を別々に用いる場合もあります。
バイナリカウンタは、カウントをバイナリ数として直接表現するデジタルカウンタです。バイナリカウンタは、2^ nで割った余りを持つカウンタであり、n はカウントを格納するために使用されるフリップフロップの数です。例えば、以下の図は 5 ビットのバイナリカウンタの動作を示しています。このカウンタは 32 ( 2^ 5 ) の状態を持ち、したがって 32 で割った余りを持つカウンタです。

非同期バイナリカウンタ、またはバイナリリップルカウンタは、トグル(T)フリップフロップ(または同等のもの)の「チェーン」であり、最下位フリップフロップ(ビット0)はカウンタ入力クロックによってクロックされ、他のすべてのフリップフロップは最も近い下位フリップフロップの出力によってクロックされます(たとえば、ビット0がビット1フリップフロップをクロックし、ビット1がビット2をクロックするなど)。JKまたはDフリップフロップで実装する場合、各フリップフロップはクロックされたときにトグルするように構成されます(つまり、JとKは論理ハイに接続され、DはQに接続されます)。
各フリップフロップは、実質的に1ビットカウンタとして機能し、クロックサイクルごとに1回(出力のトグルによって)カウントをインクリメントします。0から1までカウントした後、次のクロックが到着するとオーバーフローし、カウントシーケンスは再び0から始まります。各出力状態は入力クロックサイクル全体にわたって持続するため、各フリップフロップの出力信号の周波数は入力クロックの周波数のちょうど半分になります。フリップフロップを追加することで、任意のワードサイズ(ビット数)のカウンタを構成でき、各ビットの出力周波数は、最も近い下位ビットの周波数のちょうど半分になります。
同期バイナリカウンタは、カウント値をバイナリ数として出力する同期カウンタです。下図に示す回路は、JKフリップフロップで実装された同期アップカウント4ビットバイナリカウンタです。クロックの立ち上がりエッジでは、最下位ビット(Q0 )は常にトグルしますが、他のビットは、下位ビットがすべて論理ハイ状態の場合にのみトグルします(つまり、Q0が論理ハイの場合にQ1がトグルし、Q0とQ1の両方がハイの場合にQ2がトグルし、 Q0 、 Q1 、 Q2がすべてハイの場合にQ3がトグルします)。
![]()
非同期カウンタと同様に、各フリップフロップは入力クロックのエッジから出力のトグルまでの遅延を発生させますが、この場合、すべてのフリップフロップが同時に状態を変化させるため、ビット数に関係なく、カウンタ出力は1つのフリップフロップの遅延後にのみ安定します。
バイナリ符号化10進数(BCD)デケードカウンタは、0から9の範囲のバイナリ数としてカウントを直接表現するMOD-10カウンタです。通常、BCDデケードカウンタは0から9までカウントアップし、その後オーバーフローします。出力値の範囲が10進数と同じであるため、BCDデケードカウンタは10進数を表現するためによく使用されます。
下図に示す回路は非同期BCDデケードカウンタです。これは実質的に4ビットのバイナリリップルカウンタであり、バイナリカウントが10進数で10(バイナリ1010)に達すると、ANDゲートを使用してカウントをゼロにリセットします(すべてのフリップフロップをリセットします)。これにより、出力状態は10になります。すべての非同期カウンタと同様に、外部クロックがフリップフロップチェーンを伝播している間(カウントが10に達したときのリセットを含む)、保存されたカウントは不安定になります。
下図に示す回路は、同期式BCD10進カウンタです。次状態ロジックの実装には5つの論理ゲートが使用されており、追加の回路が必要となるものの、非同期カウンタよりも高速な動作を実現しています。
![]()
リングカウンタは、リセット入力信号によって初期化される循環シフトレジスタであり、1つのフリップフロップ(通常はビット0)に「1」が格納され、他のすべてのフリップフロップに「0」が格納されます。クロックパルスごとに「1」が次のフリップフロップにシフトします。「1」がシフトレジスタの最後のフリップフロップに到達すると、次のクロックによって最初のフリップフロップにシフトし、カウントシーケンスが再開され、カウンタのオーバーフローが発生します。任意の時点では、カウンタ出力ビットのうち1つだけが論理「1」となるため、リングカウンタは実質的にワンホット状態機械となります。
リングカウンタはMOD-nで表され、nはフリップフロップの数です。例えば、下図のリングカウンタは4つのフリップフロップを使用しているため、MOD-4カウンタとなります。このカウンタでは、初期状態ではビット0がセットされ、他のすべてのビットはクリアされます。
![]()
ジョンソンカウンタは、最終段の出力が反転され、最初の段のデータ入力に接続された円形シフトレジスタです。[ 7 ] [ 8 ] [ 9 ]すべてのビットがゼロに初期化されるため、グレイコード出力シーケンスが生成されます。中間ロジックゲートがないため、比較的高い周波数でクロックすることができ、結果として最悪の場合の伝搬遅延はクロックからフリップフロップ出力までになります。ジョンソンカウンタはMOD-2nであり、nはフリップフロップの数です。たとえば、下に示すジョンソンカウンタは4つのフリップフロップを備えているため、MOD-8カウンタです。
![]()
ジョンソンカウンタは、ステートマシンシーケンサ、高周波カウントアプリケーションのプリスケーラ、アナログ波形生成などの特殊なアプリケーション(例:デイビス正弦波発生器)で一般的に使用されています。 [ 10 ]
デジタルカウンタは有限状態機械であり、カウンタのフリップフロップが状態レジスタとして機能します。状態レジスタに格納される値は、カウンタの現在の状態を表すビットベクトルです。
入力信号による影響を受けない場合、カウンタは固定された一連の状態を周期的に遷移します。[ 2 ]その結果、カウンタの状態図はループのように見えます。例えば、MOD-8カウンタは8つの状態を繰り返し遷移します。

カウンターフリップフロップとモジュラス可能な状態のごく一部しか使用しません。未使用の状態は、通常、通常の動作中に禁止されているため、不正な状態と呼ばれます。 [ 2 ]一般的に、MOD-カウンタービーチサンダルには違法な状態。たとえば、4 つのフリップフロップを備えた MOD-10 BCD デケードカウンタには 6 つの (違法な州。ジョンソンカウンターはリングカウンターには違法な州。
通常動作時、カウンタが不正な状態に入ることはありません。しかし、電源ノイズや放射線被ばくなどの不具合により、カウンタが誤って不正な状態に入る場合があります。このような事態に備え、カウンタは多くの場合、次のクロックエッジで有効な状態に遷移することで不正な状態から自動的に回復するように設計されています。このような回復が発生した場合、結果として得られるカウント値は不正確になる可能性がありますが、通常のカウントシーケンスが直ちに復元され、その後の不正な状態の発生は防止されます。
デジタルカウンタは、出力が現在の状態のみによって決定されるため、通常はムーアマシンとして実装されます。 [ 11 ]このため、カウンタはムーアマシンに自然に適合し、設計が簡素化され、信頼性の高い動作が促進されます。[ 1 ]
より具体的には、カウンタは一般的にメドベージェフ状態機械として実装されます。これはムーア機械のサブクラスであり、現在の状態を直接出力し、各状態は特定のカウント値を自然にエンコードします。[ 12 ]このような機械の状態レジスタはカウンタ出力に直接接続されているため、エンコードロジックは不要で、出力遅延は最小限に抑えられます。
一部のカウンタは、状態レジスタとカウンタ出力間の組み合わせ論理回路を用いて状態を特定の出力エンコーディングに変換するため、完全なムーア型マシンに分類されます。例えば、CMOS 4017集積回路は、ジョンソン型デコードカウンタの出力をワンホット形式にエンコードし、ジョンソン型カウンタ固有のグレイコード出力を利用してワンホット出力のグリッチを回避します。
カウンタは、専用のMSIおよびLSI集積回路、 ASIC内の組み込みカウンタ、マイクロコントローラ内の汎用カウンタおよびタイマー周辺機器、FPGA内のIPブロックなど、さまざまな方法で実装されます。後者の場合、カウンタは通常、 VHDL、Verilog、またはその他のハードウェア記述言語で記述された記述から合成することによってインスタンス化されます。たとえば、次のVHDLコードは、カウントイネーブルとプリロード機能を備えた32ビットバイナリアップ/ダウンカウンタを記述しています。
entity bidirectional_counter is port ( -- カウンタの入出力信号: CLK : in std_logic ; -- クロックRESET : in std_logic ; -- 非同期リセットENABLE : in std_logic ; -- カウント有効化LOAD_ENABLE : in std_logic ; -- ロード有効化COUNT_UP : in std_logic ; -- アップカウントの場合は '1'、ダウンカウントの場合は '0' DATA_IN : in unsigned ( 31 downto 0 ); -- カウンタにロードする値DATA_OUT : out unsigned ( 31 downto 0 ) -- 現在のカウンタ値); end bidirectional_counter ;architecture behavioral of bidirectional_counter is signal counter : unsigned ( 31 downto 0 ) := ( others => '0' ); -- カウンタレジスタbegin process ( CLK , RESET ) begin if RESET = '1' then -- カウンタのリセットが要求された場合counter <= ( others => '0' ); -- カウンタをリセットelsif rising_edge ( CLK ) then -- それ以外の場合は、クロックの立ち上がりエッジでif LOAD_ENABLE = '1' then -- ロードが要求された場合counter <= DATA_IN ; -- カウンタに新しい値をジャムelsif ENABLE = '0' then -- それ以外の場合は、カウントが無効になっている場合null ; -- 何もしないelsif COUNT_UP = '1' then -- それ以外の場合は、アップカウントの場合counter <= counter + 1 ; -- カウンタをインクリメントelse -- それ以外の場合は、ダウンカウントなのでcounter <= counter - 1 ; -- カウンタをデクリメントend if ; end if ; end process ; DATA_OUT <= counter ; -- 現在のカウンタ値を出力します。動作終了;MSIおよびLSI集積回路では、カウンタは半導体ダイとして実装され、半導体パッケージに接合および封止されます。
一部のカウンタはカスケード接続が可能であり、複数のカウンタインスタンスを接続して、より大きなモジュラスを持つ拡張カウンタを形成できます。カスケード接続を容易にするために、カスケード接続可能なカウンタは通常、カウントを有効にするイネーブル入力と、オーバーフローまたはアンダーフローをカスケード内の次のカウンタのイネーブル入力に伝播する出力を備えています。[ 2 ]
カスケード接続されたカウンタの最初の(最下位の)カウンタは、そのイネーブル入力を固定の論理レベルに接続することで常時有効にすることも、動的に駆動することもできます。いずれの場合も、最初のカウンタのイネーブル入力は、拡張カウンタ全体のカウントイネーブルとして機能します。
カスケード接続可能なバイナリカウンタは通常、オーバーフローまたはアンダーフローが差し迫っていることをカスケード接続された次のカウンタに通知するために、リップルキャリー信号を出力します。たとえば、下図に示す4ビットのカスケード接続可能なアップカウンタでは、次のクロックでオーバーフローが発生すると予想される場合(つまり、カウントがバイナリ1111でカウントが有効になっている場合)、ANDゲートがリップルキャリー出力(RCO)をアサートします。
バイナリカウンタは、タイマーやイベントカウンタとして広く利用されている。
デジタルタイマーでは、カウンタは周期的なデジタル信号によってクロックされ、この信号が時間基準として機能し、カウント値を一定の速度で変化させます。クロック信号は通常、水晶発振器などの安定した周波数源から、直接または分周器を介して供給されます。用途に応じて、タイマーはタイミング状態を示す信号を出力したり、現在のカウント値を出力したり、あるいはその両方を出力したりします。後者の場合、カウント値は通常、経過時間または残り時間を示します。
イベントカウンターは通常、発生頻度が変動する可能性のある非同期イベントをカウントするために使用されます。任意の時点における現在のカウント値は、イベントカウント開始以降に発生したイベントの数を示します。
バイナリカウンタは、コンピュータでメモリ アドレスを生成するために広く使用されています。このようなアプリケーションでは、カウンタの出力は通常アドレス バスに接続され、カウントが増加または減少するにつれて連続するメモリ位置を順次選択するために使用されます。その一般的な例としては、プログラム カウンタ、ダイレクト メモリ アクセス(DMA) コントローラ、および FIFO バッファなどがあります。データ転送操作中にデータ アドレスを保持するために使用される場合、カウンタは一般的にメモリ アドレス レジスタ(MAR) と呼ばれます。[ 13 ] [ 14 ]
中央処理装置(CPU)のプログラムカウンタ(PC)は、通常、次の例に示すようにバイナリカウンタで構成されています。
![]()
上記の PC では、現在のカウントは次に実行される命令のメモリ アドレスです。プロセッサがリセットされると、カウントはゼロにリセットされ、実行はアドレス 0 から開始されます。メモリから命令がフェッチされると、CE (カウント イネーブル) がアサートされ、カウンタがカウントをインクリメントして次のシーケンシャル命令アドレスに進むことができます。実行を別の命令シーケンスに切り替える必要が生じた場合 (たとえば、分岐命令の実行、サブルーチン呼び出し、割り込み、またはサブルーチンや割り込みからの復帰のため)、新しいシーケンスの最初の命令のアドレスが Data 入力に適用され、Load がアサートされます。これにより、CE (アサートされている場合) がオーバーライドされ、Data が Count にコピーされます。
電子FIFO(先入れ先出し)バッファは、異なるクロックドメインで動作するデータ生成デバイスと、有限時間内にデータ損失を回避するのに十分な速さでデータを消費できないデータ消費デバイスを接続するためによく使用されます。
下図に示す FIFO は、デュアルポート RAMのメモリ アドレス レジスタ (MAR) として 2 つのバイナリ カウンタを使用します。FIFO への書き込み時には、データ ワード WDATA が RAM アドレス WADDR に書き込まれ、次の書き込みに備えて書き込み MAR がインクリメントされます。FIFO からの読み出し時には、RDATA が RAM アドレス RADDR に格納されているデータ ワードを受け取り、読み出し MAR がインクリメントされます。FIFO が満杯の特殊な場合を除き、FIFO レベル (FIFO 内の未読み出しワード数) は WADDR-RADDR に等しくなります。
![]()
このFIFOは非同期または同期のいずれかであり、読み出し操作と書き込み操作はそれぞれ異なるクロックドメインで行われる場合と、単一の共通クロックドメインで行われる場合があります。後者の場合、RCLKとWCLKは接続されます。非同期FIFOでは、MARは通常、バイナリではなくグレイコードを出力し、両方のクロックドメインでFIFOレベル検出に安全に使用できるようにします。
バイナリカウンタは、ダイレクトメモリアクセス(DMA)コントローラでさまざまな用途に使用されます。例えば、以下に示すようなカウンタは、DMAによるメモリバッファのコピー時に利用されます。2つのカウンタは、コピーするデータの送信元アドレスと送信先アドレスを生成するためのメモリアドレスレジスタ(MAR)として使用されます。MARは通常双方向であり、バッファのベースアドレスまたはエンドアドレスからデータ転送を開始できます。3つ目のカウンタは、転送する残りのワード数を追跡します。
![]()
![]()
DMA動作の準備として、初期アドレスがMARにロードされ、バッファサイズがデータ転送カウンタにロードされ、各MARに対してカウント方向(通常はフリップフロップに格納される)がプログラムされます。
各ワード転送が完了すると、すべてのカウンタでCE(カウントイネーブル)がアサートされ、MARが次のアドレスに進み、残りのワードカウントが減少します。残りのカウントがゼロになると、そのビットの論理NORがハイに切り替わり、DMA操作が完了したことを示します。
デジタルエレクトロニクスにおいて、ワンショットタイマー(または単にワンショット)は、入力トリガーに応答して、正確なタイミングで単一の出力パルスを生成する回路です。デジタル設計によりパルス持続時間を簡単に調整でき、アナログ回路と比較してパルス持続時間の精度と再現性が高いため、タイミング精度が重要なアプリケーションではデジタルワンショットが好ましいです。[ 15 ]
下図に示すワンショットタイマーは、バイナリダウンカウンタを使用して、正確に制御された持続時間の出力パルスを生成します。タイマーの出力は、現在のカウントのすべてのビットの論理和であり、したがって、タイマーが動作している間(つまり、カウントがゼロでない場合)は出力パルスがアクティブになります。カウントがゼロに達すると、出力パルスは終了し、カウントが停止します。
![]()
タイマーの動作を開始するには、所望のパルス幅を表す値をカウンタのデータ入力に入力し、ロード信号をアサートしてパルス生成をトリガーします。パルス幅はクロックサイクルで指定します。例えば、1MHzのクロックの場合、100マイクロ秒の出力パルスは100クロックサイクルの持続時間となります(下図参照)。
![]()
上記のワンショットは再トリガー可能であり、実行中に後続のトリガーによって再開できるため、出力パルスの持続時間を延長できます。一方、下記のワンショットは再トリガー不可であり、出力パルスがアクティブな間は、入力されたトリガーを無視します。
![]()
バイナリカウンタは、一般的に周期的なパルスを出力する周期インターバルタイマー(PIT)として使用されます。PITは、コンピュータにおけるシステムクロック割り込みの生成、位相同期ループや周波数シンセサイザにおけるクロック分周器、その他多くの用途で利用されています。
以下の回路では、バイナリダウンカウンタを使用してPITを実装しています。クロックサイクルで測定された出力パルス間の間隔は、インターバルレジスタに格納され、出力周波数となります。カウントがゼロになると、NORゲートはタイマー出力にパルスを出力します。この出力パルスは、内部的にインターバルをカウンタに再ロードし、タイマーを再起動するためにも使用されます。各出力パルスの持続時間はクロックサイクル1回分です。
![]()
例えば、6MHzのクロックから1MHzの出力周波数を得るには、次のタイミング図に示すように、インターバルを5に設定します。
![]()
方形波出力を必要とするアプリケーションでは、通常、PIT(パルス入力トランス)を使用してフリップフロップをトグルし、その結果、出力周波数はPITの出力周波数の半分になります。
![]()
周期的なインターバルタイマーは、位相同期ループ(PLL)周波数シンセサイザのクロック分周器として使用されます[ 16 ]。PLL周波数シンセサイザは、電圧制御発振器(VCO)を基準クロックに同期させることで、正確な出力周波数を生成します。以下に、周波数を出力する典型的な実装例を示します。入力クロック周波数の有理数倍として2つの時計のディバイダーを使用してスケールを調整しますそして整数の約数そして、 それぞれ。

PLLがロック状態にあるとき、クロック分周器の出力は位相差のみを持つ同一の周波数となる。[ 17 ]位相差に比例する誤差電圧が生成され、VCO周波数を調整して位相差を小さく保ち、正確な同期を維持するために使用される。比率そして。
バイナリカウンタは、デジタルパルス幅変調器の重要な構成要素であり、モータ速度、温度、LEDの明るさ、その他の物理プロセスを制御するためによく使用されます。これらはさまざまな方法で実装できます。たとえば、下図に示すパルス幅変調器は、同期リセットを備えた単一のバイナリアップカウンタを使用して、出力パルスの幅と周波数の両方を制御します。
![]()
PWM周期レジスタに格納される値(出力周波数を決定します。クロック周波数での増加一致するまでこれにより、同一性比較器がEndCycleをストローブし、カウンタがリセットされて次の出力サイクルが開始されます。結果として、カウンタのモジュラスは出力パルス周波数。
クロック周期で出力パルス幅を指定します。振幅比較器は、カウントが以下これにより、出力サイクルの開始時に始まり、カウントが到達したときに終了するパルスが生成されます。フリップフロップバッファ静電気によるハザードが原因でPWM出力にグリッチが発生するのを防ぐため。
デューティサイクルとは、PWMサイクル時間のうちパルスがアクティブである時間の割合です。例えば、次の図は信号タイミングを示しています。そしてその結果、デューティサイクルは25パーセントになります。ハーツ。
![]()
パルス幅測定は、レーダーやソナー、産業オートメーション、医療画像システムなど、幅広い機器で使用される一般的なカウンタアプリケーションです。以下に典型的な回路を示します。この回路は、バイナリアップカウンタを使用して、カウンタクロックに対して非同期な正パルスの幅を測定します。
![]()
測定信号はまずカウンタのクロック領域に同期され、同期入力信号であるクロックゲートが生成されます。これは、カウンタおよびエッジ検出器フリップフロップにおけるメタステーブル状態や最小セットアップ時間またはホールド時間の違反による測定誤差を防ぐために行われます。
クロックゲートパルスが始まると、立ち上がりエッジ検出器がスタート信号をストローブしてカウントをゼロにリセットし、クロックゲートがアクティブな間、カウンタはクロックパルスをカウントし続けます。パルスが終了すると、カウンタはカウントを停止し、累積カウントはクロック周期単位で測定されたパルス幅を示します。パルス幅は秒、これはクロック周波数(ヘルツ)です。
立ち下がりエッジ検出器は、測定の終了を示すために「End」というストロボ信号を発します。この信号は、次の測定が始まる前に、外部回路に信号を送るため、またはカウント値を外部ストレージに転送するため、あるいはその両方を行うために使用できます。
カウンタアプリケーションの中には、複数のカウンタを使用するものがあります。その一例として、下図に示す周波数カウンタがあります。これは、2つのカウンタを使用してデジタル信号の周波数を測定します。1つのカウンタはワンショットとして構成され、タイムゲートと呼ばれる、幅が精密に制御されたパルスを生成します。タイムゲートは、イベントカウンタのクロックを有効にするために使用され、イベントカウンタは、周波数を測定する信号によってクロックされます。
![]()
測定が開始されると(Start信号をアサートすると)、イベントカウンタはゼロにリセットされ、タイムゲートがアクティブな間、未知の周波数信号の立ち上がりエッジをカウントし始めます。タイムゲートが終了すると、エッジカウントは停止し、累積カウントが測定周波数を示します。ゲート時間が1秒の場合、カウントは測定周波数をHz単位で直接示します。それ以外のゲート時間の場合は、カウントをスケーリングしてHz単位の値を取得する必要があります。
アナログ-デジタル変換器(ADC)回路では、カウンタはさまざまな方法で使用されます。たとえば、トラッキングADCでは、双方向バイナリカウンタを使用して出力電圧(デジタル-アナログ変換器の)これはカウントに比例するため、カウントが増加または減少すると、それぞれ増加または減少します。
![]()
電圧コンパレータは、ADC入力電圧よりも大きいこのビットはカウント方向を制御し、カウントとDAC電圧はそれぞれ、より小さいか大きいかそれによって追跡するカウントが追跡されるのでほぼリアルタイムで、ADC出力データとして直接使用されます。
双方向バイナリカウンタは、インクリメンタルエンコーダで監視される移動物体の物理的な位置を追跡するためによく使用されます。下の回路例をご覧ください。位置の変化は、エンコーダのAまたはB出力信号の立ち上がりエッジまたは立ち下がりエッジによって示されます。各位置の変化は、明確に定義された距離に対応しています。AとBの位相差によって移動方向(例えば「前進」または「後退」)が示される。物体が前進または後退方向に移動すると、カウントはそれぞれ増加または減少する。
![]()
追跡を開始するには、監視対象物を基準位置に配置し()そしてカウントはゼロになります。それ以降、カウントは基準位置からの変位で表された現在の位置を示します。距離の単位:オブジェクトが基準位置の両側に移動できる場合、カウントは実質的に符号付き整数になります。
正弦波電圧波形は、ジョンソンカウンタの出力状態を循環させ、各カウンタ状態をコサイン関数の点にマッピングするように重み付けされた抵抗ネットワークを通して出力電圧を合計することによって近似できます。 [ 10 ]
![]()
結果として得られる正弦波形の周波数はのためにフリップフロップとクロック周波数したがって、クロック周波数を変更するだけで、正弦波の周波数を簡単に変更できる。
高調波歪みは増加させることで低減されるこれにより、正弦波のステップ数を増やし、ステップサイズを小さくすることができます。また、抵抗値の精度を高めたり、コンデンサやアクティブフィルタを追加して電圧ステップのエッジをローパスフィルタ処理したりすることもできます。