月別アーカイブ: 2012年1月

Xilinx ISE 13.4 その3

DWM誌の付録のSP3E基板で動作しました。
注意点
Reset信号はアクティブH
MicroBlaze MCS はリトルエンディアン(MicroBlazeはビックエンディアン)

リセット信号(基板上のSWを流用)は反転させてMicroBlaze MCSに接続しました。
CoreGenで生成されるmb_bootloop_le.elfのleは、リトルエンディアンなんですね。
mb_bootloopのソースがEDKのフォルダに有るので
EDKのgnu,gnuwinにパスを通してmakeできるようにして、
ソースを変更してLEDの点灯を確認しました。
Makefileに有りますが、アセンブル時に-mlittle-endianの指定が必要です。

C言語でプログラムするには、スタートアップルーチンとリンクスクリプトが
必要になりますがどこかに適当な物があると良いのですがまだ見つけていません。
追記
スタートアップルーチンはデフォルトのもので、
リンクスクリプトはMicroBlazeで使っていた物で無事LEDが点滅しました。
コンパイル時に-mlittle-endianを指定しています。
ISE WebPACKを使っています。

コンパイル
PATH=C:\Xilinx\13.4\ISE_DS\EDK\gnu\microblaze\nt\bin;C:\Xilinx\13.4\ISE_DS\EDK\gnuwin\bin
mb-gcc -mlittle-endian -O0 -g led.c -o led.elf -Wl,-T -Wl,linker_script.ld
linker_script.ldの内容はメモリサイズに合わせて修正が必要です。

ソフト書き込み
C:\Xilinx\13.4\ISE_DS\ISE\bin\nt\data2mem -bm ipcore_dir/mb_bd.bmm -bt top.bit -bd src/led.elf tag mb -o b download.bit
download.bitをiMPACTで書き込みます。

追記2/1
リンクスクリプトはMicroBlazeのプロジェクトからコピーして使いましたが
適当な物がない場合はxilinxのサイトから入手できます。
リンクスクリプトの入手先からs3esk_microblaze_lcd.zipをダウンロードして、解凍します。
s3esk_lcd/LCD_TEST_linker_script.ldを修正して使用出来ます。
2007.10月号DWM誌にもMicroBlazeのプロジェクトが含まれています。

Xilinx ISE 13.4 その2

INTERNAL_ERRORの件ですが解決しました。
CoreGenで生成される.bmm内の定義とソースのモジュール名が一致しないのが原因でした。
bmm内でmcs_0になっていますが、
使う側では、vcoファイルのyour_instance_nameのまま使用していました。
これをmcs_0にすることで位置情報を含む???_bd.bmmが生成されて、
無事Data2memで書き込めました。
書き込んだのは、CoreGenで生成される_bootloop_le.elfなので
動作確認用にソフトを作らないといけないですね。

ISE WebPACKでもEDKがインストールされますがライセンスが無いと使えませんが、
コマンドラインでgccやmakeは動くので何か作ってみようと思います。
作りました。1/31に書きました。

Xilinx ISE 13.4

MicroBlaze MCSが追加されたので、試してみました。
CoreGenでモジュールを作成して、.veoとソースからトップモジュールを作成して
問題無く.bitファイルが生成できました。
昔MicroBlazeを使っていた頃はVHDLのソースでしたが、今回はverilogになっています。
追記2/22 CoreGenで生成するのでVHDL/Verilogが選択できます。

ソフトを組み込まないと動かないのでData2memで書き込むことにしました。
.bmmはCoreGenで作成されたフォルダに有りますが、これには位置情報がないので使えません。
system.bmm top_i/lmb_bram/lmb_bram/ramb16_s2_s2_0 [31:30] ;
system_bd.bmm top_i/lmb_bram/lmb_bram/ramb16_s2_s2_0 [31:30] PLACED = X1Y
のように_bd.bmmが必要です。
プロジェクトに.bmmを追加すると.インプリメントでエラーになります。
xilinxのds865_microblaze_mcs.pdfを見つけてmicroblaze_mcs_setup.tclを実行すると、
Translate-Propeatiesのオプションにbmmファイルを追加しますが
やっぱりインプリメントでエラーになります。
追加されたオプションを外すと.bitファイルは生成されます。

Data2memで出力をbmmに指定して生成させても位置情報が含まれていません。
やっぱりインプリメントで_bd.bmmを生成させるのが必要なようです。

進展が有れば追記します。1/30に解決しました。
INTERNAL_ERRORで進展しそうにないのでエラー詳細だけ追記します。
Tcl Console
Command>source ipcore_dir/microblaze_mcs_setup.tclを実行
microblaze_mcs_setup: Found 1 MicroBlaze MCS core.
microblaze_mcs_setup: Added “-bm” option for “mb.bmm” to ngdbuild command line options.
microblaze_mcs_setup: Done.
で成功します。
これで
Translate Propertiesの
Other Ngdbuild Command Line Optionsに
-bm “ipcore_dir/mb.bmm”
が追加されます。でrunさせると
INTERNAL_ERROR:(null):45 – Memory allocation leak of 8 bytes at 0x04F2E278 for a ‘DataFileNameListType’ record.
INTERNAL_ERROR:(null):45 – Memory allocation leak of 12 bytes at 0x04F2E2DC for a ‘AddressSpaceLinkType’ record.
INTERNAL_ERROR:(null):45 – Memory allocation leak of 60 bytes at 0x050FDC7C for ‘void *’ data.
になります。
ソースに直接bmmファイルを追加しても(オプションの指定はなしで)全く同じエラーです。
bmmファイルはCoreGenで生成された物だし
以前のMicroBlazeプロジェクトでbmmファイルをソースに含むものでも正常に処理されます。