かずの不定期便ブログ

備忘録代わりに書きます

Xilinx FPGA ILAを利用した簡易ロジックアナライザ―の製作(333MHz) その2

前回の記事でbit streamの作成まで終わりました。今回はその続きで、実際に信号をキャプチャするところまで記事にします。
前回の記事はこちら
spend-carefree.hatenablog.com

bit streamの書き込み

  • Bitstream Generation successfully completed の画面が出たら,Open Hardware Managerを選択してVivadoとFPGAを接続する準備をします。
  • Open targetを押して、Auto connectで繋ぎます。(先ほど電源を入れていたFPGAボードをvivadoが見つけてくれます)
  • まだFPGAにbit streamを流し込んでないので、Program deviceを押して、FPGAに書き込みます。Bitsream fileとDebug probes fileのところはそのままでprogramボタンを押します。(*)

ILAの操作(信号を取り込みます)

  • hw_ila_1というwindowsが生成されます。floatボタンを押して1画面にすると見やすいです。
    windowに3画面配置されていますが、左下ペインのSettingタブの"trigger position in window"でトリガ位置から過去何サンプル分を取り込むかを設定できます。
    僕は500と設定していますが、デフォルト値としてサンプリングdepthの半分の位置が入っています。(*)
  • 右下ペインTrigger Setupでトリガを設定できます。+マークをクリックしてトリガを追加します。
  • +マークを押すとDATOUT[15:0],LED5_B_OBUFが出てきます。今回はボタン0を押すことをトリガとしたいのでLED5_B_OBUFを選択します。
    Operatorで検出条件,Valueで検出値(条件との比較値だけでなくエッジ検出方向も選択可能です),radixValueの表現方法を選択します。今回は1bitの信号なのでBを選択、Valueでは立ち上がり検出としました(*)
  • 上側のペインに波形windowがありますが、信号としてDATAOUT[15:0],LED5_B_OBUFが出ています。
    順に16ch分のサンプリングされた信号、Button0を押したことを検出した信号が表示されます
  • 波形windowの▶マーク(Run trigger for this ILA core)を押します。するとILAはトリガ発生待ち状態へ移行します。左下のペインをStatusタブへ切り替えましょう。するとCore statusが"Waiting for Trigger"になります
  • 波形を取得する対象ロジックを動作させたのち、ボタン0を押します。すると波形が出力されてStatusはIdleへ移行します。
  • 波形を拡大したものを以下に示します
波形拡大、トリガ付近(333MHz)

LED5_B_OBUF信号がボタンを押した時のトリガ信号でクロックは333MHz,1サイクル分の"H"信号が出ています。
DATOUTが色々変化しているのが分かるかと思います。今回probeしているのはDATOUT[8],DATOUT[3:0]のみです。

以上で、FPGAを簡易ロジアナ化することが出来ました。

PYNQがロジアナになりました

簡易ロジアナとして動作させている写真を載せます。
左下の緑のLEDのそばにあるプッシュボタンが取り込みトリガになっています。

PYNQのロジアナ化の様子

ILI9486へのバスアクセスの速度実験の波形取得

最後に、簡易ロジアナの作成のきっかけになったILI9486へのバスアクセスの速度実験を行った時の波形を載せます。

GPIO速度実験

WRX↑の度にGPIO15とGPIO18のレベルは反転して、かつWRX↑の時は両信号とも安定しています。
また、2回分のWRX↑は波形上の黄色の破線(511)~黄色の実線(535)で測定すると535-511=24cycle、つまり24x3ns=72nsかかっています。つまり1pix分のライトに72nsかかります。1frame分だと320*480*72ns=約11msと大分早いです。以前の記事だと16ms程度かかっているのですが、、局所的には早いのかもしれません。linux上で動くのでばらつくのだろうと理解します。
前回気にしていたWRX間隔は24nsしかないところもあり、規格66nsに対し割れています。
またWRXのH幅,L幅は9nsでこちらも規格15nsに対し割れています(サンプリング間隔が3nsなので9nsより小さいかも)
前回の測定できなかった時の記事はこちら
spend-carefree.hatenablog.com

動画表示プログラムでの波形

実動画表示プログラムでは遅くなっている事を期待して観測してみました。[8]=WRX, [3:0]=D[3:0]に対応しています。

動画表示プログラムでの波形

結果、先ほどのGPIO速度実験と変わりません。特になんら問題なくLCD表示ができているところから考えると、SPEC表は動作温度がもっと高いところとか、電圧が下側に振れているなど条件が悪い時もカバーした値なので、今この環境下での動作では特に問題ないのかもしれません。

以上で、意外と長くなったPYNQのロジアナ化の記事を終えたいと思います。
また何か思いついたら電子工作したいと思います。

vivadoオペレーションのスクリーンショット

program device

ILA画面 trigger positionの設定

ILA画面 トリガの設定

参考にしたもの

FPGA プログラミング大全 Xilinx