SSブログ

リップルカウンタを作ってみたはずなのに [PSoC]このエントリーを含むはてなブックマーク#

リップルカウンタ?の出力

Bridge Control Panel でロジアナって、便利。 と、いう話題で書いた前回の記事ですが、もともと何をしたかったのかを追記します。 題して、「RTLで書いたのと違うじゃん。」です。

前回までのあらすじ

PSoC で作るロジアナみたいなもの

PSoC でロジック信号をつかまえて、 I2CUART のインターフェイスで出力すると、ロジアナみたいな事ができる事がわかりました。 前回の例では、同期カウンタを使ったきれいな波形を読み取らせたのですが、きれいな波形だったら手計算でシミュレーションだってできます。 本当に見たかったのは、こんなきれいな物じゃななかったのです。

リップルカウンタが出来ちゃう?

リップルカウンタの回路図

きっかけは、某所で見かけた「カスケード接続された TFF」でした。 TFF をカスケード接続するとリップルカウンタと呼ばれる非同期カウンタを構成する事が出来ます。 たとえば、こんな回路です。 前段の TFF の出力の立ち下がりを次の段の TFF のクロックに使うと、バイナリカウンタが出来上がります。

論理合成をかじった方ならわかると思いますが、この回路は厳密には PSoC 4 では実現できるはずがないのです。 それは、 PSoC 4 ではクロックを4本しか持てないからです。 この回路を真面目に実現すると、5種類のクロックが必要なのです。 これが、合成できるという事は、何か真面目に実装していないからに違いないのです。

ロジアナで観測したら

リップルカウンタ?の出力

そこで、リップルカウンタの出力を観測してみました。 すると、各ビットの立下りが同時に発生するはずなのに、ステージごとに1クロックずつ遅れて出力が変化しているのがわかります。 これでは、リップルカウンタではありません。


リソースの使用状況

"Resource Meter" で、リソースの使用状況を見た所、やはりクロックは二つしか使っていません。 では、それぞれの TFF は、どのクロックを使用しているのでしょうか。

前段の出力はクロックとして使われていない

そこで、合成時のレポートを確認してみました。 以下のレポートは、 "rpt" ファイルの "Final Placement Summary" → "Final Placement Details" → "Component Details" にある、 Q3 を作っているマクロセルに関するレポートです。

LAB@[UDB=(0,1)][LB=0] #macrocells=1, #inputs=0, #pterms=0
{
    [McSlotId=0]:     MacroCell: Name=Q3, Mode=(T-Register) @ [UDB=(0,1)][LB=0][MC=0]
        Total # of inputs        : 0
        Total # of product terms : 0
        List of special equations: 
            Clock  = (CK_digital) => Global
            Clock Enable: NegEdge(Q2)
        Main Equation            : 0 pterms
        !(
            0
        );
        Output = Q3 (fanout=1)
        Properties               : 
        {
        }

    [McSlotId=1]: (empty)
    [McSlotId=2]: (empty)
    [McSlotId=3]: (empty)
}

このレポートによると、 Q3 出力を作っている TFF のクロックは、 Q0 を作っている TFF で使用されている "CK" であり、 "Clock Enable" と称してなぞの入力 "NegEdge(Q2)" が接続されています。 どうやら、原理的に1クロックの遅延を生ずる Q2 の立ち下がり検出回路を TFF のイネーブル入力に使用して、疑似的に TFF が構成されているようです。 つまり、 TFF という記号が使用されてはいますが、これは TFF とは違う実装になっているようです。

分周されたクロックを入れてみたら

分周されたクロックを入れたリップルカウンタ

どうやら、 TFF は分周前のクロックを使用したエッジ検出を行っているらしいことがわかってきました。 そこで、リップルカウンタに与えるクロックに4分周回路を追加してみました。 元のクロックの周波数を4倍にしたので、最終的な出力に変わりはないはずです。


クロックを分周した波形

ところが、各ステージでの遅延が少なくなりました。 合成結果は省略しますが、それぞれの TFF の駆動クロックの周波数が4倍になったのが原因です。 このように、元のクロック周波数が十分に高ければ、 TFF の出力はリップルカウンタ出力として見なせるという事がわかりました。 それでも、決してリップルカウンタとはなりませんので、注意が必要です。

本日の結論

  • PSoC の論理合成では、 TFF をカスケードに接続する事もできますが、正確な実装ではありません。
  • 元のクロック周波数が高い場合は、リップルカウンタのように見なす事も出来ますが、リップルカウンタとは動作が異なります。
  • 何よりリップルカウンタを作らせないような回路を作る事が大事です。

関連文献

シリーズ最強!PSoC3ボード+デバッグ・ボード (トライアルシリーズ)

シリーズ最強!PSoC3ボード+デバッグ・ボード (トライアルシリーズ)

  • 作者: 古平 晃洋
  • 出版社/メーカー: CQ出版
  • 発売日: 2012/05
  • メディア: 単行本

nice!(0)  コメント(0)  トラックバック(0)  このエントリーを含むはてなブックマーク#

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。