nao-milkの経験ブログ

25年間の半導体エンジニア経験で知り得た内容を記載したブログです。

NIOSでprintfを使用する場合

f:id:nao-milk:20210323082036p:plain

NIOSを使った時のデバッグ出力についてです。

JTAG_UARTを用いてprintfでデバッグ出力している場合は気を付ける場合があります。

 

USB Blasterと繋げている場合は出力表示されますが、

未接続の場合は、printfで止まる可能性があるので、気を付けてください。

 

特に、FPGA内蔵RAMにプログラムを保存し、USB Blasterと接続せず自走させて動かす時、このことを忘れていて動かない、ってこともあります。

 

 

記述例

実機評価(確認)中、SignalTapとprintfの表示とでデバッグしていくと思います。

その時、printfをバンバン入れていくと思いますが、製品として出す前にprintfを1つ1つ削除するのは、面倒だと思います。

 

そこで、下記のようにprintfにラッパー(display)を被せるようにすれば、一発でprintfを無効にできます。

 

f:id:nao-milk:20210322232745p:plain

 

使い方

上記述例を基準に説明します。

 

デバッグ表示させたいソースに「DebugDisplay.h」をインクルードし、printfを使用せず、ラッパーのdisplay()を使用して、printfの引数のように記述します。

(13,25,28行目の記述例)

デバッグ時はこの記述例の「DebugDisplay.h」で良いです。

 

デバッグが完了し、USB Blasterを接続せずに自走させて動作確認する場合は、「DebugDisplay.h」の4行目を

#define DEBUG_MODE (0)

に変更して、再コンパイルして使用します。

このDEBUG_MODEが0になると、8行目のdisplayが有効になり、printf()が使用されなくなります。

 

最後に

実機動作確認で、気付きにくい所なので、注意してください。

また、printfが消えることにより、処理時間が変わります。

アクセス間隔が短くなり、今までうまくいっていた所がうまくいかなくなったりするので、その場合は、関数sleep()などでアクセス間隔を長くすると動く場合があります。