アフィリエイト広告
アフィリエイト広告

論理回路 / 分周回路・カウンタ回路

さて、と。
フリップフロップをひととおりおさらいしたので、次は分周回路について勉強します。

じつは俺、分周回路を自分で組んでみたことがないです。理屈は知っていても使ったことがない。なので、ワケわかんねぇ話、しだすかもしれないけれど、まぁテキトーに嗤ってて下さい。

分周回路

「分周回路」とは、入力したクロックの周波数を整数分の 1 に下げて出力する回路。

なはずなんですけど、ググると、ほとんど「カウンタ回路」がでてきます。

ん? 「分周回路」=「カウンタ回路」なの?

いや、カウンタ回路を作るために分周回路を使うんでしょ? けど、分周回路って、パルスの数を数えて 1/N にしてるんじゃね? いや、周波数を半分にする 2 分周回路を N 個集めて 1/2N にするんだから、カウンタじゃねーぞ。いや、それこそがカウンタ回路じゃん。
だから、一緒なんじゃね? 周波数を下げるのが目的なら「分周回路」、クロックの数を数えるのが目的なら「カウンタ回路」、ってことで。どーなんだ?

D フリップフロップを使った分周回路

図 1 Dフリップフロップを使った分周回路 実験回路図

部品箱にある IC は 74HC74 (D フリップフロップ) です。これを使って、よくみる分周回路を作ってみました (図 1)。

分周回路で使うのは T フリップフロップです。D フリップフロップの出力 Q を、入力 D に戻してやると、クロックによって出力 Q が反転する T フリップフロップになります。

Q を、D に戻すと同時に、次のフリップフロップにクロックとして渡します。以下、同じように、4 段のフリップフロップを接続してあります。

詳細な動作については、ググって下さい m(__)m

左下は、インバータを使った矩形波発振回路です。周期 1000ms のクロックを発振しています。
その右が、フリップフロップを初期化する押しボタン、クロック出力の表示用の LED。さらに 4 個のLED は、各段の出力表示用です。

この実験回路では、Clear SW を押すと出力の LED1 〜 LED4 が消灯します。離すと、クロック (LED5) に応じて点滅を始めます。クロックが1秒ごとに点滅すると、LED1 は 2 秒ごと、LED2 は 4 秒ごと、LED3 は 8 秒ごと、LED4 は 16 秒ごとに点滅します。
つまり、N をフリップフロップの段数とすると、N 段目の出力 QN は、クロックの周期の 2N 倍になっている。周波数でいうと 1/2N になっている。これが、「分周回路」です。

カウンタ回路

で、この回路、同時に「カウンタ回路」と呼ばれます。の、ようです。
各フリップフロップは同期していないので「非同期」、フリップフロップが 4 段で 24 = 16 分周するので「16 進」、合わせて「非同期 16 進カウンタ」です。
また、こういう簡単なカウンタを「リプル・カウンタ」という、らしい。

どこがカウンタなのか?
LED1 〜 LED4 を、右から左へ並べて点滅のようすをみていると、4 桁の 2 進数をカウントしていることがわかります。消灯を 0、点灯を 1 とすると、0000、0001、0010、0011 … といったぐあいに。… 1110、1111 までいくと 0000 に戻ります。つまり、0b0000 から 0b1111 まで、2 進数をカウントしています。これが「16 進カウンタ」です。

図 2 非同期16進カウンタの遅延

各フリップフロップには、同じクロックは入力されていません。なので「非同期」。

非同期カウンタの問題点は、遅延が発生すること。実際に、クロックの立ち上がり (黄色) と、4 段目の出力の立ち上がり (青色) を計測すると、40ns の遅れがありました (図 2)。
4 段でこれですから、段数の大きいカウンタになるといろいろ問題がでてくる。小規模のものなら使えますけど、大規模な回路ではちょっと、ってことです。

図 3 ダウン・カウンタ

図 1 の実験回路は、カウントアップしていきます。次の段へ渡す信号を Q から Q に変更してやると、カウントダウンするようになります (図 3)。
それぞれ、「アップ・カウンタ」「ダウン・カウンタ」。アップでもダウンでも、2 進数をひとつずつカウントしていくのが「バイナリ・カウンタ」です。

JK フリップフロップを使った分周回路

図 4 JKフリップフロップを使った分周回路 実験回路図

T フリップフロップを並べていくということでは、JK フリップフロップでも仕組みは同じです。部品箱にある JK フリップフロップ CD4027B でも、実験しておきましょう。

J、K ともに “1” を入力しておくことで、T フリップフロップの動きをさせています。
SET、RESET は、RS フリップフロップのような動きをする入力端子です。なので、RESET を “1” にすると、Q=0 になります。

D フリップフロップと同様に、出力 Q を次段のクロックに渡してやると、ダウン・カウンタになります。

シフトレジスタを使った分周回路

図 5 シフトレジスタ 74LS164 システム図
図 6 シフトレジスタを使った分周回路

フリップフロップが並んだ回路図をみながら、これ、どこかでみたような図だよなぁ、と思ってました。
あぁそうだ、俺が初めて使ってみたシフトレジスタ 74LS164 です。図 5 がそのシステム図。RS フリップフロップが並んでいます。

こいつをながめていて、気がついた。出力を入力に戻したら、分周回路になるんじゃね?

ってことで作ってみたのが図 6。出力 QH を反転して入力に戻してみた。と、16 分周になった。
QA を戻すと 2 分周、QB なら 4 分周、QC が 6 分周で、N 段目が 2・N 分周になる。

おお、すげー。と喜んでいたら、こーゆーの「ジョンソン・カウンタ」ってゆーんだって。まぁねぇ、俺が思いつくぐらいだから、誰かが考えてるよなぁ (^_^;)

後記

拘るつもりも逆らうつもりも、ない。分周回路とカウンタ回路は同じものなんだな。ウィキペディアにこんな一文をみつけた。

Nomenclature
A prescaler is essentially a counter-divider, and thus the names may be used somewhat interchangeably.

https://en.wikipedia.org/wiki/Prescaler

prescaler とは counter-divider であり、名称は互換だ、と。

ついでに。
16進カウンタは 4 ビットなので “4bit counter”、16 で割った余りを表示するので “MOD (modulo) 16″、非同期は “asynchronous”。ってことで、”4bit MOD 16 asynchronous counter” といいます。
“modulo” は「モジュロ演算」、割り算の余りを求める計算です。合同式 a ≡ b (mod n) なんてのがありましたねぇ、わからんけど (;´Д`)

ググるときの参考に。

タイトルとURLをコピーしました