MicroBlazeの組み込み方(セミナ受講して復習してみました)
9月 28, 2012 コメントを残す
本日、大崎にある新光商事さんへ行き、「MicroBlaze」のミニセミナを受講してきました。
そこで学習したものを、弊社所有のVC707で復習がてら忘れないために行ってみました。
はっきり言って手順をそのまま箇条書きのように書いているので、大量、見づらい、読みにくいですが、かなり細かく書きました。
-
流れの解説
一通りの流れを以下に示す。
流れ |
ツール |
アクションと目的 |
① |
ISE |
プロジェクト作成、全体のプロジェクトを作成する |
② |
ISE |
新規EDKプロジェクトソース追加、MicroBlazeコア部分。EDKが起動する。 |
③ |
EDK |
EDK起動後、BSBウィザードで MicroBlaze に関する各種初期設定を行う。これが MicroBlaze部分の開発。 |
④ |
ISE |
トップレベル階層の VHDL を自動で作成し、コンパイル。 |
⑤ |
ISE |
SDKの為の HW デザインをエクスポートする。 |
⑥ |
SDK |
SDKで Cプロジェクトを作成する。 |
⑦ |
SDK |
Cソースを作成し、elf ファイルを作る。 |
⑧ |
SDK |
ボード上で走らせデバッグする |
⑨ |
ISE |
MicroBlaze プログラム (elf)を含めて ISE でコンパイルし 最終ビットファイルを作成する。 |
⑩ |
IMPACT |
プログラミングして実行。 |
-
作成するもの
ボード上の ボタンを押すと 対応するLED が点灯するというプログラムを MicroBlaze上で動かす。
[23]のボタンで、[22]の LED を点灯させる。
-
手順
- ISE: ISEを起動し、プロジェクトを作成する。
ISE 14.2 を起動する。
ダブルクリック
ISE 起動
[File] → [New Project]
[Name] は TestVC707 にした。
[Location]は適宜。
[Next] ボタン
Project Setting では、デバイスなどの情報を設定する。
今回は、もともと VC707 という「ボード」がサポートされているので、[Evaluation Development Board] で [Virtex-7 VC707 Evaluation Platform] を選択。
[Next]ボタン
サマリが表示されるので [Finish] ボタン
Hierarchy に VC707 のデバイスが表示される。
- ISE: ISEプロジェクトに、新規 EDK プロジェクトソースを追加する。
[Project]メニュー→[New Source…]
[Embedded Processor] を選び、File name には SYSTEM とつけた。
Location はそのまま。Add to project はチェックが入っている状態で
[Next]ボタン
サマリが表示されるので [Finish] ボタン
すると、しばらく EDK ファイルを作成し、 EDK (Xilinx Platform Studio) が起動する。
- EDK: EDK起動後、BSBウィザードで MicroBlaze に関する各種初期設定を行う。
BSB Wizard で作るか聞いてくるので [Yes]
使うバスタイプを決める。Virtex7 では AXI(アクシーと発音) しか選べない。
[OK] ボタン
ボード情報があるかどうかなので、あるので、そのまま[Next]
ここでは、プロセッサ、ペリフェラルの設定ができる。
上から、プロセッサの周波数。50/100/150 MHz を選択できる。
とりあえず 100MHz で。
Local Memory 、Instruction/ Data Cache は 8kB で。
ペリフェラル関連は、コンパイル時間を短くするために、
LEDs_8Bits
Push_Buttons_5Bits
以外は Remove
で[Finish]
EDK のプロジェクトを作成中。。。
終わるとこんな画面。
この時点で、この SYSTEM の UCFが作成されている。
”SYSTEM\data" フォルダに "SYSTEM.ucf" ができている。
本来、ここでバスにぶら下げる IP を追加したりするが、今回はとりあえずこれで終了処理。
EDK を閉じる。
- ISE: トップレベル階層の VHDL を自動で作成。UCF追加してコンパイル。
ISE に戻り、トップレベルの VHDL を作成する。(そのままではコンパイルできないので、ラッパーを作成するということ)
Hierarchy で先程作成した SYSTEM (SYSTEM\SYSTEM.xmp) をハイライトする。
Process: SYSTEM で、[Generate Top HDL Source] をダブルクリック。
作成できると、Hierarchy には SYSTEM_top.vhd が追加され、先程の SYSTEM はその下に入る。
[Project]メニュー->[ADD Source] で SYSTEM\data\SYSTEM.ucf を追加。
チェック OK なので、[OK]ボタン
Hierarchy に追加された。
ここで、SYSTEM.ucf を一部修正する。
この UCF の最後から2行目
の "CLK" を "CLK_P" にする。
なぜ修正するかは、吐き出された UCF のタイミングのネット名 "CLK" が本来の差動で定義されている "CLK_P" と "CLK_N" にあっていないから。
全て保存して、Hierarchy の SYSTEM_top を選択。
Processes: SYSTEM_top – STRUCTURE の [Generate Programming File] をダブルクリック。
まつこと数十分
結果抜粋
Slice Logic Utilization |
Used |
Available |
Utilization |
Number of occupied Slice |
750 |
75,900 |
1% |
Number of RAMB36E1/FIFO 36E1s |
2 |
1,030 |
1% |
Number of BUFG/BUFGCTRLs |
2 |
32 |
6% |
Number of DSP48E1s |
3 |
2,800 |
1% |
Number of MMCME2_ADVs |
1 |
14 |
7% |
これで、MicroBlaze を組み込んだ FPGA 全体が完成する。
ただし、プログラムがないので、SDKで作成する。
- ISE: SDKの為の HW デザインをエクスポートする。
SDK で MicroBlaze のプログラムを組むために、 ISE から HW デザインを エクスポートする。
Hierarchy で SYSTEM_i – SYSTEM (SYSTEM\SYSTEM.xmp) をハイライト。
Processes: SYSTEM_i – SYSTEM で [Export Hardware Design To SDK with Bitstream" をダブルクリック。
成功すると SDK が起動する。
- SDK: SDKで Cプロジェクトを作成する。
起動すると以下のダイアログが表示される。
SDK のワークスペースを指定する。
ISE のプロジェクトフォルダ内の、"SYSTEM\SDK\SDK_Export" を選ぶ。
こんなような SDK の開発環境の画面が開く。
とりあえず何もないので、Cプロジェクトを作成するウィザードを実行する。
[File]メニュー→[New] → [Xilinx Cproject]
デフォルトは「hello_world_0」プロジェクトを作る感じなのだが、スケルトンがいくつかあるので紹介。
スケルトン |
記述 |
Dhrystone |
ベンチマークプログラム |
Empty Application |
空の C プロジェクト |
Hello World |
Let’s say ‘Hello World’ in C. らしい。 |
lwIP Echo Server |
lwIP (light-weight IO stack) のデモプログラム!! |
Memory Tests |
ハードウェア内のメモリ・リージョンのテスト |
Peripheral Tests |
ハードウェア内のすべてのペリフェラルの為の簡単なテストルーチン。 |
SREC Bootloader |
non volatile memory (不揮発メモリ)から SREC イメージを読み込むシンプルなブートローダ。 |
Xilkernel POSIX Threads Demo |
Xilkernel (ザイリンクスのカーネル?) ベースで複数の POSIX スレッドを動かすデモ。 |
Zynq FSBL |
Zynq デバイスの為の First Stage Bootloader(FSBL) |
とりえず今回は [Empty Application] を選んで [Next]
ここもそのまま [Finish]
すると中央に情報が表示される。
ターゲット情報
OS情報
周辺回路情報
ライブラリについて
- SDK: Cソースを追加する。
やっと、Cソースを追加することができる。
Project Explorer の [empty_application_0] のしたの [src] にソースを追加する。
[File] → [New] → [Source File]
Source Folder の [Browse] をクリック
src を選んで [OK]
Source File には "main.c"
Template では [Default C SOurce template]
を選んで [Finish]
空の Cソースが作成される。
このファイルに記述していく。
とりあえず、細かい説明は抜きに以下のソースを張り付ける。
|
#include "xparameters.h" // Definition Address Space of Board #include "xgpio_l.h"
int main(void) { unsighned int sw_in = 0;
while(1) { // Get push button bit sw_in = XGpio_ReadReg(XPAR_PUSH_BUTTONS_5BITS_BASEADDR,1); // Set LED bit by push button XGpio_WriteReg(XPAR_LEDS_8BITS_BASEADDR,1,sw_in); } }
|
セーブすると、勝手にビルドして elf ファイルが作成される。
- SDK: ボード上で走らせデバッグする
SDK は起動させたまま。
VC707 の JTAG (micro USB) ポートと PC を USB ケーブルで接続。
VC707 の電源を投入。
SDK から、FPGA へプログラムを書き込む。
[Xilinx Tools] メニュー → [Program FPGA]
下段の [Software Configuration] の部分を変更する。
ドロップダウンで elf ファイルがあるので、選択。
[Program] ボタン。
プログラム中。。。(JTAG 経由で デバイスははデフォルトで勝手に探してくれる模様)
書き込み終わったら、実行方法を設定。
[Run] メニューの [Run Configurations..]
ダイアログが開くので [Xilinx C/C++ ELF] をダブルクリック。
empty_application_0_Debug というものが追加され、右のペーンで設定ができる。
今回は特になし。
[RUN] ボタン。
これで、実行された。
VC707 上の ボタンで 対応したビットのLED が点灯する。
デバッグする。
一度、停止させる。停止させるには、Console のタブにある
このボタンで停止。
このマークでデバッグモードに入る。
[Yes]
デバッグモードでは SDK の見た目が少し変わる。
ソースにブレイクポイントがかけられる。
変数をウォッチしたり、一通りのデバッグ機能はある。
ここで、ソースをデバッグしたりして、完成したら次のフェーズへ。
- ISE: MicroBlaze プログラム (elf) を含めて ISE でコンパイルし 最終ビットファイルを作成する。
SDK でプログラム(elf) のデバッグも終わったら終了させる。
ISE に戻り、
Hierarchy で SYSTEM_i をハイライト。
[Project] → [Add Source] で、"SYSTEM\SDK\SDK_Export\empty_application_0\Debug" の下にある elf ファイルを選択。
[OK]
上がシミュレーションで使うか?下が実装するか?のオプション。
通常、どちらもチェックして[OK]
SYSTEM_i の下に elf が追加された。
Hierarchy で SYSTEM_top をハイライト。
新しく elf が追加されたので、[Generate Programming File] が ? マークになっている。
[[Generate Programming File] をダブルクリックして bit ファイルを作成。
- Impact でダウンロード
ISE で、[Tool] メニューから [IMPACT] を選択。
IMPACT プロジェクトがないのでなんやかんや。
といあえず[OK]しかないので [OK]
Xilinx へ情報提供。1分といことだが、時間が無いのでまたの機会に。[No]で。
IMPACT の画面。
[Boundary Scan] をダブルクリック。
右のペーンに 「Right click to Add Device or Initialize TAG chain」と出ているので「右クリック」→ [Initialize chain]
コンフィグファイルをアサインしたいので [Yes]
System_top.bit を選択し [Open]
Flash PROM サポートしてるけど、SPI or BPI PROM にアタッチするか?
よく意味がわからないけど、PROM に書き込むか聞いているらしい。
今回は、普通にコンフィグのみなので、No にしておく。
Verify は チェックが入らない。
[OK]
[Program] をダブルクリック。
電源を切ってもう一度。
Baundary Scan -> bit ファイル指定→Program
動作した。