Spartan-6にMicroBlazeを実装してみた
特電Spartan-6評価ボードで、MicroBlazeを動かしてみたくなりました。
ハードウェア屋としてはキビキビと動くロジックがたまらなく好きなのですが、今日は軟弱なCプログラミングに身をゆだねてみたくなりました。
さて、Spartan-6とMicroBlazeで検索してみたところ、まだEDKはSpartan-6をサポートしていないようです。
検索しても「Spartan-6とMicroBlazeでやりたいんだけど・・」という外人の嘆きがいくつかみつかる程度で、結局のところできるのかできないのかはよくわかりません。
それに、SP601というXILINX純正のSpartan-6評価ボードのデモアプリでも、MicroBlazeを使わずにやっています。
それなら、自分でやってみましょう。まず、EDK11.3を用意します。
すると、いきなりBase System Builderの最初の画面でつまづきます。
Architectureの選択箇所でSpartan-6やVirtex-6がありません。
そのため、Architectureの選択の画面ではSpartan-3Eや3ANなど適当なやつを選んでおいて、とりあえずプロジェクトを作ります。
そして、XPS(Xilinx Platform Studio)の画面になったら、Project Optionのところで右クリックして、FPGAのデバイスをSpartan-6に変更します。これで、Spartan-6が選択できます。
プロジェクトのオプション設定画面では、Spartan-6がサポートされています。
これで、プロジェクトをSpartan-6にすることができます。
しかし、Spartan-3の場合のIPコアがこれだけ(↓)たくさんあるのに対して、
Spartan-6のIPコアはこれだけ(↓)しかありません。
GPIOとかもありません。そのため、MicroBlazeを使ったシステムを構成する際には、いったんSpartan-3で作ってから、最後にアーキテクチャをSpartan-6に変更するという荒業を使わなければなりません。
なにはともあれ、こうすることで論理合成は最後まで通ります。
このようにして、Spartan-6向けに、8bitのLED出力ポートと、1個のスイッチ入力ポートを入れたシステムを作りました。
論理合成の結果(重要なところのみ)を見ると、
Number of occupied Slices 479 2,278 21%
Number of RAMB16BWERs 4 32 12%
Number of DSP48A1s 3 32 9%
となっていました。Sliceは21%消費し、メモリは4個消費します。DSP48ブロックも3個使われています。
MicroBlazeのサイズをマイクロとみるかビッグとみるかは人それぞれでしょう。
そして、XPSのApplicationタブの中の、目的のプロジェクトに、Mark Initialize BRAMのチェックをつけて、[Device Configuration]->[Update Bitstream]を行い、[Device Configuration]->[Download Bitstream]を行うと、作ったプログラムが動きます。
デバッガ(XMD)を起動すると、Spartan-6は「EARLY ACCESS」だと言って無数の警告を出してきますが、なんとか動作してくれてはいるようです。
InsightっぽいGUIのデバッグツールも、ちゃんと動いています。
(UARTを作っていないので、サンプルプログラムにあるprintとかいう関数をコメントアウトしてやらないと、とまってしまう)
こんな感じで、Spartan-3でプロジェクトを作ってからSpartan-6に移行するというやりかたで、Spartan-6に無理やりMicroBlazeを実装できることはできました。
EDK11.3ではまだSpartan-6は正式に対応されているわけではありませんので、ご注意ください。
この検証結果が皆様の何かのお役に立てば幸いです。
| 固定リンク
コメント
C は軟弱ですか、、、残念だなぁ、、、
投稿: りょうす | 2009.12.02 10:06
りょうすさんこんにちは
>C は軟弱ですか、、、残念だなぁ、、、
いえいえ、ただの戯言です。聞き逃してください。
詳しくは、ET2009で配ったチラシの裏を・・
投稿: なひたふ | 2009.12.03 11:58