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

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

FPGAの部屋

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

XPSのカスタムIPにおけるMPDファイルの書き方2

このブログ記事のトップは、”XPSのカスタムIPにおけるMPDファイルの書き方1
前の記事は、”XPSのカスタムIPにおけるMPDファイルの書き方1

57行目~61行目

IO_INTERFACE IO_IF = mt9d111_inf

## Bus Interfaces
BUS_INTERFACE BUS = S_AXI_LITE, BUS_STD = AXI, BUS_TYPE = SLAVE
BUS_INTERFACE BUS = M_AXI, BUS_STD = AXI, BUS_TYPE = MASTER


IO_INTERFACE IO_IF = mt9d111_inf
IO_INTERFACE は、IPと外部デバイス間のインターフェースを定義する。IO_IF でIOの名前を定義して、ここには書いてないが、IO_TYPE でIOのタイプを指定する。
mt9d111_inf グループIO信号の例

PORT init_done = "", DIR = I, IO_IF = mt9d111_inf, IO_IS = init_done


このように書いておくと、Add IPするときにグループ化される。
BUS_INTERFACE BUS = S_AXI_LITE, BUS_STD = AXI, BUS_TYPE = SLAVE
BUS_INTERFACE はバスの信号をグループ化する。BUS でバスのラベル(名前)を指定する。BUS_STD でバスの規格を指定する。BUS_TYPE でバスインタフェースのタイプを指定する。
AXI4 Stream の BUS_STD はAXIS、Master のBUS_TYPE は INITIATOR で、Slave のBUS_TYPE は TARGET となるようだ。
S_AXI_LITE バスグループの信号の例

PORT s_axi_lite_awvalid = AWVALID, DIR = I, BUS = S_AXI_LITE


BUS_INTERFACE BUS = M_AXI, BUS_STD = AXI, BUS_TYPE = MASTER
これの説明も上と同様だが、こちらの BUS_TYPE は MASTER となっている。
M_AXI バスグループの信号の例

PORT M_AXI_AWVALID = AWVALID, BUS = M_AXI, DIR = O


IO_INTERFACE とBUS_INTERFACE で指定した信号は、Add IPするときのGUI (XPS Core Config) で下の様にグループ化される。
How_to_Write_MPD_1_130401.png

GUI上のバスやIOグループの線をクリックすると内部のグループ化されている信号が見える。
How_to_Write_MPD_2_130401.png

次のブログ記事は、”XPSのカスタムIPにおけるMPDファイルの書き方3
MPDファイルの全リストは、”カメラ・インターフェースIPにAXI4 Lite Slave インターフェースを追加3(MPD, MUIファイルの作製)”を参照のこと。
  1. 2013年04月01日 05:49 |
  2. EDK
  3. | トラックバック:0
  4. | コメント:0

XPSのカスタムIPにおけるMPDファイルの書き方1

XPSプロジェクトのカスタムIPのMPDファイルの書き方を書いておこうと思う。MPDファイルはXPSプロジェクトのカスタムIPのパラメータやIOポートの情報などを書いておくファイルだ。カスタムIPフォルダ\カスタムIP名+バージョン.mpd というファイル名が付いている。現在作っている、カメラ・インターフェースIPでは、mt9d111_inf_axi_master_v1_00_a\data\mt9d111_inf_axi_master_v2_1_0.mpd がMPDファイルだ。
MPDファイルと組になるのが、MUIファイルで、設定ダイアログのGUIをXMLファイルで表している。カメラ・インターフェースIPでは、mt9d111_inf_axi_master_v1_00_a\data\mt9d111_inf_axi_master_v2_1_0.mui がMUIファイルだ。
なお、Platform Specification Format Reference Manual Embedded Development Kit (EDK) 14.1 UG642 (v14.1) April 24, 2012 をマニュアルとして参考にした。

これから、MPDファイルの書き方について解説する。これから mt9d111_inf_axi_master_v2_1_0.mpd を例にとってMPDファイルについて説明するが、最初にMPDファイルのAssignment Commands について解説する。
MPDファイルのAssignment Commands は5つで以下に示す。

• BUS_INTERFACE
• IO_INTERFACE
• OPTION
• PARAMETER
• PORT


MPDファイルに書かれる行は、このコマンドか、コメント文かのいずれかになる。

mt9d111_inf_axi_master_v2_1_0.mpd について解説する。
カメラ・インターフェースIPのAXIバス・インターフェースは2つある。1つは、カメラのデータをPS部に接続されたDDR3 SDRAMのフレームバッファにAXI HPポートを経由して書き込むAXI4 Master インターフェースで、もう1つはフレームバッファのアドレスを設定するためのレジスタ用のAXI4 Lite Slave インターフェースだ。
mt9d111_inf_axi_master_v2_1_0.mpd の46行目から55行目までを下に示す。

BEGIN mt9d111_inf_axi_master

## Peripheral Options
OPTION IPTYPE = PERIPHERAL
OPTION IMP_NETLIST = TRUE
OPTION STYLE = MIX
OPTION DESC = mt9d111_inf_axi_master
OPTION LONG_DESC = An AXI Master Camera Interface
OPTION HDL = MIXED
OPTION RUN_NGCBUILD = FALSE


・BEGIN
コンポーネント定義は BEGIN で始めて、END で終了する。
OPTION IPTYPE = PERIPHERAL
OPTION のIPTYPE には、BUS, PERIPHERAL, PROCESSOR を設定できる。PERIPHERAL は、バスにアドレスマップされるIPを表す。
OPTION IMP_NETLIST = TRUE
Platgen にインプリメント用のネットリスト(NGC) を書き出させる。
OPTION STYLE = MIX
OPTION の STYLE は、ペリフェラルのデザイン構成を表すオプションで、BLACKBOX, HDL, MIX がある。BLACKBOXは、ネットリストのみ、つまり、BBD (Black Box Definition)ファイルのNGCファイルのリストに従ってIPが構成される。
HDLはHDLのみで、PAO (Peripheral Analyze Order)ファイルのHDLファイルのリストに従ってIPが構成される。
MIX は、NGCファイルとHDLファイルの両方を使用してIPが構成される。
OPTION DESC = mt9d111_inf_axi_master
DESC はGUIツールに表示する短いIPコア名を指定する。
OPTION LONG_DESC = An AXI Master Camera Interface
LONG DESC はGUIツールに表示するIPコアの説明を指定する。
OPTION HDL = MIXED
VHDL, VERILOG, MIXED
OPTION RUN_NGCBUILD = FALSE
RUN_NGCBUILD は、NGCBUILD を実行させて、IPのネットリストを1つにまとめるオプション

次のブログ記事は、”XPSのカスタムIPにおけるMPDファイルの書き方2
MPDファイルの全リストは、”カメラ・インターフェースIPにAXI4 Lite Slave インターフェースを追加3(MPD, MUIファイルの作製)”を参照のこと。
  1. 2013年03月31日 06:30 |
  2. EDK
  3. | トラックバック:0
  4. | コメント:0

プロセッサなしでEDKでAXI IPコアを使う方法

Qsysと同じように、EDKでもプロセッサ抜きでXPSプロジェクトでAXI IPを接続できるようです。
12.3 EDK - How do I use EDK AXI IP cores in a system with no processor?日本語のページもありますが、図へのリンクが無いみたいです。一旦、BSBでMicroBlaze付きでXPSプロジェクトを構築して、後から必要ないMicroBlazeなどのIPをDeleteしています。
サンプル・プロジェクトもついています。

サンプル・プロジェクトをダウンロードして、ISEを起動しました。xc6vlx760-sff1760 を使っています。
XPSwoMB_2_130319.png

XPSプロジェクトを下に示します。
XPSwoMB_1_130319.png

DDR3 SDRAMコントローラのAXIバス出力を取り出すだけのXPSプロジェクトのようです。

プロセッサなしで使えるかどうかを確かめるために、自作カスタムIPのCMOSカメラ・インターフェース回路とビットマップ・ディスプレイ・コントローラを接続して、インプリメントできるかどうか確かめることにしました。
XPSwoMB_3_130319.png

ISEでXPSプロジェクトのトップファイルを作成して、インプリメントを行いました。

インプリメント終了ました。無事にインプリメント終了です。
XPSwoMB_5_130319.png

FPGA Editor で見ると、bitmap_disp_cntrler もインスタンスされています。問題ないようです。動作はボードが無いので、確かめることができません。
XPSwoMB_4_130319.png

これで、XPSプロジェクトを使用して、MicroBlazeプロセッサなしで、システムを組むことができました。OpenCores のプロセッサをAXIバス入出力に変更してから、XPSプロジェクトでペリフェラルIPと接続することもできると思います。
  1. 2013年03月19日 05:52 |
  2. EDK
  3. | トラックバック:0
  4. | コメント:0

Linux上のSDKでZedBoardのLinuxへリモートデバック

前回、ARMのツールチェーンを変更してARM用のLinux上で動作するソフトウェアをコンパイルすることができた
今回は、Ubuntu12.10上で動作するSDK14.4から、ZedBoard上で動作するLinuxにリモートデバックをできるかどうかを確かめた。

Linux上でのリモートデバックについては、次の2つのブログ記事を参考にした。

Zynq-7000(ZC702)のLinuxチュートリアル3(リモートデバック)
ZedBoard Linux のフレームバッファにカメラ画像を表示9(SDKリモートデバック)


前回コンパイルしたソフトウェアは、すでにLinux上のファイルシステムに書き込まれているので、”>Zynq-7000(ZC702)のLinuxチュートリアル3(リモートデバック)”で行ったHello World プロジェクトをリモートデバックすることにした。
前の2つのブログ記事のように、すべての手順を書くのは面倒なので、要所々々だけ抜き出して書くことにした。詳しい手順は2つのブログ記事を参照してください。

最初に、LinuxソフトウェアのHello_World_Linuxプロジェクトを作成した。
ISE_for_Linux_80_130301.png

Debug Configurationウイザードで、新しいConnection を作成しているところ。ZedBoardのプライベートIPアドレスを設定している。
ISE_for_Linux_74_130301.png

Remote Absolute File Path for C/C++ Application のBrows... ボタンをクリックして、Hello_World_Linux.elf を作成した。(すでにApps ディレクトリは作成済み)
ISE_for_Linux_76_130301.png

これで、Debug Configurationウイザードの設定は終了したので、Debugボタンをクリックしてデバックをスタートした。
ISE_for_Linux_77_130301.png

Debugパースペクティブになった。return 0; の行にブレークポイントを設定した。
ISE_for_Linux_78_130301.png

Resumeボタンをクリックするとreturn 0; の行まで実行された。
ISE_for_Linux_79_130301.png

これで、Ubuntu12.10上で動作するSDK14.4から、ZedBoard上で動作するLinuxにリモートデバックができることがわかった。
  1. 2013年03月02日 05:56 |
  2. EDK
  3. | トラックバック:0
  4. | コメント:0

Linux上のSDKでZedBoard_OOB_Desgin のLinuxソフトウェアをコンパイル

前回、やっとUbuntu12.10 上のSDKでZedBoardをコンフィグレーションして、ソフトウェアを走らせることができた
今回は、ZedBoard_OOB_Desgin のLinuxソフトウェアをコンパイルできるかどうかを確かめて見ることにした。

最終目的は、Linux上に実行用ELFファイルをSSHでsftpして、ZedBoard上にアップロードしてリモートデバックするということだ。その前にARMのツールチェーンでコンパイルする必要がある。Windows上で行った例は、”ZedBoard Linux のフレームバッファにカメラ画像を表示9(SDKリモートデバック)”だ。

SDKのプロジェクトを作成して、コンパイルを行うと、エラーが発生した。
ISE_for_Linux_66_130228.png

sys/mman.h が無いと言われてしまった。エラー内容を下に示す。

/opt/Xilinx/14.4/ISE_DS/EDK/gnu/arm-eabi/bin/../lib/gcc/arm-xilinx-eabi/4.6.3/../../../../arm-xilinx-eabi/include/sys/dirent.h:10:2: error: #error " not supported"
../src/cam_disp3_linux.c:17:22: fatal error: sys/mman.h: No such file or directory
compilation terminated.
make: *** [src/cam_disp3_linux.o] エラー 1


いろいろググって調べてみたが、どうもよくわからないかった。うまくコンパイルできているWindows のSDKプロジェクトと較べてみると、cam_disp3_linuxプロジェクトのinclude のディレクトリの数が違うことに気がついた。Linux上のcam_disp3_linuxプロジェクトのinclude のディレクトリの数は3つでarm-xilinx-eabi に関するインクルード・ディレクトリのみだった。
ISE_for_Linux_67_130228.png

しかし、Windows上での同じディレクトリの数は7つで、最初に、arm-xilinx-linux-gnueabi に関するインクルード・ディレクトリが先に来ていた。これはARMのツールチェーンが違うのだと思った。
そこで、SDKのProjectメニューからProperties を選択して設定を行った。
ダイアログの C/C++ Build -> Tool Chain Editor でCurrent toolchain: がXilinx ARM GNU Toolchain になっていたので、Xilinx ARM GNU/Linux Toolchain を選択した。
ISE_for_Linux_68_130228.png

Xilinx ARM GNU/Linux Toolchain を選択後の画面。
ISE_for_Linux_69_130228.png

Linux上のcam_disp3_linuxプロジェクトのinclude のディレクトリの数は、Windows のSDKと同様に7つになった。
ISE_for_Linux_70_130228.png

これで、ビルドしてみたところ、もう1つエラーがあった。それは、linker のライブラリ・オプションのエラーだった。エラー内容を下に示す。

/opt/Xilinx/14.4/ISE_DS/EDK/gnu/arm/bin/../lib/gcc/arm-xilinx-linux-gnueabi/4.6.3/../../../../arm-xilinx-linux-gnueabi/bin/ld: cannot find -l-Wl,--start-group,-lxil,-lgcc,-lc,--end-group
collect2: ld returned 1 exit status
make: *** [cam_disp3_linux.elf] エラー 1


先程と同様に、SDKのProjectメニューからProperties を選択して設定を行った。
C/C++ Build -> settings -> Tool Settins タブ -> ARM Linux gcc linker -> Libraries のLibraries オプションの -Wl,--start-group,-lxil,-lgcc,-lc,--end-group を2番めの赤バツアイコンをクリックして削除した。
ISE_for_Linux_71_130228.png

Libraries オプション削除後の画面。
ISE_for_Linux_72_130228.png

これでビルドされたら(Auto Buildに設定されている)、コンパイルが通った。
ISE_for_Linux_73_130228.png

やった~。コンパイル成功。
いろいろとトラップがあるが、回避しながら一歩ずつ進んでいる。
  1. 2013年03月01日 05:23 |
  2. EDK
  3. | トラックバック:0
  4. | コメント:0

LinuxのSDK14.4でコンパイルエラー2(解決編)

”LinuxのSDK14.4でコンパイルエラー1”の続き。

最初に、Xilinx_ISE_DS_Lin_14.4_P.49d.3.0/CodeSourcery/lin ディレクトリの xilinx-2012.03-79-arm-xilinx-linux-gnueabi.bin をインストールする。
sudo sh xilinx-2012.03-79-arm-xilinx-linux-gnueabi.bin コマンドを入れたが、エラーになってしまった。dash shell から/bin/sh に切り替えるのだそうだ。
ISE_for_Linux_28_130224.png

sudo dpkg-reconfigure -plow dash コマンドを入力した。
dash の設定ウインドウが開いた。<いいえ>を選択した。
ISE_for_Linux_29_130225.png

もう一度、sudo sh xilinx-2012.03-79-arm-xilinx-linux-gnueabi.bin コマンドを入力した。
ISE_for_Linux_30_130225.png

Sourcery CodeBench Lite for Xilinx GNU/Linux ダイアログが開いた。Nextボタンをクリックした。
ISE_for_Linux_31_130225.png

ライセンスを承認して、Nextボタンをクリックした。
ISE_for_Linux_32_130225.png

インストールされるツールチェーンが表示された。Nextボタンをクリックした。
ISE_for_Linux_33_130225.png

Typical が選択されている。Nextボタンをクリックした。
ISE_for_Linux_34_130225.png

/opt/Xilinx/14.4/ISE_DS/EDK/gnu ディレクトリにarm ディレクトリをmkdir した。
ISE_for_Linux_35_130225.png

Sourcery CodeBench Lite for Xilinx GNU/Linux ダイアログで、インストール・ディレクトリに/opt/Xilinx/14.4/ISE_DS/EDK/gnu/arm ディレクトリを指定した。Nextボタンをクリックした。
ISE_for_Linux_36_130225.png

パスの設定画面。デフォルトのまま、Nextボタンをクリックした。
ISE_for_Linux_37_130225.png

Link Folder を選択する。デフォルトのまま、Nextボタンをクリックした。
ISE_for_Linux_38_130225.png

インストール前のサマリが表示された。Install ボタンをクリックした。
ISE_for_Linux_39_130225.png

インストールがスタートした。
ISE_for_Linux_40_130225.png

インストールが終了した。Nextボタンをクリックした。
ISE_for_Linux_41_130225.png

Install Complete 画面が出る。Done ボタンをクリックした。(この画像はキャプチャし忘れたので、次にインストールしたxilinx-2012.03-83-arm-xilinx-eabi.bin の画像を示す)
ISE_for_Linux_44_130225.png

次は、xilinx-2012.03-83-arm-xilinx-eabi.bin をインストールした。
最初に、/opt/Xilinx/14.4/ISE_DS/EDK/gnu ディレクトリにarm-eabi ディレクトリをmkdir した。
ISE_for_Linux_42_130225.png

xilinx-2012.03-79-arm-xilinx-linux-gnueabi.bin と同様にインストールを進めていった。
なお、インストール・ディレクトリを設定する画面で、インストール・ディレクトリに/opt/Xilinx/14.4/ISE_DS/EDK/gnu/arm-eabi ディレクトリを指定した。
ISE_for_Linux_43_130225.png

最後に、ツールチェーンへのパスを追加した。.bashrc のパスの設定を下に示す。(環境変数として大域的に使用するためにexport宣言を追加しました。2013/03/04)

PATH=$PATH:/opt/Xilinx/14.4/ISE_DS/ISE/bin/lin:/opt/Xilinx/14.4/ISE_DS/PlanAhead/bin:/opt/Xilinx/Vivado/2012.4/bin:/opt/Xilinx/14.4/ISE_DS/EDK/bin/lin:/opt/Xilinx/14.4/ISE_DS/EDK/eclipse/lin/eclipse:/opt/Xilinx/14.4/ISE_DS/EDK/gnu/arm-eabi/bin:/opt/Xilinx/14.4/ISE_DS/EDK/gnu/arm/bin

export PATH
export CROSS_COMPILE=arm-xilinx-linux-gnueabi-


最後に、dash をデフォルトのシステムシェルとして戻した。sudo dpkg-reconfigure -plow dash コマンドを再度入力して、dash の設定ウインドウで、<はい>を選択した。
ISE_for_Linux_48_130225.png

もう一度、ターミナルから、xsdk を入力して、SDKを立ち上げ、プロジェクトをクリーンしたら、コンパイルが通った。
ISE_for_Linux_46_130225.png
  1. 2013年02月26日 04:34 |
  2. EDK
  3. | トラックバック:0
  4. | コメント:0

LinuxのSDK14.4でコンパイルエラー1

LinuxでのISEやPlanAheadにXPSプロジェクトを入れた時のエラー”で、/usr/bin/make を/usr/bin/gmake にリンクして、ISEプロジェクト内のXPSプロジェクトをインプリメントすることができた。
次に、Linuxは関係なく、独自のソフトウェアで動作するカメラ回路がPlanAheadプロジェクトなので、それで、PlanAheadプロジェクトでもプロジェクト内のXPSプロジェクトをインプリメントできるかどうか?確かめてみた。
やってみたところ問題なくインプリメントが終了した。
ISE_for_Linux_26_130224.png

ハードウェアをSDKにエクスポートして、xsdk コマンドをターミナルで実行してSDKを立ち上げた。
Clean を行なって、すべてのプロジェクトをリコンパイルしたところエラーになってしまった。
ISE_for_Linux_27_130224.png

エラーの内容は、arm-xilinx-eabi-gcc が見つからないというものだった。エラー内容を下に示す。

**** Build of configuration Debug for project cam_disp2 ****

make all
Building file: ../src/cam_disp2.c
Invoking: ARM gcc compiler
arm-xilinx-eabi-gcc -Wall -O0 -g3 -c -fmessage-length=0 -I../../cam_disp2_bsp/ps7_cortexa9_0/include -MMD -MP -MF"src/cam_disp2.d" -MT"src/cam_disp2.d" -o"src/cam_disp2.o" "../src/cam_disp2.c"
/bin/sh: 1: arm-xilinx-eabi-gcc: not found
make: *** [src/cam_disp2.o] エラー 127


検索すると、”Xilinx-Zynq-Arm-Linuxマニュア ル”が見つかった。それによると、”14.1 EDK - パスにスペースが含まれるディレクトリにインストーラーがあると ARM ツールチェーンがインストールされない”というXilinxアンサーがあるそうだ。
パスにスペースは入っていないのだが、 ARM ツールチェーンがインストールされなかったのだろうか?VirtualBox上のUbuntuということが影響しているのか?確かにISE_DS\EDK\gnu\arm というディレクトリは存在しない。ISE_DS\EDK\gnu の下はmicroblaze とpowerpc-eabi だけだ。ARMのツールチェーンはインストールされていないようだ。
アンサーによると、/CodeSourcery/lin にインストーラーがあるそうだ。
Xilinx_ISE_DS_Lin_14.4_P.49d.3.0/CodeSourcery/lin ディレクトリに行くと、xilinx-2012.03-79-arm-xilinx-linux-gnueabi.bin とxilinx-2012.03-83-arm-xilinx-eabi.bin の2つのインストーラーがあった。
ISE_for_Linux_45_130225.png
  1. 2013年02月25日 05:51 |
  2. EDK
  3. | トラックバック:0
  4. | コメント:0