仮想I/O (VIO) IPコアを使ったFPGAのデバッグ

今回は、LogiCORE IP Virtual Input/Output (VIO) コアを用いてFPGAの内部信号をPCからコントロールしてみます。

どんなことができるのか

VIOを使うと、Vivadoの画面上でピンや信号線の状態を監視したり、操作したりすることができます。

ILAと同じくデバッグ用のIPコアです。
波形を見たいときはILAを使い、信号線をPCから操作したいときはVIOを使うといった感じでデバッグをしていきます。

下の画像は、LEDが接続されたピンを操作して、ZYBO上のLEDをコントロールしている様子です。

今回はVIOの使い方について書いていこうと思います。

開発環境

Vivado 2017.1
ZYBO

ブロックデザイン

今回作成したブロックデザインを下に示します。
使用しているIPコアは、VIOとZYNQ7 Processing Systemです。
ZYBOはPL側にクロックを持っていないため、PSのFCLK_CLK0(100MHz)からPLにクロックを供給しています。
直接クロックがつながっているボードを使用する場合は必要ありません。

VIOの入力にはスライドスイッチ4つ、出力にはLED4つを接続しています。

VIOの設定を下に示します。
1ページ目の「Enable Input Probe Activity Detectors」を設定すると、入力信号の立ち上がり、立ち下がりといった変化を検出して画面に表示させることができます。

以上のように設定して、Create HDL Wrapperを実行しました。

IO planning

VIOにつなぐスイッチとLEDのピンを設定しました。
ZYBOでは
SW0…G15 SW1…P15 SW2…W13 SW3…T16
LED0…M14 LED1…M15 LED2…G14 LED3…D18
です。

論理合成

ここまで設定が終わったらGenerate Bitstreamを実行します。

書き込み

HardwareManagerを開いてボードと接続し、Bitstreamを書き込みます。
ZYBOの場合、まだPSが動いていない(PL側にクロックの供給が開始していない)ため、まだVIOの検出がされません。
f:id:taltalp:20170517153811p:plain

PSを動かす

ZYBOのPSを動かすにはSDKHello Worldのプログラムを動かすなどする必要があります。
この内容については他のサイトにもたくさん情報があるため簡単に説明します。

(1)VivadoでFile→Export→ExportHardwareでIncrudeBitstreamにチェックをいれExport
(2)File→Launch SDK
(3)SDKでFile→New→Aplication Project
(4)プロジェクト名を適当に決めて、Next→Hello World→Finish
(5)Hello Worldプロジェクトを右クリックしてBuild Project
(6)Hello Worldプロジェクトを右クリックしてRun As→Launch on Hardware (GDB)

の手順で動きます。

VIOの管理画面

Vivadoに戻ってHardware ManagerでRefresh Deviceを実行するとVIOが検出されます。
「+」を押してAdd Probesで操作したい信号を追加します。
写真のようにピンを操作することができます。


まとめ

VIOを使ったデバッグはこのように簡単にできました。
今回はVIOから1本ずつ信号線を出しましたが、バスを出して値を指定したりなどもできたり、非常に便利なIPコアだと感じました。
ILAとともに使っていくことでだいぶデバッグが楽になりそうです。