概要
前回までで、主なマクロセルの紹介は終わりました。今回はちょっと特殊なDelayの紹介です。P DLYとPipe Delayは名前が似ていますが、違うものなので注意しましょう。
P DLY(Programmable Delay)
シンプルなマクロセルですね。プログラム可能な遅延回路ですね。Edge Detector(エッジ検出)としても利用可能みたいです。
とりあえずクロックを接続してみます。OSC1のデフォルト設定だとクロックが早すぎたので、/4に設定してあります。P DLYは初期設定のままです。
こんな感じの出力になりました。クロックの立ち上がりから少し遅れてパルスがでていますね。
P DLYのDelay valueを125nsから250nsに変更しました。パルス幅が倍になっていますね。
さらに500nsにしてみました。
どうやら、Delayとパルス幅はVDDの電圧でも変化するみたいです。
ModeをRisingからFallingに変更しました。立ち下がりエッジを検出して、パルスを出すようになりました。
Bothにして、両方のエッジ検出になりました。
Both edge delayにしました。このモードだと単に信号がDelayしているだけですね。
Pipe Delay
端子がいっぱいあるので複雑そうなマクロセルですね。このPipe Delayは16個のD-FFがつながっているDelayです。
nRESETはリセット用なので、通常はPORを設定して常にHIGHにします。LOWを入力すると出力がすべてLOWになってしまうみたいです。
デフォルト設定でINに適当な信号をいれて、CLK入力した状態で出力を確認してみます。
一番上がクロックで、その下が入力信号です。クロックの立ち上がりの値が、少し遅れて出力されていますね。デフォルト設定ではPipeが1段ですので単なるDFFになるそうです。DFFが足りない場合にはPipe Delayが流用可能とのことです。
Pipeの段数を変えてみます。OUT0を2段、OUT1を3段にしてみます。
どうやら「1 PIPE OUT」は1段目の出力固定。OUT0とOUT1は指定した段数の出力ですね。OUT0は2段なので、1クロック遅れて出力されています。OUT1は3段なので2クロック遅れていますね。最大16段までですので、15クロック遅れて出力することが可能みたいです。
応用回路(分周器)
OUT1の出力を反転して、INに入力します。
一番上がクロックで。OUT0が半分の周波数に変わっていますね。
OUT1を2段に変更しました。そうするとさらに半分になって元の4分の1になりました。
OUT1を3段に変更しました。そうする元の6分の1になりました。段数x2の分周器になるみたいですね。8段で16分周器、16段で32分周器となります。
OSC0を最大限遅くして、さらに16段のPIPEを通すことでHIGHが4秒、LOWが4秒の信号が作れました。
OSC0のクロックなどを調整することで、1秒間隔のLチカも作れますね。
まとめ
GreenPAKで任意の長さのLチカを作るときにPipe Delayを使うと良さそうです。Arduinoだとdelay()でミリ秒を入れればかんたんに遅延が作れますが、ロジックだといろいろ調整が面倒な感じです。まあ、そうゆう用途ではないのでしょうね。
次回に残っているマクロセルをざっくり紹介したいと思います。
コメント