INTESTを使ってFPGAをステップ実行させる
FPGAがCPUと比べて難しい理由のひとつとして、デバッグ時にステップ実行ができない、ということが挙げられます。CPUならばデバッガを使って1命令ずつステップ実行させて様子を見ることができますが、FPGAではそうはいきません。HDLで記述した回路が論理合成されたら、何百MHzという速度で動いてしまい、途中で止めたり操作することはできません。
このことが、FPGAのデバッグを難しくしている原因と考え、JTAGを使って解決する方法をいくつか考えています。
まずは、JTAGバウンダリスキャンのINTESTを使う方法。
JTAGのバウンダリスキャンには、EXTESTとINTESTという2つのモードがあります。
EXTESTは次の図に示すように、FPGAの端子を操作して外向きに信号を作り出し、基板上にあるFPGA外のデバイスへアクセスします。これは、いままで何度もこのブログで紹介してきた方法で、強力な回路デバッグ方法です。

それに対して、INTESTというのは、FPGAの端子を操作して、その操作結果を内向きに出すモードです。端子を操作してFPGAの中のコアを操作し、コアが出力する信号をJTAGで取り出すというものです。

つまり、FPGAから見た外界(プリント基板上の各種信号)の状況をパソコンを使ってエミュレートして作り出してやれば、FPGAの動作を、まるでクロックを1個1個与えるように止めて見ることができるはずです。
そこで、Spartan3ANを使ってバイナリカウンタを組み、LEDの端子へ出力する回路を作って実験することにしました。FPGAは次の図のようなピン配置になりました。このデザインでは50MHzの速度でカウントアップするので、通常動作時のLEDの点滅は早すぎて目に見えません。
MITOUJTAG BASICを使って、FPGAをINTESTモードに入れます。
この時点でFPGAの動作は停止します。
そして、画面上に表示されたクロックの端子をマウスでクリックし、H→L→H→L→・・・という信号を与えます。
すると、なんと!!
LEDの端子がカウントアップしていく様子が
1ステップずつ観察できるではありませんか!!
マウスがクロックをカチカチすることで、FPGAをステップ実行させることができました。
INTESTは今まで本気でやったことがなかったので、この動きには驚きました。
もちろん、クロック端子をクリックしなければ、FPGAは止まったままです。
今回説明した方法だとマウスクリックを何十回あるいは何万回とやらなけばならないので実用的ではありませんが、JTAGスクリプトを使ってクロックを作り出せば、FPGAの強力な実機デバッグができるでしょう。
次はMITOUJTAG Proを使ってクロックを自動生成させてみます。(続く)
| 固定リンク
コメント