FC2カウンター FPGAの部屋 MicroBlaze MCS
FC2ブログ

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

FPGAの部屋

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

MicroBlaze MCSをISE WebPACKから使用する1

MicroBlaze MCSは、手順どおりに使っても私はうまく行かなかった。うまく行った方もいらっしゃるので、うまくいくとは思う。ISE WebPACKからMicroBlaze MCSを使う方法を公開されている方がいらっしゃるので、その方の方法を試してみようと思う。
ちなみに、MicroBlaze MCSはISE WebPACKから生成できるが、ソフトウェアを作るために必要なSDKはEDKのライセンスが無いと使用できない。そこで、MicroBlazeクロスコンパイラを生成して、ソフトウェアをコンパイルして、MicroBlaze MCSで動作させる手順を示してくれているわけだ。MicroBlazeクロスコンパイラの生成スクリプトも提供されている。
そのサイトは、ひでみのアイデア帳(SweetCafe)さんだ。MicroBlazeクロスコンパイラの生成スクリプトを実行して、MicroBlazeクロスコンパイラを生成し、サンプルをやってみることにした。

使用するOSはVirtualBox上にインストールしたUbuntu11.10上で、MicroBlazeクロスコンパイラの生成スクリプトを実行して、MicroBlazeクロスコンパイラを生成してみることにした。
(Ubuntuって凄いですね。至れり尽くせりで、プリンタドライバとISEが何とかなれば、Windows無くてもこれでいいじゃね?というレベルですね。)

まずは、github 超入門を参考にして、githubにアカウントを作成してログインした。github 超入門を読んでいるとFreeで公開するならばここ置けば良いんだと思った。FPGAの部屋で公開しているISEのプロジェクトなどはここに置こうかな?なかなかZIPファイルを置ける所がないんだよな。。。

mb_mcsのスクリプトをgithubにアップ”の記事に書いてあるgithubに行くと、ZIPボタンがあって、リポジトリをZIPファイルでダウンロードすることができる。
MB_MCE_56_2012-01-29.png

aquaxis-aquaxis-58dbd58ディレクトリがダウンロード出来る。aquaxis-aquaxis-58dbd58 / MicroBlaze / CrossCompile の下にmake_microblaze_gcc がある。
MB_MCS_57_2012-01-29.png

ホームの下にMicroBlaze ディレクトリを作って、その下にmake_microblaze_gcc をコピーした。
ターミナルを起動して、MicroBlaze ディレクトリに移動して、"sudo ./make_microblaze_gcc とタイプしてビルドを開始した。数時間かかってビルド終了。無事にビルドできたようだ。
MB_MCS_58_2012-01-29.png

/usr/mircoblaze/bin の下に、microblaze-gcc などが出来ていた。成功のはず。。。
MB_MCS_59_2012-01-29.png

ホームの./bashrc に、”export PATH=$PATH:/usr/microblaze/bin”を追加して、”source .bashrc”を実行する。

aquaxis-aquaxis-58dbd58/MicroBlaze/CrossCompiler/Sample/HelloWorld に移動して、makeコマンドを実行した。下の図は実行し終わった所。
MB_MCS_60_2012-01-29.png

HelloWorld の実行ファイルが出来ていた。
MB_MCS_61_2012-01-29.png

  1. 2012年01月29日 07:47 |
  2. MicroBlaze MCS
  3. | トラックバック:0
  4. | コメント:0

MicroBlaze MCSをテストする4(SDK編2)

MicroBlaze MCSをテストする3(SDK編1)”の続き。

ソフトウェアを作成した。Atlys_LED_test.c を以下に示す。

// 
// Atlys_LED_test.c
//
// AltysボードのLEDを1秒ごとに+1するソフトウェア
// 初めは割り込みを使わないで実行する
//

#define    GPIO1_ADDR            0x80000010
#define PIT1_PRELOAD_ADDR    0x80000040
#define PIT1_COUNTER_ADDR    0x80000044
#define PIT1_CONTROL_ADDR    0x80000048

unsigned int read_counter(){
    return(*(volatile unsigned int *)(PIT1_COUNTER_ADDR));
}

int main()
{
    unsigned int b_count = 0;
    unsigned int c_count = 0;
    unsigned int led = 0;
    
    *(volatile unsigned int *)(PIT1_PRELOAD_ADDR) = 100000000// 100MHzで1秒
    *(volatile unsigned int *)(PIT1_CONTROL_ADDR) = 0x3// Timer Enable, Auto load
    
    *(volatile unsigned int *)(GPIO1_ADDR) = led;
    
    while(1){
        c_count = read_counter();
        if (c_count > b_count)    // 現在の値のほうが大きいのでオートロードした
            *(volatile unsigned int *)(GPIO1_ADDR) = led++;
        b_count = c_count;
    }
}


13.SDKで、FileメニューからNew -> Xilinx C Projectを選択して、Altys_LED_Testプロジェクトを作った。

14.Altys_LED_Test -> src にエクスプローラからAtlys_LED_test.c をドラック&ドロップした。

15.Altys_LED_Test -> Binaries にAltys_LED_Test.elf が生成された。
MB_MCS_49_120128.png

16.PlanAhead に戻って、下のコマンドをTCL Scriptタブの入力エリアにタイプし、elfファイルをビットファイルに入れる。

microblaze_mcs_data2mem SDK/Atlys_LED_test/Debug/Atlys_LED_test.elf


MB_MCS_47_120128.png

17,実行後の表示。
MB_MCS_48_120128.png

18.左のProgram and Debug の下向き三角をクリックして、iMPACTを起動する。
MB_MCS_50_120128.png

19.iMPACTでFPGAをコンフィグしたが、動作しなかった。

SDKでXilinx ToolsメニューからProgram FPGAを選択して、Programボタンをクリックしてコンフィグした。
MB_MCS_51_120128.png

しかし、Failしてしまう。
MB_MCS_52_120128.png

Data2MEM failed.だそうだ。調査中。

ISE13.3のSDKは大丈夫だ。何故だろうか?

(追記)
Project Navigator でやってもだめでした。XPS13.4で作ったMicroBlaze をSDK13.4にExportしてプロジェクトを作るとProgram FPGAも問題なく出来ます。
何が悪いんでしょうか?MicroBlaze MCSが動いているというお知らせも頂いているので、動かないはずはないと思うんですけど?

EDKがあれば、何もMicroBlaze MCSを使わなくても、ということで、今度はWebPACKで動くMicroBlaze MCSのフレームワークを作ってくれた方がいらっしゃるので、それでやってみようと思います。
  1. 2012年01月28日 13:01 |
  2. MicroBlaze MCS
  3. | トラックバック:0
  4. | コメント:0

MicroBlaze MCSをテストする3(SDK編1)

MicroBlaze MCSをテストする2-2(PlanAhead13.4仕切り直し編)”の続き。

やっと、PlanAheadでMicroBlaze MCSのインプリメント、ビットファイル生成が終了した。今度はSDKでソフトウェアを作る。

1.MB_MCS_PlanAhead_led_test2フォルダの下にSDKフォルダを作る。

2.SDKフォルダに、MB_MCS_PlanAhead_led_test2\MB_MCS_PlanAhead_led_test2.srcs\sources_1\ip\microblaze_mcs_v1_0_0\microblaze_mcs_v1_0_0_sdk.xmlをコピーする。
MB_MCS_40_120127.png

3.SDKを起動する。

4.WorkSpace LauncherでSDKフォルダを指定する。
MB_MCS_41_120127.png

5.SDKが立ち上がった。
MB_MCS_42_120127.png

6.FileメニューからNew -> Xilinx Hardware Platfrom Specification を選択する。

7.New Harware Project ダイアログが開く。Target Hardware Specification で、2.のmicroblaze_mcs_v1_0_0_sdk.xmlを指定する。

8.更に、Bitsteam に、MB_MCS_PlanAhead_led_test2\MB_MCS_PlanAhead_led_test2.runs\impl_1\microblaze_mcs_test.bit を指定する。

9.BMM File に、MB_MCS_PlanAhead_led_test2\MB_MCS_PlanAhead_led_test2.srcs\sources_1\ip\microblaze_mcs_v1_0_0\microblaze_mcs_v1_0_0_bd.bmm を指定する。
MB_MCS_43_120127.png

10.SDKに戻ると、hw_platform_0が出来ていた。microblaze_mcs_v1_0_0 のAddress Mapには、iomodule_0のアドレスが2つあるだけで、PITやGPOのアドレスが書いていない。どうやって、PITやGPOのアドレスを知るんだろうか?
MB_MCS_44_120127.png

11.LogiCORE IP MicroBlaze Micro Controller System (v1.0)の26ページのTable 13: MicroBlaze MCS Address Map にaddress MAPが書いてあった。Table 13: MicroBlaze MCS Address Map の一部を下に引用する。
MB_MCS_45_120127.png

12.今回のデザインでは、PIT1とGPO1を使用する。Table 13: MicroBlaze MCS Address Map から抜き出したMAPを下に引用する。
MB_MCS_46_120127.png
・PITはPIT1 Preload Registerにカウントする値を入れて、PIT1_CONTROLに0x3を入れてPIT0をイネーブルにして、オートロードにしておけば良さそうだ。PIT1_CONTROLの1ビット目がカウンタのイネーブルビットで、2ビット目がオートロードだ。1でオートロードで、0でカウントするとストップする。

現在、ソフトウェア作成中です。続きます。
  1. 2012年01月27日 05:38 |
  2. MicroBlaze MCS
  3. | トラックバック:0
  4. | コメント:0

MicroBlaze MCSをテストする2-2(PlanAhead13.4仕切り直し編)

MicroBlaze MCSをテストする2(PlanAhead13.4編)”の続きでもあるが、代わりでもある。正確には、”MicroBlaze MCSをテストする1(IPコアの生成、Project Navigator編)”の続きか?

LogiCORE IP MicroBlaze Micro Controller System (v1.0)を参考にする。
8ページのFigure5: Generic Tool Flow を下に引用する。
MB_MCS_35_120125.png
Figure5によると論理合成をしてから、スクリプトでBMMファイルの処理をして、インプリメントを行う。並列してSDKでソフトウェアを作って、それをスクリプトで、ハードウェア(BlockRAM)に初期化データとしてインポートする必要がある。

Create Merged BMM:2つ以上のMicroBlaze MCSコアがあるなどの理由でBMMファイルが複数ある場合は、BMMファイルをマージして1つにする必要があるようだ。 microblaze_mcs_setup.tclというtclスクリプトを実行して、microblaze_mcs_merged.bmmを生成する。tclスクリプトを実行しないでもテキストエディタで自分で編集しても良いそうだ。
Updata Tool to Use BMM:このステップは、ツールにどのBMMファイルを使用するかを指示する。tclスクリプトmicroblaze_mcs_setup.tclを実行する。プロジェクトのプロパティは、NGDBuildのコマンドにコマンドラインオプションを追加することによって、適切なBMMファイルを使用できるようになる。


MicroBlaze MCSをテストする2(PlanAhead13.4編)”の最後のインプリメント済みの状態からスタートする。

1.一旦、MicroBlaze MCSを再生成した。

2.PlanAheadのTcl Consoleで以下のコマンドを実行した。

cd H:
cd /HDL/FndtnISEWork/Spartan6/Atlys/test/MB_MCS_PlanAhead_led_test2
source MB_MCS_PlanAhead_led_test2.srcs/sources_1/ip/microblaze_mcs_v1_0_0/microblaze_mcs_setup.tcl


MB_MCS_36_120126.png
・下のTCL Consoleをクリックして、ピンクの四角のコマンド入力領域にコマンドを入力する。

3.左のImplement ボタンをクリックして、インプリメントを実行した。

4.エラー発生。
MB_MCS_37_120126.png

LogiCORE IP MicroBlaze Micro Controller System (v1.0)に”NgdBuild:989 - Failed to process BMM information”の場合の対処方法が書いてあった。
“Path to core instance”パラメータと実際のインスタンス名かパスが違っているか? “Memory Size"パラメータが実際とBMMファイルで違っているそうだ。
このMicroBlaze MCSは他のプロジェクトの物をプロジェクトフォルダごとコピーしたので、消去して、新規で生成することにした。

5.MicroBlaze MCSコンフィグレーション・ダイアログに“Path to core instance”があった。Verilogファイルのインタンス名をmcs_0にすれば良いんだ。。。

microblaze_mcs_v1_0_0 mcs_0 (
 .Clk(clk), // input Clk
 .Reset(reset), // input Reset
 .PIT1_Interrupt(PIT1_Interrupt), // output PIT1_Interrupt
 .PIT1_Toggle(PIT1_Toggle), // output PIT1_Toggle
 .GPO1(LED_out), // output [7 : 0] GPO1
 .INTC_IRQ(INTC_IRQ) // output INTC_IRQ
);


6.これでOKだった。ビットファイルまで生成できた。
MB_MCS_39_120126.png

  1. 2012年01月26日 05:53 |
  2. MicroBlaze MCS
  3. | トラックバック:0
  4. | コメント:0

MicroBlaze MCSをテストする1(IPコアの生成、Project Navigator編)

ISE13.4が出たので、早速インストールした。ISE13.4 には、MicroBlaze MCSという以前のSimple MicroBlaze の代わりとも言えるMicroBlaze コアがCore Generator に追加されている。(ISE13.4 のリリースノート
そこで、MicroBlaze MCS を試して見ることにした。MicroBlaze MCS 自体はISE WebPACKでも使用できるのだが、簡単に使用するためのSDKはEDKのライセンスが必要だ。それが残念だが、"カスタム設計の MicroBlaze”さんや、SweetCafeさんのMicroBlazeクロスコンパイラなどが必要になる。

今回はMicroBlaze MCSを生成して、SDKで動作を確認する。使用するボードはAtlysボードで、テストする内容は、”AtlysボードでXPSプロジェクトを試す2(ソフトウェアを試す)”でテストしたLED+1にする。

1.最初にAtlysボード用のプロジェクトを生成した。
MB_MCS_1_120122.png

2.Project メニューからNew Source... を選択する。

3.New Source Wizard が開く。IP(CORE Generator & Architecture Wizard) を選択し、File Name:にMB_MCS と入力する。Next > ボタンをクリックする。
MB_MCS_2_120122.png

4.Select IPでCPUを開けると、MicroBlaze MCSがあるので、それをクリックして、Next > をクリックする。
MB_MCS_3_120122.png

5.Summary ダイアログが出る。Finishボタンをクリックする。
MB_MCS_4_120122.png

6.MicroBlaze MCSのダイアログが開く。

7.MCSタブでは、動作クロックやMemory Size、IO Bus、Debug Support、MicroBlaze Trace Busを選択できる。ここでは。Enable Debug Support にチェックを入れた。
MB_MCS_5_120122.png

8.UARTタブでは、UARTの設定をすることができる。UARTは使用しない。
MB_MCS_6_120122.png

9.FITタブでは、固定値の4つのインターバル・タイマーを設定することが出来る。FITは使用しない。
MB_MCS_7_120122.png

10.PITタブでは、プログラマブル・インターバル・タイマーを4つ設定することが出来る。ここでは、PIT 1 のみ使用する。
MB_MCS_8_120122.png

11.GPOタブでは、4つの汎用出力ポートを設定する。ここでは、LEDの点灯用に8ビット分を設定する。
MB_MCS_9_120122.png

12.GPIタブでは、4つの汎用入力ポートを設定する。GPOは使用しない。
MB_MCS_10_120122.png

13.Interruptsタブでは、外部割り込み入力ポートを設定する。外部割り込みは使用しない。
MB_MCS_11_120122.png

14.これで設定が終了したので、Generateボタンをクリックする。

15.生成するに相当時間がかかったが、MicroBlaze MCSが生成された。(30分以上かかりました。PlanAheadプロジェクトだったら10秒で生成できたいう情報を見たので、PlanAheadプロジェクトでもやってみます。)
MB_MCS_12_120122.png

続く。

(追記)
PlanAheadでプロジェクトを作って、MicroBlaze MCSのIPを生成してみたら、数秒で生成できました。PlanAheadでやってみようと思います。(エラーは.xcoでElaborateしようとして、HDLでないとだめと怒られた時のエラーです)
MB_MCS_13_120122.png

続く。
  1. 2012年01月22日 12:57 |
  2. MicroBlaze MCS
  3. | トラックバック:0
  4. | コメント:0