FC2カウンター FPGAの部屋 2012年06月04日
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

SDKでstdio.h の関数を使う手順

AXI Performance Monitor を使ったアプリをSDKで作っているが、printf() とscanf() かgetc() が使いたかった。
printf() はxil_printf() があったので、stdio.h をインクルードせずに使うことが出来た。xil_printf() は、”OS and Libraries Document Collection”の2ページに書いてあった。でもxil_scanf() は無いみたいだった。stdin からの入力が使いたいので、getc() が使いたかったので、stdio.h をインクルードして、getc() を使ってみたがリンカでエラーだった。7KBytes ほどメモリが足りないようだった。
現在のMicroBlaze のメモリ容量は16KBytes だったので、32KBytes まで増やすことにした。

・XPSを立ちあげて、Addresses タブをクリックして、microblaze_0_d_bram_ctrl のSizeを16Kから32Kに変更した。
SDK_stdio_1_120604.png

・microblaze_0_i_bram_ctrl のSizeが16Kから32Kに変更された。

・ ProjectメニューからDesign Rule Check を実行したらエラー無しだった。

・XPSを終了して、PlanAheadで論理合成、インプリメント、ビットストリームの生成を行った。

・PlanAheadのFileメニューからExport -> Export Hardware... を選択し、ダイアログでLaunch SDKにチェックを入れてSDKを立ち上げた。

・もう一度ビルドしてみると、やはり同じようにリンカでメモリが足りないと言われる。

これはリンカスクリプトを作り直す必要があると思った。

・Xilinx Tools メニューからGenerate linker script を選択した。

・ダイアログで、Output script にXPS_CDC_SVGA_141_PA.sdk\SDK\SDK_Export\axi_perf_mon_test\src\lscript.ld を指定して、Generate ボタンをクリックして、リンカスクリプトを再生成した。
SDK_stdio_2_120604.png

・再度ビルドして成功した。メモリ使用状況を下に示す。

mb-size axi_perf_mon_test.elf  |tee "axi_perf_mon_test.elf.size"
   text       data        bss        dec        hex    filename
  19824       1364       2196      23384       5b58    axi_perf_mon_test.elf
Finished building: axi_perf_mon_test.elf.size


メモリを23KBytes程度使用している。
SDK_stdio_3_120604.png

現在、作ったソフトウェアが動作するかどうか?まだ確かめられていないので、動作するかどうかは分からないが、とりあえずビルドの通し方として書いておくことにする。

(追加)
getc() の代わりにscanf() をCソースに入れたらメモリ容量を32Kにしてもオーバーフローしてしまった。標準入出力関数のコード量はかなり多いみたいだ。

(追加2)
scanf() をCソースに入れたらメモリ容量を64Kにしてもオーバーフローしてしまった。使えない。@hypermac6502 さん、教えてくれてありがとうございました。
  1. 2012年06月04日 22:08 |
  2. EDK
  3. | トラックバック:0
  4. | コメント:0