EDKでハードウェア作成
MicroBlazeを埋め込んだFPGAデザインを作るには、XILINX ISEとEDKを使います。EDKの使ったMicroBlazeの作成方法はかなり複雑なので、詳しくは下記のページご覧ください。
- MicroBlazeの使い方
http://www.tokudenkairo.co.jp/art7/microblaze.html
ISE&EDKプロジェクトのダウンロード
本文書では、特電Artix-7ボード用にビルドされたISE&EDKのデザインをダウンロードするところからスタートします。まずは、下記のリンクをクリックして、Artix-7ボード用のMicroBlazeデザインをダウンロードしてください。
- Linux対応・Artix-7 MicroBlazeデザイン (2014/08/03 16MByte)
このアーカイブを解凍すると、a7mb_linux_iseというフォルダにISEのプロジェクト一式が入っています。この中のfpga_withmmu.xiseがISEのプロジェクトファイルです。
プロジェクトを開く
まずは、ISEでこのfpga_withmmu.xiseを開いてください。
すると、下の図のようにISEのプロジェクトが開きます。
プロジェクトの構成
このプロジェクトは、CPUという名前にMicroBlazeをインプリメントしただけのもので、FPGAのロジック部分には特に何も入れていません。
main.vhdがメインのVHDLファイルです。このmain.vhdの中に、CPUという名のモジュールとして提供させるMicroBlazeをインスタンシエートしています。MicroBlazeにインプリメントされたSPIモジュールのうちの1つはボード上のFPGAのコンフィグ用SPI ROMと兼用しているので、そのままではSCK信号を動かせません。
そこで、
STARTUPE2_inst : STARTUPE2 port map (CFGCLK => open, CFGMCLK => open, EOS => open, PREQ => open, CLK => '0', GSR => '0', GTS => '0', KEYCLEARB => '0', PACK => '0', USRCCLKO => SCK, USRCCLKTS => '0', USRDONEO => '0', USRDONETS => '0' );
と、STARTUPE2をインスタンシエートすることでコンフィグ用のCCLKピンをFPGA内のロジックから動かせるようにしています。
EDKプロジェクトの中身
プロジェクトにあるCPUというアイコンをクリックすると、EDKが起動します。
どのようなIPモジュールが使用されているかが表示されます。
MicroBlazeのローカルメモリバス(LMB)に、d_bramとi_bramという2つのBlockRAMがつながっています。これはキャッシュメモリとして動作します。
AXIバスにはaxi4_0とaxi4lite_0の2種類があります。axi4_0はフル規格のAXIバスで、DDR3メモリに接続されています。axi4liteはLite版で、デバッグモジュールや割り込みコントローラ、LEDなどのGPIO、SPI、RS232Cなどペリフェラルが接続されています。
より詳細なバスの構成について
バスの構成をさらに詳しく見ると、次の図のようになっています。
プロセッサの2つのAXIマスタポート(M_AXI_DCとM_AXI_IC)から出たAXIバスはインタコネクトを介してDDR3メモリコントローラへ接続されています。DDR3メモリコントローラは400MHzクロックで動作(データレートは800MB/s)で動作するようになっています。
また、LMBマスタポート(DLMBとILMB)からデータバスはBRAMコントローラを介して、BLAM BlockのPORTAとPORTBに接続されています。
プロセッサの構成について
プロセッサの構成で重要な部分を以下に示します。
- バレルシフタ(Barrel Shifter)・・・使用
- 浮動小数点ユニット(Floating Point Unit)・・・EXTENDED
- 整数乗算器(Integer Multiplier)・・・MUL64
- 整数除算器(Intefger Divider)・・・使用
- MMUの有無・・・有
- キャッシュの設定・・・各16kB
MMUを使うという選択を採る段階で、かなり高機能なMicroBlazeになります。(その分、使用リソースも増えます)
ビルドを行う
EDKの入ったプロジェクトですが、Generate Programing Filesを行えば、普通にプロジェクトが生成されます。最初の1回目は少し長い時間がかかります。

参考までに生成されたレポートのうち、重要な部分を抜粋したものを示します。このレポートによると、使用スライス数は36%で、使用メモリ量は15%程度です。
| Device Utilization Summary | |||||
| Slice Logic Utilization | Used | Available | Utilization | Note(s) | |
| Number of Slice Registers | 11,101 | 126,800 | 8% | ||
| Number of Slice LUTs | 12,576 | 63,400 | 19% | ||
| Number of occupied Slices | 5,768 | 15,850 | 36% | ||
| Number of LUT Flip Flop pairs used | 15,906 | ||||
| Number with an unused Flip Flop | 5,623 | 15,906 | 35% | ||
| Number with an unused LUT | 3,330 | 15,906 | 20% | ||
| Number of fully used LUT-FF pairs | 6,953 | 15,906 | 43% | ||
| Number of unique control sets | 661 | ||||
| Number of slice register sites lost to control set restrictions |
2,624 | 126,800 | 2% | ||
| Number of bonded IOBs | 68 | 210 | 32% | ||
| Number of RAMB36E1/FIFO36E1s | 21 | 135 | 15% | ||
MMU入りで、FPUや乗算器などがフルに入ったMicroBlazeですがXC7A100Tの36%でできました。残り7割近くをユーザロジックに割り当てることができます。
逆に考えれば、より小さな規模のArtix-7、XC7A50TではLinuxを動作させることは相当に苦しいことが予想されます。










