クロックパルスを数えて2進数で計数値を保持する順序回路。
カウンタ(計数回路)とは、クロックパルス(=周期的に上下する信号)が入るたびに数を1ずつ増やし、その値を2進数で覚えておく回路のことです。数えた結果を記憶する点が特徴で、入力の歴史によって出力が変わる「順序回路」の一種です。
身近な例で考えると、人が通るたびにカチカチ押す数取り器(カウンター)に似ています。1回押すと数字が1増え、押した回数の合計を覚えておいてくれます。カウンタ回路ではこの「押す」役割をクロックパルスが担います。
上のツールで▶ボタンを押すと、クロックパルスが入るたびにフリップフロップ(=1ビットを記憶する素子)が反転し、計数値が 0→1→2… と増えていく流れを確認できます。
カウンタは、フリップフロップへのクロックの配り方によって2種類に分かれます。
・同期カウンタ:すべてのフリップフロップに同じクロックをつなぎ、全桁が一斉に動く方式
・非同期カウンタ:前段のフリップフロップの出力を次段のクロックにつなぎ、下位の桁から順に変化が伝わる方式
非同期カウンタは配線が単純ですが、桁から桁へ変化が伝わる遅れが積み重なるため、高速にすると上位桁の更新が間に合わなくなることがあります。リレー競走でバトンを順に渡すイメージです。一方、同期カウンタは全員が同時にスタートする一斉行動なので遅れが積み重ならず、高速動作に向いています。
| 項目 | 同期カウンタ | 非同期カウンタ |
|---|---|---|
| クロック | 全段に共通 | 前段の出力を次段へ |
| 動作 | 全桁が一斉 | 下位から順に伝搬 |
| 速度 | 速い | 遅れが積み重なる |
上のツールでシナリオを切り替えると、同期式と非同期式の説明を見比べられます。
カウンタは数を数えるだけでなく、いろいろな場面で使われます。代表的な用途は次のとおりです。
・分周:クロックの最下位ビットは2回に1回だけ変化するので、出力は入力の半分の速さになります。これを利用して、速いクロックから遅いクロックを作り出せます
・タイマ・時計:一定速度のクロックを数えれば、何秒経ったかが分かります。デジタル時計やストップウォッチの心臓部です
・イベントの計数:センサからの信号を数えれば、通過した品物の数や回転数を測れます
・アドレス生成:メモリを順番に読み書きするためのアドレスを次々に作り出せます
分周は、回転の速いハンドルから回転の遅い時計の針へとギアで減速するのに似ています。ビットを1段増やすたびに速さが半分になるので、何段つなぐかで好きな速さを作れます。