« MITOUJTAGでSH3-DSPのバウンダリスキャン | トップページ | あけましておめでとうございます »

2010.12.30

Spartan-6でMicroBlazeを動かす

今年の懸案は今年のうちに解決したいと思い、いろいろやっています。

昨日からSpartan-6にMicroBlazeを入れることを行っていました。
せっかくMicroBlazeを入れてもLEDチカチカだけだと面白くないので、UARTとDDR2 SDRAMコントローラを入れました。

特電Spartan-6ボードの汎用I/OポートにTTL-RS232Cレベル変換基板(写真左の基板、トラ技の付録)をつないで、RS232Cの通信ができるようにしました。
Sprs232c

そして、MicroBlazeとUARTLiteと、GPIOと、DDR2コントローラが入った回路をFPGAに書き込みます。

アドレスマップは、
Address Map for Processor microblaze_0
(0000000000-0x00007fff) dlmb_cntlr dlmb
(0000000000-0x00007fff) ilmb_cntlr ilmb
(0x48000000-0x4bffffff) MCB_DDR2 mb_plb
(0x48000000-0x4bffffff) MCB_DDR2 microblaze_0_DXCL
(0x48000000-0x4bffffff) MCB_DDR2 microblaze_0_IXCL
(0x81400000-0x8140ffff) LEDS mb_plb
(0x84000000-0x8400ffff) RS232 mb_plb
(0x84400000-0x8440ffff) mdm_0 mb_plb
です。DDR2メモリは48000000~4BFFFFFFに配置されています。

MicroBlazeのソフトウェアとして「トラ技BIOS」を改良した32bit版のシンプルなモニタを作って入れました。
Mbmonitor

プログラムのサイズは、今のところこんなものです。
text data bss dec hex
4238 296 3210 7744 1e40
それから、HEXファイルのロードができるようになりました。

これで、DDR2 SDRAMにプログラムをロードできるようになったので、BlockRAMのサイズを気にせず64MBytesまでのプログラムが動かせます。

下の図は、EDKのサンプルプロジェクトであるTestApp_Peripheral_microblaze_0を、アドレス0x48000000に配置されたDDR2 SDRAMにロードして実行している姿です。

Mb_hexload

MicroBlaze用にコンパイルしたファイルはELF形式ですが、XILINX Bashシェルで、
mb-objcopy -O ihex -S executable.elf test.hex
とコマンド入力することで、HEXファイルにできます。
このシンプルなモニタからHEXをロードしてDDR2 SDRAM上に展開して実行するということができるというわけです。

MicroBlazeを組み込んだFPGAのデザインをBitファイルで配布しておけば、EDKがなくてもMicroBlazeを使ったシステム開発ができるようになります。
たしか、MicroBlaze用GCC環境だけなら無料で入手できるはずです。

特電Spartan-6ボード(TKDN-SP6-16)用に論理合成したBitファイルはこちらにおいておきます。
「download.bit」をダウンロード
このBitファイルをSPI ROMに書き込んでおけば、スイッチONですぐに動きます。

CN2の21番ピンからTXD、CN2の23番ピンからRXDが出ています。ここにTTL-RS232C変換基板をつなげれば、このシンプルなモニタが使用できます。

ISEとEDKのプロジェクトのソース一式はJTAGひろばの方に後ほどアップロードします。

目標は特電Spartan-6ボードでLinuxを動かすこと!
その前にLinuxのブートローダを動かしたい。
そこまでいけるかな・・

当社のSpartan-6ボードをお持ちの方で協力していただける方がいらっしゃいましたら嬉しいです。

|

« MITOUJTAGでSH3-DSPのバウンダリスキャン | トップページ | あけましておめでとうございます »

コメント

先日microblazeについて質問させていただいたものです。
初期に購入した45Kのボードを使用していますが、microblaze+コードのbitファイルを直接FPGAに書き込むと動作するのですが、同じbitファイルをSPI ROMに書き込んだ場合、電源ONだけでは起動しません。
なにかコツがあるのでしょうか。

投稿: しろたん | 2011.01.07 23:11

それがよくわからないのです。

こちらでは起動しないような状態が再現せず、必ず起動しています。考えられる違いとしては、ISEのBitStreamの生成オプションで、コンフィグクロックの速度を26MHzに上げたことと、UnusedなピンをPullupに変更したことがあります。

よろしくご検討お願いします。

投稿: なひたふ | 2011.01.08 11:46

Bitgen.utのオプションを変更したら動きました。ありがとうございます。
TdoPin PULLUP
StartUpClk CCLK
Unusedpin PULLUP
ConfigRate 26

投稿: しろたn | 2011.01.14 09:27

しろたん様、ご連絡ありがとうございます。
ConfigRateが効いたのか、Unused Pinが効いたのかわかりませんが、動いたようでよかったです。

投稿: なひたふ | 2011.01.15 15:10

コメントを書く



(ウェブ上には掲載しません)




« MITOUJTAGでSH3-DSPのバウンダリスキャン | トップページ | あけましておめでとうございます »