前回の記事でbit streamの作成まで終わりました。今回はその続きで、実際に信号をキャプチャするところまで記事にします。
前回の記事はこちら
spend-carefree.hatenablog.com
- bit streamの書き込み
- ILAの操作(信号を取り込みます)
- PYNQがロジアナになりました
- ILI9486へのバスアクセスの速度実験の波形取得
- vivadoオペレーションのスクリーンショット集
- 参考にしたもの
bit streamの書き込み
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で検出値(条件との比較値だけでなくエッジ検出方向も選択可能です),radixでValueの表現方法を選択します。今回は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へ移行します。
- 波形を拡大したものを以下に示します
LED5_B_OBUF信号がボタンを押した時のトリガ信号でクロックは333MHz,1サイクル分の"H"信号が出ています。
DATOUTが色々変化しているのが分かるかと思います。今回probeしているのはDATOUT[8],DATOUT[3:0]のみです。
以上で、FPGAを簡易ロジアナ化することが出来ました。
PYNQがロジアナになりました
簡易ロジアナとして動作させている写真を載せます。
左下の緑のLEDのそばにあるプッシュボタンが取り込みトリガになっています。
ILI9486へのバスアクセスの速度実験の波形取得
最後に、簡易ロジアナの作成のきっかけになったILI9486へのバスアクセスの速度実験を行った時の波形を載せます。
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