FC2カウンター FPGAの部屋 2014年05月
fc2ブログ

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

FPGAの部屋

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

Zynqチップにヒートシンクを付けた

ZYBOとREV.C のZedBoardはZynqチップにヒートシンクが付いていないので、Linuxを動作させたりすると、かなり発熱して心配です。

それで、あまり効果が無いかもしれませんが、アイネックス チップ用マルチヒートシンク HM-19Aを注文して、今日来たので付けてみました。効果は少しはあると思います。なお、貼付け用の両面テープも入っているので、これだけ買えばOKです。

ZYBOはこんな感じ。基板がかっこ良くなりました。
heat_sink_1_140531.jpg

ヒートシンクの大きさとZynq7010チップの大きさがピッタリです。

REV.C のZedBoardはこんな感じです。ヒートシンクの大きさよりZynq7020チップの大きさの方が大きいので、ちょっとヒートシンクが小さいですね。。。
heat_sink_2_140531.jpg

これでも付いていないよりは良いでしょう。因みに、REV.DのZedBoardは最初からヒートシンクが付いていました。熱的に厳しかったんでしょうね?
  1. 2014年05月31日 22:04 |
  2. Zynq
  3. | トラックバック:0
  4. | コメント:0

テルマエ・ロマエ2、映画『万能鑑定士Q −モナ・リザの瞳−』を見てきました

テルマエ・ロマエ2は先週の土曜日、5月24日に見てきましたが、あまりおもしろくありませんでした。

万能鑑定士Q −モナ・リザの瞳− は今日見てきました。こっちのほうが良かったです。万能鑑定士は5巻まで読んだんですが、この映画は9巻のようですね。綾瀬はるかも良かったです。
  1. 2014年05月31日 21:51 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

VivadoでZYBOのAXI4 Slave キャラクタ・ディスプレイ・コントローラ IP2(FIFOの生成)

VivadoでZYBOのAXI4 Slave キャラクタ・ディスプレイ・コントローラ IP1(新規プロジェクトの生成)”の続き。Vivado 2014.1使用。

前回はプロジェクトを作るところまでだったが、今回はFIFOを生成する。

・Project Manager の IP Catalog をクリックして、IP Catalog を右のウインドウに出す。

・Memories & Storage Elements -> FIFOs -> FIFO Generator を展開してクリックする。
Vivado_ZYBO_CDC_axi_slave_11_140424.png

・Customize IPダイアログが開いた。

・Basic タブでの、Interface Type は Native で、Fifo Implementation は Common Clock Distributed RAM に設定した。
Vivado_ZYBO_CDC_axi_slave_12_140424.png

・次に、Native Ports タブをクリックした。Read Mode を First Word Fall Through に変更した。Data Port Parameters を 16ビット幅に設定した。
Vivado_ZYBO_CDC_axi_slave_13_140424.png

・Status Flags タブをクリックした。Optional Flags で、Almost Full Flag と Almost Empty Flag にチェックを入れた。

・Handshaking Options で、Overflow, Underflow Flag にチェックを入れて、Active High に設定した。
Vivado_ZYBO_CDC_axi_slave_14_140424.png

・Data Counts タブをクリックした。ここでは変更はない。
Vivado_ZYBO_CDC_axi_slave_15_140424.png

・Summary タブをクリックした。これで問題ないので、OKボタンをクリックした。
Vivado_ZYBO_CDC_axi_slave_16_140424.png

・Generate Output Products ダイアログで Generate ボタンをクリックした。
Vivado_ZYBO_CDC_axi_slave_17_140424.png

・FIFOが生成された。
Vivado_ZYBO_CDC_axi_slave_18_140424.png

VivadoでZYBOのAXI4 Slave キャラクタ・ディスプレイ・コントローラ IP3(単体シミュレーション)”に続く。
  1. 2014年05月30日 04:23 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

レナ像を使用してOpenCVで顔検出をやってみた

色々なマシンでOpenCVで顔検出サンプルをやってみた。
顔検出はOpenCVの samples/c の facedetect を起動してレナ像の顔検出を行ってみた。

レナ像のファイル名は、lena.jpgで、サイズは512 x 512ピクセルの89.7KiBだ。
最初に、Intel Core i7-2600 @3.4GHzのWindows 7の上にVirtualBox 4.3.12をインストールし、Ubuntu 14.04 LTSをゲストOSとして起動して、それ上に OpenCV 2.4.9 をインストールしたパソコンで、次のコマンドを入力した。

./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" lena.jpg

顔検出の結果を下に示す。
facedetect_1_140527.png

detection time = 163.16 msだった。

次にsamples/c のいろいろな画像を顔検出してみたが、猫の耳が顔検出されてしまった。誤検出のようだ。
facedetect_2_140527.png

次に、Intel Core Duo E8500 @3.16GHzの Lubuntu 14.04 が起動する OpenCV2.4.9 をインストールしたパソコンで、同じくレナ像の顔検出をやってみた。detection time = 127.07 ms だった。やはり、ネイティブにLinuxが動作しているパソコンのほうが、VirtualBoxでLinuxが動作しているパソコンよりも早い。スペックは前のパソコンのほうが良いのだが、やはりネイティブにLinuxが動作していると速いね。。。

AMD Athlon64 Dual Core 5200+ 2.70GHz VirtualBox 4.3.12 Ubuntu 14.04 LTSのOpenCV 2.4.9 では、detection time = 390.334 msだった。

ZedBoardのARM Coretex-A9 Dual 667MHz Linaro 12.11 OpenCV 2.4.6.1 では、detection time = 1986.86 ms だった。
OpenCV_1_140529.jpg

ZYBOのARM Coretex-A9 Dual 667MHz Ubuntu 12.04.4 LTS OpenCV 2.4.6.1 では、detection time = 1968.69 ms だった。
OpenCV_2_140529.jpg

ZedBoard や ZYBO はパソコンに比べて、1桁は遅い。できれば、これをFPGAでソフトウェアをハードウェアにオフロードして速度を10倍程度にアクセラレーションしてみたいと思う。
  1. 2014年05月29日 04:21 |
  2. OpenCV
  3. | トラックバック:0
  4. | コメント:0

ZYBOにOpenCV 2.4.6.1をインストール

ZYBOでXillinuxを起動してみる”でZYBOにXillinuxをインストールした。
XillinuxはUbuntuなので、OpenCVをインストール出来るのでは?ということでインストールしてみた。

まずは、ext3/ext4のSDカード上のディスク・イメージが 1.8GB なので、これを拡張しないと OpenCV はインストールすることができない。そこで、”ZedBoard用のUbuntu Linuxをビルド6(SDカードを用意する)”を参考にして、8GBのSDカードを16MBのFAT領域と、それ以外のext4 領域に分けてフォーマットした。そして、元のSDカード・イメージ上のファイルをそれぞれの領域にコピーした。これで、8GBのディスクはできた。
8GBのSDカードをZYBOにセットして立ち上げるとXillinuxが立ち上がったが、Unityは起動していなかった。startx コマンドを使えば、Unityが起動した。

Linux で OpenCV バージョン 2.4.9 のダウンロードとビルドとインストールとテスト実行”の”Ubuntu で OpenCV バージョン 2.4.9 のダウンロードとビルドとインストールを行うシェルスクリプト”を保存して実行した。そうすると、ZedBoardと同様にエラーになってしまった。(但し、OpenCV 2.4.9 を、/root/opencv の下にインストールするようにスクリプトを変更した)

次に、OpenCV 2.4.6.1をインストールするのだが、apt-get updateapt-get upgrade を忘れていたので、実行した。
upgrade の途中で、lightdmを起動するかを聞かれたので、Yを押したところ、Unityが起動時に起動するようになった。

ZedBaord用UbuntuにOpenCV2.4.6.1をインストール”を参考に、OpenCV 2.4.6.1 をインストールした。
OpenCV 2.4.6.1 のインストールは成功した。やった~。。。

”ZedBoard用のUbuntu Linuxをビルド8(swap spaceの追加)”を参考に、swap spaceを追加した。

adduser で、zybo というユーザーを追加した。パスワードは zybo 。
SSHはすでにインストールされていたので、zybo アカウントでリモート・ログインできた。

下図に、ZYBOにインストールした OpenCV 2.4.6.1 を示す。samples/c ディレクトリは、sh build_all.sh を実行して、コンパイル済みだ。
Xillinux_15_140528.png

これで、ZYBOにも OpenCV をインストールすることができた。
  1. 2014年05月28日 04:51 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

VivadoでZYBOのAXI4 Slave キャラクタ・ディスプレイ・コントローラ IP1(新規プロジェクトの生成)

ZYBO用キャラクタ・ディスプレイ・コントローラ IPの単体テスト(VGAポート専用)”のVivado 2014.1版を作ろうと思う。Vivado 2014.1 のチュートリアルをかねようとしているので、丁寧に図をキャプチャして書くつもりだ。
仕様としては、VGAポートの画像としてキャラクタを表示するハードウェアということで、HDMIは面倒+Digilent社のコードを流用しているので、公開することができないためVGAポートのみとした。解像度は、VGA, SVGA, XGA, SXGA, HDでIPのパラメータを変更するダイアログで設定することにする。つまり、解像度を変更するためにコンパイルが必要ということだ。ピクセルクロックも入力する周波数をPSで変更する必要がある。

・最初に、Vivado 2014.1を立ちあげた。

・Create New Project をクリックした。
Vivado_ZYBO_CDC_axi_slave_1_140424.png

・Create a New Vivado Project ダイアログが開いた。
Vivado_ZYBO_CDC_axi_slave_2_140424.png

・Project name に cdc_vga_axi_slave と入力した。Project location を指定した。Next > ボタンをクリックした。
Vivado_ZYBO_CDC_axi_slave_3_140424.png

・Project Type を選択する。RTL Projcet を選択した。Next > ボタンをクリックした。
Vivado_ZYBO_CDC_axi_slave_4_140424.png

・Add Source ダイアログで、すでにできているHDLを選択した。Copy soruces into project にチェックを入れる。Next > ボタンをクリックした。
Vivado_ZYBO_CDC_axi_slave_5_140424.png

・Add Existing IP (optional) ダイアログが表示された。追加するIPは無いので、Next > ボタンをクリックした。
Vivado_ZYBO_CDC_axi_slave_6_140424.png

・Add Constraints (optional) ダイアログが表示された。今回は、IPとして使用するため制約は必要ない。Next > ボタンをクリックした。
Vivado_ZYBO_CDC_axi_slave_7_140424.png

・Default Part ダイアログで、とりあえずZedBoardを選んでおいた。これは、実際にはインプリメントは行わずに論理シミュレーションのみを行うためだ。Next > ボタンをクリックした。
Vivado_ZYBO_CDC_axi_slave_8_140424.png

・New Project Summary ダイアログが表示された。Finish ボタンをクリックした。
Vivado_ZYBO_CDC_axi_slave_9_140424.png

・New Project が生成された。
Vivado_ZYBO_CDC_axi_slave_10_140424.png

VivadoでZYBOのAXI4 Slave キャラクタ・ディスプレイ・コントローラ IP2(FIFOの生成)”に続く。
  1. 2014年05月27日 04:52 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

ZedBaord用UbuntuにOpenCV2.4.6.1をインストール

ZedBaord用UbuntuにSSHをインストール”に続いて、ZedBoard用UbuntuにOpenCV2.4.6.1をインストールしたので書いておく。

当初は、”Linux で OpenCV バージョン 2.4.9 のダウンロードとビルドとインストールとテスト実行”を見て、OpenCV2.4.9をインストールしようとしていた。しかし前準備をして、OpenCV2.4.9 を make している時にエラーが発生してしまい、エラーが解消できなかったことから諦めた。
次に、”Raspberry Pi(Raspbian)にOpenCV2.6.4.1インストール”を見て、OpenCV2.4.6.1をインストールしようとした。必要なモジュールのインストールは、OpenCV2.4.9の前準備で終わっていると思い、これは省略して、OpenCV2.4.6.1のwgetから行った。

私が実行したコマンドを列挙する。
Linux で OpenCV バージョン 2.4.9 のダウンロードとビルドとインストールとテスト実行”の”Linux で, コマンドを手入力して,OpenCV バージョン 2.4.9 のソースコードのダウンロードとビルドとインストールを行う場合の手順 (Ubuntu や Fedora を使用)”の”Ubuntu 12.04 の場合の操作手順(例)”から引用する。
詳しくは見ていないが、、”Raspberry Pi(Raspbian)にOpenCV2.6.4.1インストール”のアップデートと必要なモジュールのインスコでも大丈夫だと思う。

sudo apt-get -yV update
sudo apt-get -yV upgrade
sudo reboot

sudo apt-get -yV install build-essential
sudo apt-get -yV install libboost1.46-all-dev
#
cd /tmp; sudo apt-get source opencv
sudo apt-get -yV build-dep opencv
#
sudo apt-get -yV install libqt4-dev
sudo apt-get -yV install libgtk2.0-dev
sudo apt-get -yV install pkg-config
#
sudo apt-get -yV install opencl-headers
#
sudo apt-get -yV install libjpeg-dev
sudo apt-get -yV install libopenjpeg-dev
sudo apt-get -yV install jasper
sudo apt-get -yV install libjasper-dev libjasper-runtime
sudo apt-get -yV install libpng12-dev
sudo apt-get -yV install libpng++-dev libpng3
sudo apt-get -yV install libpnglite-dev libpngwriter0-dev libpngwriter0c2
sudo apt-get -yV install libtiff-dev libtiff-tools pngtools
sudo apt-get -yV install zlib1g-dev zlib1g-dbg
sudo apt-get -yV install v4l2ucp
#
sudo apt-get -yV install python
sudo apt-get -yV install autoconf
sudo apt-get -yV install libtbb2 libtbb-dev
sudo apt-get -yV install libeigen2-dev
sudo apt-get -yV install cmake
sudo apt-get -yV install openexr
sudo apt-get -yV install gstreamer-plugins-*
sudo apt-get -yV install freeglut3-dev
sudo apt-get -yV install libglui-dev
sudo apt-get -yV install libavc1394-dev libdc1394-22-dev libdc1394-utils
# ビデオ関係のパッケージ
sudo apt-get -yV install libxine-dev
sudo apt-get -yV install libxvidcore-dev
sudo apt-get -yV install libva-dev
sudo apt-get -yV install libssl-dev
sudo apt-get -yV install libv4l-dev
sudo apt-get -yV install libvo-aacenc-dev
sudo apt-get -yV install libvo-amrwbenc-dev
sudo apt-get -yV install libvorbis-dev
sudo apt-get -yV install libvpx-dev


次に、OpenCV2.4.6.1を持ってくるところからは、、”Raspberry Pi(Raspbian)にOpenCV2.6.4.1インストール”のwgetからを引用する。(一番下の2行のコマンドは、私が sudo を追加した)(2014/10/07:変更、sourceforge に opencv-2.4.6.1.tar.gz が無くなってしまったので、他のサイトを探した)

wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.6.1/opencv-2.4.6.1.tar.gz
wget ftp://ftp.jp.netbsd.org/pub/pkgsrc/distfiles/opencv-2.4.6.1.tar.gz
tar xvzf opencv-2.4.6.1.tar.gz
cd opencv-2.4.6.1
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig


下に、cmake .. が終了した時の図を示す。
Ubuntu_build_for_ZedBoard_84_140524.png

make が終了した時の図を示す。3時間位 make に掛かった。途中でSDカードのエラーで落ちたが、再起動したら問題なく make できた。
Ubuntu_build_for_ZedBoard_85_140524.png

sudo make install を行った時の図を下に示す。
Ubuntu_build_for_ZedBoard_86_140524.png

sudo make install が成功して、sudo ldconfig を行うときの図を示す。
Ubuntu_build_for_ZedBoard_87_140524.png

サンプルをコンパイルして試してみた

なお、OpenCVの使い方に関しては、”OpenCV Library の使い方”(PDF)にいろいろと解説があったので、参考にさせて頂いた。
opencv-2.4.6.1/samples にいろいろな言語の opencv にサンプルがあった。その内の c 言語のサンプルを試してみることにした。
opencv-2.4.6.1/samples/c のディレクトリの中身を下に示す。
Ubuntu_build_for_ZedBoard_88_140524.png

sh build_all.sh を実行して、すべてのC言語のサンプルをコンパイルした。
Ubuntu_build_for_ZedBoard_89_140524.png

実行後の opencv-2.4.6.1/samples/c のディレクトリの中身を下に示す。
Ubuntu_build_for_ZedBoard_90_140524.png

この内の contours を試してみることにした。画像を扱うので、GUIで行った。
最初に、contours を起動した時の画面。levels+3 は 3 だ。
Ubuntu_build_for_ZedBoard_91_140524.jpg

次に、levels+3 を 4 にしてみた。
Ubuntu_build_for_ZedBoard_92_140524.jpg

最後に、levels+3 を 5 にしてみた。
Ubuntu_build_for_ZedBoard_93_140524.jpg
  1. 2014年05月25日 04:37 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

ZedBaord用UbuntuにSSHをインストール

ZedBoard用のUbuntu Linuxをビルド9(serviceの停止)”までで、ZedBoard用のUbuntuのSDカード・イメージを生成してきた。

シリアルのターミナル1つでは不便なので、SSHをインストールして、SSHでログイン出来るようにしてみた。
参考にしたのは、”Ubuntuでsshdの設定をしてリモートから接続できるようにする”です。ありがとうございました。

sudo aptitude install ssh で ssh をインストールする。

sudo vi /etc/ssh/sshd_config で、sshd_config を編集して、PermitRootLogin no にして、root でログイン出来ないようにするそうだ。
Ubuntu_build_for_ZedBoard_78_140524.png

sudo /etc/init.d/ssh restart で sshdサービスの再起動をした。

ifconfig でDHCPで振られたIPアドレスを確認する。
Ubuntu_build_for_ZedBoard_80_140524.png

・IPアドレスは192.168.3.11 なので、Tera Termで、SSHで 192.168.3.11 に接続する。
Ubuntu_build_for_ZedBoard_81_140524.png

・IDは linaro , パスワードも linaro で入れるようだ。
Ubuntu_build_for_ZedBoard_82_140524.png

・ZedBoardで動いているUbuntuに入れた。
Ubuntu_build_for_ZedBoard_83_140524.png
  1. 2014年05月24日 05:36 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

Vivado Simulator用のOVL2.8.1のOVLライブラリをコンパイルして登録した

参考にした自分のブログは、”ISim で OVL Ver. 2.7 のOVLライブラリのコンパイルと登録”。Vivado Simulator のバージョンは2014.1とする。

Vivado Simulator で、OVLライブラリを使うためにコンパイルを行った。OVLのバージョンは、”LSI設計雑記帳”さんの”[検証][OVL] OVL 2.8.1リリース”の記事で知った。

まずは、accellera の Download OVL (Open Verification Language) のページから std_ovl_v2p8.1_Apr2014.tgz をダンロードして解凍した。

フォルダ名を std_ovl_v281 とした。(testフォルダとVivado_Libフォルダが自分で作ったフォルダです)
OVL_VivadoSim_1_140523.png

Vivado_Libフォルダを作って、Vivado Simulator 用のライブラリのコンパイルを行った。
OVL_VivadoSim_2_140523.png

調査したところ、Vivado Simulator のVerilog HDLのコンパイル・コマンドは xvlog 、VHDLのコンパイル・コマンドは、xvhdl ということがわかった。これは、”Vivado Design Suite ユーザー ガイド ロジック シミュレーシ ョ ン UG900 (v2013.4) 2013 年 12 月 18 日”の第 5 章 :  Vivado シミ ュレータのコマンド ラインおよび Tcl を参考にした。
この資料を参考に、”ISim で OVL Ver. 2.7 のOVLライブラリのコンパイルと登録”のバッチファイルを変更しただけでは、1つのVerilog HDL ファイルをコンパイルしただけで終了してしまった。(最初にOVLのVerilog HDL ファイルからコンパイルしています)
なぜかと調べると、xvlog, xvhdl コマンド共に、バッチファイルで実装されていた。バッチファイルからバッチファイルを読んでいたので、1つのコマンドを実行した時に終了してしまっていた。
OVL_VivadoSim_3_140523.png

そこで、バッチファイルからバッチファイルを呼び出す方法を探すと、”Windows、バッチファイルからバッチファイルを呼び出す方法あれこれ”が見つかった。バッチファイルからバッチファイルを呼び出すときには、call を前につけて呼び出すことにしたら、うまく行った。

最初に、OVLのVerilog HDL ファイルをコンパイルするバッチファイル、OVL_Verilog_Lib_Comp_VivadoSim.bat を下に示す。


call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_always.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_always_on_edge.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_arbiter.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_bits.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_change.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_code_distance.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_coverage.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_decrement.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_crc.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_cycle_sequence.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_delta.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_even_parity.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_fifo.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_fifo_index.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_frame.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_handshake.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_hold_value.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_implication.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_increment.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_memory_async.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_memory_sync.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_multiport_fifo.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_mutex.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_never.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_never_unknown.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_never_unknown_async.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_next.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_next_state.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_no_contention.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_no_overflow.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_no_transition.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_no_underflow.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_odd_parity.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_one_cold.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_one_hot.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_proposition.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_quiescent_state.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_range.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_reg_loaded.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_req_ack_unique.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_req_requires.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_stack.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_time.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_transition.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_unchange.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_valid_id.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_value.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_value_coverage.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_width.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_window.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_win_change.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_win_unchange.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_xproduct_bit_coverage.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_xproduct_value_coverage.v
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvlog -d OVL_VERILOG -d OVL_ASSERT_ON -d OVL_FINISH_OFF -i D:\HDL\OVL\std_ovl_v281 -work accellera_ovl_vlog D:\HDL\OVL\std_ovl_v281\ovl_zero_one_hot.v


このバッチファイルを実行すると、下に xsim.dir フォルダが生成され、その下の、accellera_ovl_vlog フォルダの下に、OVLのVerilog HDL の各ファイルが .sdb という拡張子でコンパイルされていた。
OVL_VivadoSim_4_140523.png

これで、OVLのVerilog HDL のライブラリのコンパイルは終了した。次に、VHDLのライブラリをコンパイルする。

OVLのVHDL ファイルをコンパイルするバッチファイル、OVL_VHDL_Lib_Comp_VivadoSim.bat を下に示す。


call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\std_ovl.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\std_ovl_procs.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\std_ovl_components_vlog.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\std_ovl_clock_gating.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\std_ovl_reset_gating.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_always.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_always_on_edge.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_change.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_cycle_sequence.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_decrement.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_delta.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_even_parity.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_fifo_index.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_frame.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_handshake.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_implication.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_increment.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_never.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_never_unknown.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_never_unknown_async.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_next.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_no_overflow.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_no_transition.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_no_underflow.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_odd_parity.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_one_cold.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_one_hot.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_proposition.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_quiescent_state.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_range.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_time.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_transition.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_unchange.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_width.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_win_change.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_win_unchange.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_window.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\ovl_zero_one_hot.vhd

call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\vhdl93\ovl_always_rtl.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\vhdl93\ovl_cycle_sequence_rtl.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\vhdl93\ovl_implication_rtl.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\vhdl93\ovl_never_rtl.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\vhdl93\ovl_never_unknown_async_rtl.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\vhdl93\ovl_never_unknown_rtl.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\vhdl93\ovl_next_rtl.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\vhdl93\ovl_one_hot_rtl.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\vhdl93\ovl_range_rtl.vhd
call C:\HDL\Xilinx\Vivado\2014.1\bin\xvhdl -work accellera_ovl_vhdl D:\HDL\OVL\std_ovl_v281\vhdl93\ovl_zero_one_hot_rtl.vhd


このバッチファイルを実行すると、xsim.dir フォルダの下に accellera_ovl_vhdl フォルダが生成されて、OVLのVHDL ファイルが、.vdb という拡張子で生成されていた。
OVL_VivadoSim_5_140523.png

次に、コンパイルしたOVLライブラリを Vivado Simulator のライブラリとして登録する。

Vivado Simulator のライブラリは、どうやら、Xilinx/Vivado/2014.1/data/xsim にあるようだ。vhdl, verilog フォルダがある。xsim.ini がライブラリの設定ファイルのようだ。xsim.ini に accellera_ovl_vlog と accellera_ovl_vhdl を追加した。


accellera_ovl_vlog=$RDI_DATADIR/xsim/verilog/accellera_ovl_vlog
accellera_ovl_vhdl=$RDI_DATADIR/xsim/vhdl/accellera_ovl_vhdl


次に、C:\HDL\Xilinx\Vivado\2014.1\data\xsim\verilog フォルダに、accellera_ovl_vlog をコピーした。
OVL_VivadoSim_6_140523.png

続いて、C:\HDL\Xilinx\Vivado\2014.1\data\xsim\vhdl フォルダに、accellera_ovl_vhdl をコピーした。
OVL_VivadoSim_7_140523.png
  1. 2014年05月23日 04:19 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

ZedBoard用のUbuntu Linuxをビルド9(serviceの停止)

ZedBoard用のUbuntu Linuxをビルド8(swap spaceの追加)”の続き。

ZedBoard用のUbuntu Linux のSDカード・イメージを前回で生成することできた。
OpenCVをインストールしてGUIベースで、いろいろとトライしてみようとすると、決定的にメモリが足りないようだ。HD解像度だと相当メモリを食うようで、現在のtopコマンドを実行した結果は、71MB程度しかFreeのメモリがない。そこで、GUIを落とすことにした。Twitter で t3840さんに、”serviceでlightdmをstopさせるのが良さそうですね”と教えてもらったので、GUIを落としてみた。

まずは、起動時に top コマンドを発行した時の表示を下の図に示す。起動時のGUIの解像度はXGAだった。
Ubuntu_build_for_ZedBoard_71_140521.png

348MB程度のメモリが使用中だ。

次に、reboot コマンドでリブートして、HD解像度にした。top コマンドでプロセスの状態を見た図を下に示す。
Ubuntu_build_for_ZedBoard_72_140521.png

393MB程度のメモリが使用中だ。使用メモリは時間とともに増えてしまう。

さて、service を見ていこう。serviceコマンドについては、IT Proのserviceコマンドを参考にした。

まずは、起動している全ての service を見てみる。
service --status-all コマンドで、起動している service を見た。
Ubuntu_build_for_ZedBoard_73_140521.png

lightdm を見つけた。

service lightdm stop コマンドを実行した。

top コマンドを実行したところ、メモリ使用量が230MB程度になった。
Ubuntu_build_for_ZedBoard_74_140521.png

その時のHDMIの出力画像を貼っておく。
Ubuntu_build_for_ZedBoard_75_140521.jpg

ディスプレイの文字が見えるように拡大してみた。
Ubuntu_build_for_ZedBoard_76_140521.jpg

因みに、startx コマンドで再度、GUIが表示された。
  1. 2014年05月21日 05:14 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

ZedBoard用のUbuntu Linuxをビルド8(swap spaceの追加)

ZedBoard用のUbuntu Linuxをビルド7(rootfsの書き込みと実機動作)”の続き。

今回は、swap space用のファイルを作って、swapとして指定する。
”Yet Another Guide to Running Linaro Ubuntu Linux Desktop on Xilinx Zynq on the ZedBoard”の”Adding some “swap space””を参考にしているが、コマンドが抜けていたので、”linux スワップ(swap)領域の作成”を参考した。とても詳しく書かれているのでわかりやすく、とても助かった。やり方をまとめておいて、頂いてありがとうございました。

mkdir /var/cache/swap コマンドでディレクトリを生成した。

dd if=/dev/zero of=/var/cache/swap/swapfile bs=1M count=512 コマンドで、512MBのswapfile を生成した。
Ubuntu_build_for_ZedBoard_62_140517.png

mkswap /var/cache/swap/swapfile コマンドでswap領域用ファイルを作成した。

vi /etc/fstab で /etc/fstab を編集し、”/var/cache/swap/swapfile none swap sw 0 0”の行を追加した。
Ubuntu_build_for_ZedBoard_63_140517.png

reboot コマンドでLinuxシステムを再起動した。
Ubuntu_build_for_ZedBoard_64_140517.png

swapon -s コマンドで確認すると、/var/cache/swap/swapfile がswapとして指定されていた。
Ubuntu_build_for_ZedBoard_65_140517.png

・さて、swap がどのくらい使用されているのかを top コマンドで見てみよう。まずは、Ubuntu Desktop の方で何も起動されていない状態の場合を下に示す。
Ubuntu_build_for_ZedBoard_66_140517.png
swap の使用は0だ。

・この状態での Ubuntu Desktop を下に示す。何故か今日はHDの解像度になっていた。(注:どうやら、電源ONでUbuntuが立ち上がった状態ではXGA解像度で、そこから reboot をすると、HD解像度になるようだ)
Ubuntu_build_for_ZedBoard_69_140520.jpg

・次に、Ubuntu Desktop で、Firefoxとファイル表示とSofware Center を立ちあげた。起動が少し早くなった気がする?気のせいか?
Ubuntu_build_for_ZedBoard_70_140520.jpg

・その状態での、top コマンドを実行した状態を下に示す。
Ubuntu_build_for_ZedBoard_67_140517.png
30MB程度swap領域を使用している。

df コマンドでディスクスペースを見てみた。8GBのSDカードの30%程度の領域を使用しているようだ。
Ubuntu_build_for_ZedBoard_68_140517.png

ZedBoard用のUbuntu Linuxをビルド9(serviceの停止)”に続く。
  1. 2014年05月20日 04:42 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

ZedBoard用のUbuntu Linuxをビルド7(rootfsの書き込みと実機動作)

ZedBoard用のUbuntu Linuxをビルド6(SDカードを用意する)”の続き。

今回は、ZedBoard 用 Ubuntu の root file system を SDカードに書いて、実機で動作を確かめる。
Yet Another Guide to Running Linaro Ubuntu Linux Desktop on Xilinx Zynq on the ZedBoard”の”Install the root file system”と”Testing the system”をやってみる。

・wget https://releases.linaro.org/12.11/ubuntu/precise-images/ubuntu-desktop/linaro-precise-ubuntu-desktop-20121124-560.tar.gz コマンドで、~/Ubuntu ディレクトリに、/linaro-precise-ubuntu-desktop-20121124-560.tar.gz を wget した。
Ubuntu_build_for_ZedBoard_54_140517.png

sudo tar --strip-components=3 -C /media/masaaki/ROOT_FS -xzpf linaro-precise-ubuntu-desktop-20121124-560.tar.gz binary/boot/filesystem.dir コマンドで、ZedBoard 用 Ubuntu の root file system を SDカードに書き込んだ。結構、時間がかかった。後、参考URLのコマンドが間違っていた。
Ubuntu_build_for_ZedBoard_55_140517.png

・デバイスのROOT_FS(Linux用 ext4フォーマット)を見ると、ディレクトリがたくさん出来ていた。
Ubuntu_build_for_ZedBoard_56_140517.png

・デバイスのZED_BOOT(Windows用FAT32フォーマット)を見ると、BOOT.BIN、uImage、devicetree.dtb を入れてある。
Ubuntu_build_for_ZedBoard_57_140517.png

これですべてのファイルが揃ったので、SDカードをアンマウントして取り外し、ZedBoardに入れた。
ZedBoardの電源をONにして、Tera Termを立ちあげ、シリアルポートに接続した。(ビットレートは115200bps)
起動シーケンスが始まって、終了し、linaro-ubuntu-desktop のプロンプトが出ました。やった~。。。です。。。
Ubuntu_build_for_ZedBoard_58_140517.png

・HDMIを見ると、Ubuntuディスクトップが表示されていた。(表示モードは、1024x768のXGA)
Ubuntu_build_for_ZedBoard_59_140517.jpg

・USB OTGにマウスのみをつないで、Firefoxを起動すると、Linaroのページが表示された。ネットワークも問題なく接続されているようだ。でも、起動がとっても遅い。
Ubuntu_build_for_ZedBoard_60_140517.jpg

・Ubuntu Software Center を表示させてみた。やはり、起動が激遅。
Ubuntu_build_for_ZedBoard_61_140517.jpg

・Tera Termで top コマンドを発行してみた。メモリは3/5くらい使われているようだ。

top - 19:57:32 up 17 min,  2 users,  load average: 0.14, 1.08, 0.89
Tasks: 130 total, 1 running, 129 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.7%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 509040k total, 315472k used, 193568k free, 8444k buffers
Swap: 0k total, 0k used, 0k free, 97560k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3004 root 20 0 2156 1036 760 R 1 0.2 0:00.56 top
1 root 20 0 2604 1124 464 S 0 0.2 0:02.33 init
2 root 20 0 0 0 0 S 0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0 0.0 0:00.00 ksoftirqd/0
5 root 0 -20 0 0 0 S 0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0 0.0 0:00.11 kworker/u:0
7 root 0 -20 0 0 0 S 0 0.0 0:00.00 kworker/u:0H
8 root RT 0 0 0 0 S 0 0.0 0:00.01 migration/0
9 root 20 0 0 0 0 S 0 0.0 0:00.31 rcu_preempt
10 root 20 0 0 0 0 S 0 0.0 0:00.00 rcu_bh
11 root 20 0 0 0 0 S 0 0.0 0:00.00 rcu_sched
12 root 20 0 0 0 0 S 0 0.0 0:00.01 ksoftirqd/1
13 root RT 0 0 0 0 S 0 0.0 0:00.01 migration/1
14 root 20 0 0 0 0 S 0 0.0 0:00.00 kworker/1:0
15 root 0 -20 0 0 0 S 0 0.0 0:00.00 kworker/1:0H
16 root 0 -20 0 0 0 S 0 0.0 0:00.00 khelper
17 root 20 0 0 0 0 S 0 0.0 0:00.00 kdevtmpfs


・起動メッセージの全部と、ディレクトリ構成を下に貼っておく。

U-Boot 2012.10-dirty (May 15 2014 - 19:53:53)

DRAM: 512 MiB
WARNING: Caches not enabled
MMC: SDHCI: 0
SF: Detected S25FL256S with page size 64 KiB, total 32 MiB
SF: Warning - Only lower 16MB is accessible in 3 byte addressing mode
*** Warning - bad CRC, using default environment

In: serial
Out: serial
Err: serial
Net: zynq_gem
Hit any key to stop autoboot: 0
Copying Linux from SD to RAM...
Device: SDHCI
Manufacturer ID: 27
OEM: 5048
Name: SD08G
Tran Speed: 50000000
Rd Block Len: 512
SD version 2.0
High Capacity: Yes
Capacity: 7.4 GiB
Bus Width: 4-bit
reading uImage

2907968 bytes read
reading devicetree.dtb

6001 bytes read
## Booting kernel from Legacy Image at 03000000 ...
Image Name: Linux-3.8.0-ga6ab43a
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2907904 Bytes = 2.8 MiB
Load Address: 00008000
Entry Point: 00008000
Verifying Checksum ... OK
## Flattened Device Tree blob at 02a00000
Booting using the fdt blob at 0x02a00000
Loading Kernel Image ... OK
OK
Loading Device Tree to 1fb50000, end 1fb54770 ... OK

Starting kernel ...

Booting Linux on physical CPU 0x0
Linux version 3.8.0-ga6ab43a (masaaki@masaaki-VirtualBox) (gcc version 4.6.3 (Sourcery CodeBench Lite 2012.03-79) ) #4 SMP PREEMPT Thu May 15 20:57:26 JST 2014
CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine: Xilinx Zynq Platform, model: Xilinx Zynq ZED
bootconsole [earlycon0] enabled
cma: CMA: reserved 40 MiB at 1d000000
Memory policy: ECC disabled, Data cache writealloc
PERCPU: Embedded 7 pages/cpu @c0e7b000 s8000 r8192 d12480 u32768
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 130048
Kernel command line: console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0
PID hash table entries: 2048 (order: 1, 8192 bytes)
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
__ex_table already sorted, skipping sort
Memory: 512MB = 512MB total
Memory: 467916k/467916k available, 56372k reserved, 0K highmem
Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
vmalloc : 0xe0800000 - 0xff000000 ( 488 MB)
lowmem : 0xc0000000 - 0xe0000000 ( 512 MB)
pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)
modules : 0xbf000000 - 0xbfe00000 ( 14 MB)
.text : 0xc0008000 - 0xc0501664 (5094 kB)
.init : 0xc0502000 - 0xc052bf40 ( 168 kB)
.data : 0xc052c000 - 0xc0568d20 ( 244 kB)
.bss : 0xc0568d20 - 0xc0a706b8 (5151 kB)
Preemptible hierarchical RCU implementation.
RCU lockdep checking is enabled.
Dump stacks of tasks blocking RCU-preempt GP.
RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
NR_IRQS:16 nr_irqs:16 16
MIO pin 11 not assigned(00001760)
xslcr mapped to e0802000
Zynq clock init
timer #0 at e0804000, irq=43
sched_clock: 32 bits at 100 Hz, resolution 10000000ns, wraps every 4294967286ms
Console: colour dummy device 80x30
Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar
... MAX_LOCKDEP_SUBCLASSES: 8
... MAX_LOCK_DEPTH: 48
... MAX_LOCKDEP_KEYS: 8191
... CLASSHASH_SIZE: 4096
... MAX_LOCKDEP_ENTRIES: 16384
... MAX_LOCKDEP_CHAINS: 32768
... CHAINHASH_SIZE: 16384
memory used by lock dependency info: 3695 kB
per task-struct memory footprint: 1152 bytes
Calibrating delay loop... 1332.01 BogoMIPS (lpj=6660096)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
Setting up static identity map for 0x37fc68 - 0x37fc9c
L310 cache controller enabled
l2x0: 8 ways, CACHE_ID 0x000000c0, AUX_CTRL 0x72360000, Cache size: 524288 B
CPU1: Booted secondary processor
CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
Brought up 2 CPUs
SMP: Total of 2 processors activated (2664.03 BogoMIPS).
devtmpfs: initialized
NET: Registered protocol family 16
DMA: preallocated 256 KiB pool for atomic coherent allocations
xgpiops e000a000.gpio: gpio at 0xe000a000 mapped to 0xe080c000
hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
hw-breakpoint: maximum watchpoint size is 4 bytes.
bio: create slab at 0
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
Advanced Linux Sound Architecture Driver Initialized.
Switching to clocksource xttcps_clocksource
NET: Registered protocol family 2
TCP established hash table entries: 4096 (order: 3, 32768 bytes)
TCP bind hash table entries: 4096 (order: 5, 147456 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP: reno registered
UDP hash table entries: 256 (order: 2, 20480 bytes)
UDP-Lite hash table entries: 256 (order: 2, 20480 bytes)
NET: Registered protocol family 1
hw perfevents: enabled with ARMv7 Cortex-A9 PMU driver, 7 counters available
msgmni has been set to 993
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
xuartps e0001000.uart: failed to get alias id, errno -19
e0001console [ttyPS0] enabled, bootconsole disabled
console [ttyPS0] enabled, bootconsole disabled
xdevcfg f8007000.devcfg: ioremap f8007000 to e0814000 with size 1000
[drm] Initialized drm 1.1.0 20060810
platform 6c000000.axi_hdmi: Driver axi-hdmi requests probe deferral
brd: module loaded
loop: module loaded
xqspips e000d000.spi: master is unqueued, this is deprecated
xqspips e000d000.spi: at 0xE000D000 mapped to 0xE0816000, irq=51
libphy: XEMACPS mii bus: probed
xemacps e000b000.eth: pdev->id -1, baseaddr 0xe000b000, irq 54
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
ULPI transceiver vendor/product ID 0x0451/0x1507
Found TI TUSB1210 ULPI transceiver.
ULPI integrity check: passed.
xusbps-ehci xusbps-ehci.0: Xilinx PS USB EHCI Host Controller
xusbps-ehci xusbps-ehci.0: new USB bus registered, assigned bus number 1
xusbps-ehci xusbps-ehci.0: irq 53, io mem 0x00000000
xusbps-ehci xusbps-ehci.0: USB 2.0 started, EHCI 1.00
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
mousedev: PS/2 mouse device common for all mice
i2c /dev entries driver
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
mmc0: Invalid maximum block size, assuming 512 bytes
mmc0: SDHCI controller on e0100000.sdhci [e0100000.sdhci] using ADMA
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
mmc0: new high speed SDHC card at address 0007
mmcblk0: mmc0:0007 SD08G 7.42 GiB
mmcblk0: p1 p2
adv7511 0-0039: ASoC: no sink widget found for TMDS
adv7511 0-0039: ASoC: Failed to add route AIFIN -> direct -> TMDS
adv7511-hdmi-snd adv7511_hdmi_snd.3: adv7511 <-> 75c00000.axi-spdif-tx mapping ok
TCP: cubic registered
NET: Registered protocol family 17
VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
Registering SWP/SWPB emulation handler
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
ALSA device list:
#0: HDMI monitor
axi-hdmi 6c000000.axi_hdmi: No connectors reported connected with modes
[drm] Cannot find any crtc or sizes - going 1024x768
Console: switching to colour frame buffer device 128x48
axi-hdmi 6c000000.axi_hdmi: fb0: frame buffer device
axi-hdmi 6c000000.axi_hdmi: registered panic notifier
[drm] Initialized axi_hdmi_drm 1.0.0 20120930 on minor 0
EXT4-fs (mmcblk0p2): recovery complete
EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) on device 179:2.
Freeing init memory: 164K
init: ureadahead main process (741) terminated with status 5
Last login: Thu Jan 1 00:00:13 UTC 1970 on tty1
root@linaro-ubuntu-desktop:~# cd /
root@linaro-ubuntu-desktop:/# ls
bin dev home lost+found mnt proc run selinux sys usr
boot etc lib media opt root sbin srv tmp var
root@linaro-ubuntu-desktop:/# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 7463628 1485216 5592620 21% /
none 50904 404 50500 1% /run
none 5120 0 5120 0% /run/lock
none 254520 76 254444 1% /run/shm


ZedBoard用のUbuntu Linuxをビルド8(swap spaceの追加)”に続く。
  1. 2014年05月18日 05:38 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

ZedBoard用のUbuntu Linuxをビルド6(SDカードを用意する)

ZedBoard用のUbuntu Linuxをビルド5(device Treeをビルド)”の続き。

前回は device tree をビルドした。今回は、そろそろ必要ということで、SDカードを用意することにした。
Yet Another Guide to Running Linaro Ubuntu Linux Desktop on Xilinx Zynq on the ZedBoard”の”Prepare the SD card”をやってみるのだが、やり方は書いてないので、FPGAマガジン No.5 の第3章”Zynq評価ボードZedBoardでLinuxを動かそう”という石原 ひでみさんの記事の中の48ページの”図17 SDカードのパーティション操作手順”を参考にSDカードをフォーマットすることにした。
Yet Another Guide to Running Linaro Ubuntu Linux Desktop on Xilinx Zynq on the ZedBoard”の”Prepare the SD card”では、40MB程度のfirst parttion をFATでフォーマットして、second parttion は残りの容量を ext4 でフォーマットするということだった。今回は、64MBのfirst parttion をFATでフォーマットして、second parttion は残りの容量を ext4 でフォーマットしようと思う。

・Windows7にインストールしたVirtualBoxのゲストOSとしてインストールしたUbuntu14.04にSDカード・リーダーに入ったSDカードをマウントすると、/media/masaaki/0635-C326 にマウントされた。

lsblk コマンドを実行して、SDカードを検索した。
Ubuntu_build_for_ZedBoard_40_140517.png

・/dev/sdb がSDカードのようだ。

2017/11/25:追記 sudo umount /dev/sdb1 で /dev/sdb1のマウントを解除すると最後に w コマンドで書き込んだ時にエラーになりません)

sudo fdisk /dev/sdb コマンドを実行してSDカードのフォーマットを開始した。
Ubuntu_build_for_ZedBoard_41_140517.png

fdisk のマニュアルも見ながらやってみよう。

m コマンドでヘルプを見た。
Ubuntu_build_for_ZedBoard_42_140517.png

l コマンドで、既存のパーティションタイプをリスト表示してみた。
Ubuntu_build_for_ZedBoard_43_140517.png

p コマンドで既存のパーティションを表示した。FAT32パーティションが生成されていた。

d コマンドでパーティションを削除した。

p コマンドで見ると、パーティションが消去されていた。
Ubuntu_build_for_ZedBoard_44_140517.png

プライマリ・ディスクのパーティション番号1に64MBの領域を確保する

n コマンドで新たにパーティションを作製した。

p を押して、primary パーティションを指定した。

・パーティション番号を 1 にセット。

・最初セクタで、リターンキーを入力した。

・Lastセクタで、+64M を入力して、64MBの領域を確保した。

p コマンドででパーティションを表示した。
Ubuntu_build_for_ZedBoard_45_140517.png

プライマリ・ディスクのパーティション番号2に約7.7GBの領域を確保する

n コマンドで新たにパーティションを作製した。

p を押して、primary パーティションを指定した。

・パーティション番号を 2 にセット。

・最初セクタで、リターンキーを入力した。

・Lastセクタで、リターンキーを入力した。

p コマンドででパーティションを表示した。
Ubuntu_build_for_ZedBoard_46_140517.png

プライマリ・ディスクのパーティション番号1をFAT32にして、ブート可能フラグを付ける

t コマンドを入力した。

・パーティション番号に 1 を入力した。

・16進コードに、b を入力した。(W95 FAT32)

a コマンドを入力して、ブート可能フラグを付ける。

・パーティション番号に 1 を入力した。

p コマンドででパーティションを表示した。
Ubuntu_build_for_ZedBoard_47_140517.png

SDカードへの書き込み

・w コマンドを実行した。パーティション・テーブルは変更されたが、再読み込みでエラー。 partprobe コマンドを実行してもダメだった。
Ubuntu_build_for_ZedBoard_48_140517.png

・いろいろとやってみたが、VirtualBoxへのマウントを解除して(VirtualBoxメニューのデバイスメニューからUSBデバイスを指定してマウントを解除)、もう一度、VirtualBoxへマウントした。

・もう一度、sudo fdisk /dev/sdb コマンドを実行してから、w コマンドを実行したところうまく行ったようだ。
Ubuntu_build_for_ZedBoard_49_140517.png

FPGAマガジン No.5 の第3章”Zynq評価ボードZedBoardでLinuxを動かそう”という石原 ひでみさんの記事を参考に、/dev/sdb1 に対して、

sudo mkfs.msdos -n ZED_BOOT /dev/sdb1

を実行した。

・実行後、デバイスに ZED_BOOT がマウントされた。

・また、同様に、/dev/sdb2 に対して、

sudo mkfs.ext4 -L ROOT_FS /dev/sdb2

を実行した。
Ubuntu_build_for_ZedBoard_50_140517.png

・実行後、デバイスに ROOT_FS がマウントされた。2つのデバイスのプロパティを示す。
Ubuntu_build_for_ZedBoard_51_140517.png

・”ZedBoard用のUbuntu Linuxをビルド3(BOOT.BINを生成)”で生成した BOOT.BIN を ZED_BOOT にコピーした。

・”ZedBoard用のUbuntu Linuxをビルド4(uImageをビルド)”でビルドした uImage を ZED_BOOT にコピーした。

・”ZedBoard用のUbuntu Linuxをビルド5(device Treeをビルド)”でビルドした zynq-zed-adv7511.dtb を ZED_BOOT にコピーした。
Ubuntu_build_for_ZedBoard_52_140517.png

・zynq-zed-adv7511.dtb を devicetree.dtb にリネームした。
Ubuntu_build_for_ZedBoard_53_140517.png

ZedBoard用のUbuntu Linuxをビルド7(rootfsの書き込みと実機動作)”に続く。
  1. 2014年05月17日 19:53 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

ZedBoard用のUbuntu Linuxをビルド5(device Treeをビルド)

ZedBoard用のUbuntu Linuxをビルド4(uImageをビルド)”の続き。

前回は、Linuxカーネルをビルドした。今回は、device tree をビルドする。
Yet Another Guide to Running Linaro Ubuntu Linux Desktop on Xilinx Zynq on the ZedBoard”の”Build the device tree”をやってみる。

・~/Ubuntu/linux/arch/arm/boot/dts/zynq-zed-adv7511.dts の bootargs を見た。115,200bps、SDカード上のルート・ファイル・システムに設定されているようだ。
Ubuntu_build_for_ZedBoard_37_140516.png

・~/Ubuntu/linux 階層上で、make zynq-zed-adv7511.dtb コマンドを実行した。
Ubuntu_build_for_ZedBoard_38_140516.png

・~/Ubuntu/linux/arch/arm/boot/dts ディレクトリに、zynq-zed-adv7511.dtb が生成された。
Ubuntu_build_for_ZedBoard_39_140516.png

ZedBoard用のUbuntu Linuxをビルド6(SDカードを用意する)”に続く。
  1. 2014年05月17日 04:06 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:1

ZedBoard用のUbuntu Linuxをビルド4(uImageをビルド)

ZedBoard用のUbuntu Linuxをビルド3(BOOT.BINを生成)”の続き。

前回は、BOOT.BINを生成した。今回は、uImage をビルドする。
Yet Another Guide to Running Linaro Ubuntu Linux Desktop on Xilinx Zynq on the ZedBoard”の”Build the linux kernel, mostly according to the ADI instructions.”をやってみる。

なお、かなりビルドをやり直しているので、キャプチャした図に一貫性がありません。ご了承下さい。

git clone https://github.com/analogdevicesinc/linux.git ; cd linux コマンドを実行した。
Ubuntu_build_for_ZedBoard_28_140515.png

git checkout xcomm_zynq_3_8 コマンドを実行した。(xcomm_zynq はバージョンアップされているようだ)
Ubuntu_build_for_ZedBoard_31_140515.png

export ARCH=arm コマンドを実行した。
Ubuntu_build_for_ZedBoard_30_140515.png

export CROSS_COMPILE=arm-xilinx-linux-gnueabi- コマンドを実行すべきだが、環境変数ですでにセットしてあった。
Ubuntu_build_for_ZedBoard_12_140514.png

make zync_xcomm_adv7511_defconfig コマンドを実行した。(zync になっていますが、これであっています。”git checkout xcomm_zynq”で最新バージョンを落とすと、zynq_xcomm_adv7511_defconfig でした)
Ubuntu_build_for_ZedBoard_32_140515.png

export PATH=/home/masaaki/Ubuntu/u-boot-xlnx/tools:$PATH コマンドを実行して、u-boot-xlnx/tools にパスを通した。

make uImage LOADADDR=8000 コマンドを実行した。(なお、LOADADDR=0x00008000 ではエラーだった。どうやら、今回ビルドした mkimage は、0xを頭につけるのではなく、そのまま16進数を与えれば良いようだ)
Ubuntu_build_for_ZedBoard_35_140515.png
(注:上図は、ビルドが短いように見えますが、実際はもっと長いです。一度ビルドして、mkimage のエラーで終了した状態から、LOADADDR を変えて何度かやり直しています。)

・Ubuntu/linux/arch/arm/boot に uImage ができた。
Ubuntu_build_for_ZedBoard_36_140515.png

ZedBoard用のUbuntu Linuxをビルド5(device Treeをビルド)”に続く。
  1. 2014年05月16日 04:36 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

ZedBoard用のUbuntu Linuxをビルド3(BOOT.BINを生成)

ZedBoard用のUbuntu Linuxをビルド2(u-bootをビルド)”の続き。

前回は、u-bootをビルドしたが、今回は、SDカードに入れるブート用のソフトウェア BOOT.BIN を生成する。
Yet Another Guide to Running Linaro Ubuntu Linux Desktop on Xilinx Zynq on the ZedBoard”の”Build the boot image BOOT.BIN”に準拠しているが、やり方は私、独自のやり方で行った。

・”ZedBoard用のUbuntu Linuxをビルド1(PLをビルド)”で、開いてあるSDKで、Fileメニューから New -> Application Project を選択した。

・New Project ダイアログで、Project Name にFSBLと入力して、Next >ボタンをクリックした。
Ubuntu_build_for_ZedBoard_20_140514.png

・次の画面で、Zynq FSBL を選択して、Finishボタンをクリックした。
Ubuntu_build_for_ZedBoard_21_140514.png

・FSBLプロジェクトとFSBL_bspプロジェクトが出来た。コンパイルされて、FSBLのBinariesもできている。
Ubuntu_build_for_ZedBoard_22_140514.png

・FSBLプロジェクトで右クリックし、右クリックメニューから、Create Boot Image を選択した。
Ubuntu_build_for_ZedBoard_23_140514.png

・ダイアログが立ち上がり、FSBL.elf と system.bit はすでに入っていたので、Addボタンをクリックして、”ZedBoard用のUbuntu Linuxをビルド2(u-bootをビルド)”でビルドした u-boot.elf を追加した。
Ubuntu_build_for_ZedBoard_24_140514.png

・FSBLプロジェクトに bootimage ディレクトリができた。その中に、u-boot.bin が生成された。
Ubuntu_build_for_ZedBoard_25_140514.png

・u-boot.bin を右クリックして、右クリックメニューから Rename を選択した。

・Rename Resource ダイアログで、New name に BOOT.BIN を入力して、OKボタンをクリックした。
Ubuntu_build_for_ZedBoard_26_140514.png

・BOOT.BINができた。
Ubuntu_build_for_ZedBoard_27_140514.png

ZedBoard用のUbuntu Linuxをビルド4(uImageをビルド)”に続く。
  1. 2014年05月15日 04:52 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

ZedBoard用のUbuntu Linuxをビルド2(u-bootをビルド)

ZedBoard用のUbuntu Linuxをビルド1(PLをビルド)”の続き。

今回は、u-bootをビルドする。
Yet Another Guide to Running Linaro Ubuntu Linux Desktop on Xilinx Zynq on the ZedBoard”の”Build u-boot, the Linux boot-loader”をやってみる。
なお、CodeSourceryは以前に、Digilent Linuxをビルドした時にインストールしてあるはず

・homeディレクトリの下にUbuntuディレクトリを作った。

・Ubuntuディレクトリの下で、git clone git://git.xilinx.com/u-boot-xlnx.git; cd u-boot-xlnx コマンドを実行した。
Ubuntu_build_for_ZedBoard_7_140514.png

実行後
Ubuntu_build_for_ZedBoard_8_140514.png

・Ubuntuディレクトリの下に、u-boot-xlnxディレクトリが作られた。
Ubuntu_build_for_ZedBoard_9_140514.png

git checkout -b xilinx-v14.4 xilinx-v14.4 コマンドを実行した。
Ubuntu_build_for_ZedBoard_10_140514.png

・Ubuntu/u-boot-xlnx の下を下図に示す。
Ubuntu_build_for_ZedBoard_11_140514.png

・CROSS_COMPILEの環境変数は、すでに設定してあった。
Ubuntu_build_for_ZedBoard_12_140514.png

・Ubuntu/u-boot-xlnx/include/configsディレクトリに行った。zynq_common.h があった。
Ubuntu_build_for_ZedBoard_13_140514.png

・zynq_common.h を開いて、sdboot を検索した。
Ubuntu_build_for_ZedBoard_14_140514.png

・ramdis_image の210行目を消去して、”bootm 0×3000000 0x20000000 0x2A00000”を”bootm 0×3000000 – 0x2A00000”に変更した。これでセーブ。
Ubuntu_build_for_ZedBoard_15_140514.png

ramdiskを削除して、SDカードの /dev/mmcblk0p2 を使うようにするようだ。これは、Linaro ext4 ファイルシステムを使用しているそうだ。

make zynq_zed_config コマンドを実行した。
Ubuntu_build_for_ZedBoard_16_140514.png

make コマンドを実行した。うまく行ったみたい。。。
Ubuntu_build_for_ZedBoard_17_140514.png

・u-boot ができた。
Ubuntu_build_for_ZedBoard_18_140514.png

・u-boot を ”ZedBoard用のUbuntu Linuxをビルド1(PLをビルド)”の SDK_Export ディレクトリにコピーして、u-boot.elf にリネームした。
Ubuntu_build_for_ZedBoard_19_140514.png

ZedBoard用のUbuntu Linuxをビルド3(BOOT.BINを生成)”に続く。
  1. 2014年05月14日 05:37 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:2

ZedBoard用のUbuntu Linuxをビルド1(PLをビルド)

FPGA CPU News さんの”Yet Another Guide to Running Linaro Ubuntu Linux Desktop on Xilinx Zynq on the ZedBoard”をやってみることにした。

試す環境としては、Windows7 64bit版に VirtualBox をインストールし、そのゲストOSとして Ubuntu14.04 をインストールしてある。よって、その下で ZedBoard用のUbuntu をビルドする。ISEはLinux用のISE14.4を使用する。

最初にSDカードだが、8GBのSDカードがあるので、これを使用することにする。

・ANALOG DEVICES の”ADV7511 XILINX EVALUATION BOARDS REFERENCE DESIGN”から、http://wiki.analog.com/_media/resources/fpga/xilinx/kc705/cf_adv7511_zed_edk_14_4_2013_02_05.tar.gz をダウンロードした。

・cf_adv7511_zed_edk_14_4_2013_02_05.tar.gz を解凍すると、cf_adv7511_zed、cf_lib の2つのディレクトリができた。
Ubuntu_build_for_ZedBoard_2_140513.png

・cf_adv7511_zed ディレクトリに入ると、system.xmp があった。
Ubuntu_build_for_ZedBoard_3_140513.png

XPS14.4 を起動して、system.xmp をオープンする。

・XILINX環境変数がセットされていなかったので、

export XILINX=/opt/Xilinx/14.4/ISE_DS/ISE

コマンドを実行した。

・xps コマンドを実行して、XPS14.4を起動した。

・Implement Flow から Generate BitStream をクリックして、ビットストリームを生成した。
Ubuntu_build_for_ZedBoard_1_140513.png

・Implement Flow から Export Design をクリックして、SDKにハード情報をエクスポートする。

・Export to SDK/Launch SDKダイアログが出た。Export & Launch SDK ボタンをクリックした。
Ubuntu_build_for_ZedBoard_4_140513.png

・SDKが立ち上がって、ワークスペースを聞いてくるので、”/home/masaaki/HDL/ZedBoard/Ubuntu/cf_adv7511_zed/SDK/SDK_Export”を指定した。
Ubuntu_build_for_ZedBoard_5_140513.png

・SDKが立ち上がった。
Ubuntu_build_for_ZedBoard_6_140513.png

ZedBoard用のUbuntu Linuxをビルド2(u-bootをビルド)”に続く。
  1. 2014年05月13日 05:25 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:3

ZYBOでXillinuxを起動してみる

Ryuzのブログさんの”ZYBO(Zynq)のLinux(Xillinux起動)”の記事を見ると、ZYBOでXillinuxが簡単に起動できたということなので、やってみることにした。

・まずは、”Xillinux: A Linux distribution for Zedboard, ZyBo, MicroZed and SocKit”のページで、boot partition kit の xillinux-eval-zybo-1.3.zip と SD card image の xillinux-1.3.img.gz をダウンロードした。

この後からは、”Getting started with Xillinux for Zynq-7000 EPP v1.3”の内容に従ってやってみた。
”3.2 Unzipping the boot partition kit”から。

・xillinux-eval-zybo-1.3.zip を解凍すると、xillinux-eval-zybo-1.3 フォルダが出来た。その下には、6つのフォルダがあった。
Xillinux_5_140510.png

・XPS 14.7 を立ちあげて、system/system.xmp を選択して、プロジェクトを立ちあげた。

・Processing System コアをアップグレードした。

・XPSで左のImplement Flow からGenerate Netlist をクリックした。

・Netlistを生成し終わったところを下に示す。
Xillinux_1_140508.png

Xillinux_2_140508.png

Xillinux_3_140508.png

・ISE14.7 の Project Navigator を起動して、runonce フォルダの下の fifo_8x2048.xise プロジェクトを開いた。

・3つの FIFOコアがあるので、それぞれを Regenerate Core した。下の図は3つのコアの生成が終了したところだ。
Xillinux_4_140508.png

・次は、VHDLの場合は、vhdl フォルダ、Verilog HDL の場合は、verilog フォルダの xillydemo.xise プロジェクトをISE14.7 の Project Navigator で開く。今回は、Verilog HDLのプロジェクトを開いた。

・ビットストリームを生成した。下の図は、ビットストリームの生成が終了したところだ。
Xillinux_6_140510.png

・次に、xillinux-1.3.img.gz を解凍すると、xillinux-1.3.img フォルダが出来て、その下に、xillinux-1.3.img ファイルが出来た。

・xillinux-1.3.img をSDカードに書くため、Win32 Disk Imager を起動してWriteした。
Xillinux_7_140510.png

・xillinux-1.3.img が書けた。
Xillinux_8_140510.png

・Ubuntuにマウントしてみると、FATの16MBボリュームとext3/ext4 の1.8GBボリュームの2つがマウントされた。

・FATの16MBボリュームに bootfiles フォルダの boot.bin と devicetree.dtb をコピーした。
Xillinux_9_140510.png

・Ubuntuからアンマウントして、Windows 7 にマウントして、verilog フォルダの xillydemo.bit を FATの16MBボリュームにコピーした。
Xillinux_10_140510.png

これで、ZYBOに入れてみようとしたら、衝撃の事実が判明。。。ZYBOのスロットは microSDスロットでした。。。今まで作ってきたのは、SDカードです。。。microSDカードは持っていないので、アマゾンで速攻注文しました。後で書き直します。。。

アマゾンからmicroSDが届いてやってみることにしました。でも、ふと気が付くと、パソコン本体の microSDスロットに4GBの microSDカードが入っていたことに気が付きました。あちゃ~、買わなくても良かったんじゃん。。。ボケてました。。。

さて、本題に戻る。
・microSDカードで、Win32 Disk Imager を起動してWriteする行程から行い、ZYBOの microSDスロットに挿入した。

・JP5 のジャンパーピンを SD に変更した。

・ZYBOの電源をONした。

・Xillinuxが起動したようだ。Tera Termでシリアルに接続するとXillinuxが起動したのがわかった。
Xillinux_11_140510.png

・HDMIディスプレイ出力を見ると、Xillinuxがブートしてた。
Xillinux_12_140510.jpg

・キーボードをZYBOのUSB-Aコネクタに接続して、startx と入力した。Ubuntuが立ち上がった。
Xillinux_13_140510.jpg

・Firefoxを起動して、FPGAの部屋を表示してみた。なお、LANケーブルをZYBOに接続している。DHCPでIPは割り振られるようだ。
Xillinux_14_140510.jpg

HDMIの出力画像は、1024 x 768 の XGA だった。お手軽に、Ubuntuが動くのが驚きだ。でも、バイナリしか無いので、ソースがあると良いですね。
  1. 2014年05月11日 04:46 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

7シリーズのMMCM (Mixed Mode Clock Manager)

7シリーズ用のMMCM (Mixed Mode Clock Manager)についてまとめておこうと思います。

7シリーズ用のMMCMについては、”ZYBOのAXI4 Slave キャラクタ・ディスプレイ・コントローラ IP5(MMCM)”で書いたのですが、より詳細にまとめておこうと思います。とにかく M と O0 に実数が使えるのが良いです。但し、0.125ステップです。

なおこのブログを書くにあたっては、”7 シリーズ FPGA クロッキング リソースユーザーガイド UG472 (v1.8) 2013 年 8 月 7 日”を参照しました。

まずは、”7 シリーズ FPGA クロッキング リソースユーザーガイド UG472 (v1.8) 2013 年 8 月 7 日”の63ページの図3-2 : MMCM の詳細なブロック図を引用します。
MMCM_1_140509.png

D は、クロック入力のプログラマブルな分周器です。その分周比は、プリミティブで言うと、DIVCLK_DIVIDE パラメータに相当します。(値は、1 ~ 106 の整数値)

M は、VCOの周波数を分周して入力クロックとVCOで位相比較器するための分周器です。プリミティブで言うと、CLKFBOUT_MULT_F パラメータに相当します。(値は、2 ~ 64までの整数か、2.000 ~ 64.000 の増加幅が 0.125の実数)

O0 ~ O6 は、出力の分周器です。O0のみ分周比に実数を使うことが出来ます。それ以外の分周比は整数です。
プリミティブで言うと、O0のパラメータは、CLKOUT0_DIVIDE_F です。(値は、2 ~ 128までの整数か、2.000 ~ 128.000 の増加幅が 0.125の実数)
O1 ~ O6 は、プリミティブのパラメータは、CLKOUT[0:6]_DIVIDE です。(値は、1 ~ 128 の整数)

VCOの周波数、Fvco = Fclkin x M / D です。

Zynq-7000 All Programmable SoC (Z-7010、Z-7015、Z-7020) : DC 特性および AC スイッチ特性 (日本語版) ( ver 1.11, 2411 KB )”の 46ページ、表 69 : MMCM のスイッチ特性によると、MMCM_FVCOMIN(最小 MMCM VCO 周波数)は 600MHz、MMCM_FVCOMAX(最大 MMCM VCO 周波数)は -1 グレードでは、1200MHz ですので、この間に、Fvco を収める必要があります。

出力周波数は、 Fout = Fclkin x M / (D x O) です。

MMCMの 0番目は、O が実数で選択できるので、かなり正確に出力周波数を合わせることが出来ますが、M と O を決めるのが難しいです。ソフトウェアがあると良いですね。作ろうと思っていましたが、面倒ですね。誰か作ってくれると良いですね。。。

下に私のHDMIの周波数のパラメータを示します。シリアライザに供給するためピクセルクロックの5倍の周波数をMMCMで合成しています。XGAまではピッタリの周波数を合成できましたが、SXGA、HDはピッタリの周波数を合成できませんでした。HDの周波数については、表示ができなかったので、再検討が必要だと思います。
DIVCLK_DIVIDE = 1, MMCM_CLKFBOUT_MULT が CLKFBOUT_MULT_F、MMCM_CLKOUT0_DIVIDE が CLKOUT0_DIVIDE_F に相当します。

    -- pixclk = 25MHz, MMCM VCO Frequency = 600 ~ 1200 MHz
    dvi_disp_inst : dvi_disp generic map (
        -- MMCM_CLKFBOUT_MULT    => 30.0,    -- VGA (VCO Freq = 750MHz)
        -- MMCM_CLKIN_PERIOD    => 40.0,
        -- MMCM_CLKOUT0_DIVIDE    => 6.0        -- 25MHz x 5 = 125MHz
        
        -- MMCM_CLKFBOUT_MULT    => 24.0,    -- SVGA (VCO Freq = 600MHz)
        -- MMCM_CLKIN_PERIOD    => 40.0,
        -- MMCM_CLKOUT0_DIVIDE    => 3.0        -- 40MHz x 5 = 200MHz
        
        MMCM_CLKFBOUT_MULT    => 26.0,    -- XGA (VCO Freq = 650MHz)
        MMCM_CLKIN_PERIOD    => 40.0,
        MMCM_CLKOUT0_DIVIDE    => 2.0        -- 65MHz x 5 = 325MHz
        
        -- MMCM_CLKFBOUT_MULT    => 43.25,        -- SXGA (VCO Freq = 1081.25MHz)
        -- MMCM_CLKIN_PERIOD    => 40.0,
        -- MMCM_CLKOUT0_DIVIDE    => 2.0            -- 108MHz x 5 = 540MHz(540.625/5=108.125MHz)
        
        -- MMCM_CLKFBOUT_MULT    => 29.75,    -- HD (VCO Freq = 743.75MHz)
        -- MMCM_CLKIN_PERIOD    => 40.0,
        -- MMCM_CLKOUT0_DIVIDE    => 1.0        -- 148.5MHz x 5 = 742.5MHz(743.75/5=148.75MHz)
    ) port map (


Xilinx\14.7\ISE_DS\ISE\verilog\src\unisims に Verilog HDLのプリミティブのソースが有ります。その、MMCME2_ADV.v と MMCME2_BASE.v を見ると、どのようなパラメータとポートがあるかわかると思います。VHDLでしたら、Xilinx\14.7\ISE_DS\ISE\vhdl\src\unisims\primitive です。VHDLの MMCME2_BASE のポート宣言部分を下に引用します。

  entity MMCME2_BASE is
    generic (
      BANDWIDTH : string := "OPTIMIZED";
      CLKFBOUT_MULT_F : real := 5.000;
      CLKFBOUT_PHASE : real := 0.000;
      CLKIN1_PERIOD : real := 0.000;
      CLKOUT0_DIVIDE_F : real := 1.000;
      CLKOUT0_DUTY_CYCLE : real := 0.500;
      CLKOUT0_PHASE : real := 0.000;
      CLKOUT1_DIVIDE : integer := 1;
      CLKOUT1_DUTY_CYCLE : real := 0.500;
      CLKOUT1_PHASE : real := 0.000;
      CLKOUT2_DIVIDE : integer := 1;
      CLKOUT2_DUTY_CYCLE : real := 0.500;
      CLKOUT2_PHASE : real := 0.000;
      CLKOUT3_DIVIDE : integer := 1;
      CLKOUT3_DUTY_CYCLE : real := 0.500;
      CLKOUT3_PHASE : real := 0.000;
      CLKOUT4_CASCADE : boolean := FALSE;
      CLKOUT4_DIVIDE : integer := 1;
      CLKOUT4_DUTY_CYCLE : real := 0.500;
      CLKOUT4_PHASE : real := 0.000;
      CLKOUT5_DIVIDE : integer := 1;
      CLKOUT5_DUTY_CYCLE : real := 0.500;
      CLKOUT5_PHASE : real := 0.000;
      CLKOUT6_DIVIDE : integer := 1;
      CLKOUT6_DUTY_CYCLE : real := 0.500;
      CLKOUT6_PHASE : real := 0.000;
      DIVCLK_DIVIDE : integer := 1;
      REF_JITTER1 : real := 0.010;
      STARTUP_WAIT : boolean := FALSE
    );

    port (
      CLKFBOUT             : out std_ulogic;
      CLKFBOUTB            : out std_ulogic;
      CLKOUT0              : out std_ulogic;
      CLKOUT0B             : out std_ulogic;
      CLKOUT1              : out std_ulogic;
      CLKOUT1B             : out std_ulogic;
      CLKOUT2              : out std_ulogic;
      CLKOUT2B             : out std_ulogic;
      CLKOUT3              : out std_ulogic;
      CLKOUT3B             : out std_ulogic;
      CLKOUT4              : out std_ulogic;
      CLKOUT5              : out std_ulogic;
      CLKOUT6              : out std_ulogic;
      LOCKED               : out std_ulogic;
      CLKFBIN              : in std_ulogic;
      CLKIN1               : in std_ulogic;
      PWRDWN               : in std_ulogic;
      RST                  : in std_ulogic      
    );

  1. 2014年05月09日 05:24 |
  2. Artix-7, Kintex-7, Virtex-7
  3. | トラックバック:0
  4. | コメント:0

アメージング・スパイダーマン2を見てきました

今日は、奥さんとアメージング・スパイダーマン2(音注意)を見てきました。CGも凄くて、面白かったです。意外でしたけど。。。
今、帰省した娘を送っていったところです。寂しい気持ちになりましたが、私はZYBOがありますね。(言うことを聞かないですが。。。)
  1. 2014年05月06日 17:59 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

ZYBOのAXI4 Slave キャラクタ・ディスプレイ・コントローラ IP6(ぱっと消えてしまうことがある)

ZYBOのAXI4 Slave キャラクタ・ディスプレイ・コントローラ IP5(MMCM)”の続き。

ZYBOで実機で試してみたところ、”ZYBOのAXI4 Slave キャラクタ・ディスプレイ・コントローラ IP3(SVGA以外の解像度)”と同様に、XGAやSXGA解像度で試すと、画像が消えてしまうことがある。ぱっと消えて、また表示されるを繰り返している。前回同様にSVGA解像度では問題ない。
いろいろとやってみたが、原因がわからない?
違うZYBOでやってみることにする。

(2014/05/08:追記)
ZYBOボードとディスプレイを変更するときちんと映りました。水平周波数は48.4KHz、垂直周波数は60.4Hzでした。

XGA画像のパラメータを計算してみたところ、1/65E6*(1024+24+136+160)*(768+2+6+29) = 0.0166449230769231 でした。
これを16.667msec に近づけるために、1/65E6*(1024+24+136+162)*(768+2+6+29) = 0.0166696923076923 に変更してみましたが、画像は同様でした。

ディスプレイの差かもしれないので、今使用しているZYBOとちゃんと映ったディスプレイの組でテストしてみます。
  1. 2014年05月06日 05:37 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

OSERDESE2のRST

7シリーズのFPGAに使用されているOSERDESE2のRST端子は、CLKとCLKDIVに対して、1にする場合は非同期だが、0にする場合はCLKDIVに対して同期して0にする必要がある。どちらのエッジも非同期だと出力は不定だ。

Spartan6 のAtyls用のDigilent社のHDMI変換回路をZynq-7020用に改造してHDMIを出力しているが、OSERDES2 をOSERDESE2(シリアライザ)に単に変更しただけだと出力が不定になってしまっていた。その様子を下の図に示す。なお、OSERDESE2の出力は、ピンクの四角で囲った tmds_... の信号だ。
OSERDESE2_1_140504.png

OSERDESE2のRSTには、MMCMのLocked出力を反転した信号を入力している。BUFRのRSTにも、同様に、MMCMのLocked出力を反転した信号を入力している。BUFRの出力はOSERDESE2のCLKDIV入力に接続されている(MMCMのCLKOUT0の出力が5分周されている)。MMCMのCLKOUT0はBUFIOを通して、OSERDESE2のCLK入力に接続されている


Digilent社の ZYBO Base System Design を真似て、CLKとCLKDIVに対して、1にする場合は非同期だが、0にする場合はCLKDIVに対して同期して0にする回路を追加した。

process (PCLK_I, RST_I) begin -- by Digilent ZYBO Base System Design
    if RST_I='1' then
        async_sync_rst <= '1';
    elsif (PCLK_I'event and PCLK_I='1') then
        async_sync_rst <= '0';
    end if;
end process;


async_sync_rst をOSERDES2 のRST端子に入力したところ、 tmds_... の信号はちゃんとした値が出てくるようになった。
OSERDESE2_2_140504.png

OSERDESE2 RST端子については、”7 Series FPGAs SelectIO Resources User Guide UG471 (v1.3) October 31, 2012”の160ページの”Reset Input - RST”を参考にした。

これで、シミュレーションが出来るようになった。
  1. 2014年05月04日 04:48 |
  2. Zynq
  3. | トラックバック:0
  4. | コメント:0

ZYBOのAXI4 Slave キャラクタ・ディスプレイ・コントローラ IP5(MMCM)

ZYBOのAXI4 Slave キャラクタ・ディスプレイ・コントローラ IP4(BUFIO, BUFR)”の続き。

前回は、PLL_BASEだと、BUFIO, BUFRに行く配線が無くてMAPでエラーになってしまった。”7 シリーズ FPGA クロッキング リソースユーザーガイド UG472 (v1.8) 2013 年 8 月 7 日”の45ページに、BUFIO を駆動するクロックとして、”同じクロック領域内の HPC を駆動する場合は、MMCM クロック出力 0 ~ 3”と書いてあったので、PLLの代わりにMMCMを使うことにした。
MMCMは周波数を決定するMとD(周波数は、入力周波数 x M / Dで決まる)に 0.125刻みの小数を使えるので、周波数を調度よく設定できるようになっている。(Dがrealなのは、CLKOUT0だけのようだ)

MMCMへの変更内容を下に示す。cdc_axi_slave.vhd と dvi_disp.vhd を変更した。MMCMの入力周波数は25MHzとした。CLKOUT[0]_DIVIDE_Fは、1 ~ 128 または2.000 ~ 128.000 の範囲 (増分幅 0.125)なので、MMCM_CLKOUT0_DIVIDEに1以上2未満の小数の分周値は設定できない。これは、周波数が高い場合はネックになるので、なるべく低い周波数のクロックをMMCMに入力して、Mの倍数を細かく設定しようということだ。
ZYBO_CDC_AXI_slave_50_140502.png

ZYBO_CDC_AXI_slave_51_140502.png

これで、論理合成後に、PlanAheadで MMCM の位置を固定した。
ZYBO_CDC_AXI_slave_49_140502.png

下に、UCFの一部を示す。

INST "system_i/cdc_axi_slave_0/cdc_axi_slave_0/dvi_disp_inst/MMCM_BASE_PIXEL" LOC = MMCME2_ADV_X0Y1;


インプリメントとビットストリームの生成が成功した。これでOKのようだ。
ZYBO_CDC_AXI_slave_52_140502.png

まだ、シミュレーションを行っていない。クロックの周波数が正しいかどうかは確認していないので、順番が逆になったが、シミュレーションを行う。今回は、インプリメント出来るかどうかのテストとなる。
  1. 2014年05月02日 04:29 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

ZYBOのAXI4 Slave キャラクタ・ディスプレイ・コントローラ IP4(BUFIO, BUFR)

ZYBO Base System Design(ISE14.7版)”では、OSERDESE2 のクロック供給源として、BUFIO, BUFRが使用されていた。

Digilent社のSpartan-6 ボード、Atlysボード用のHDMIをサポートするDigilent社製のVHDLコードを自分で修正して、ZYBOで、キャラクタ・ディスプレイ・コントローラの出力をHDMIとVGAに出力していた。しかし、BUFGのみを使用したHDMI出力では、VGAとSVGA しか出力することが出来なかった。(”ZYBOのAXI4 Slave キャラクタ・ディスプレイ・コントローラ IP3(SVGA以外の解像度)”参照)それを、BUFIO と BUFR に対応させることにした。

ピクセルクロックの5倍の周波数のクロックは BUFIO に入力して、OSERDESE2 に供給する。ピクセルクロックは、BUFRに入力して5分周する。
ZYBO_CDC_AXI_slave_48_140501.png

これで、論理合成、インプリメントを行ったところ、MAPでエラーになった。
ZYBO_CDC_AXI_slave_45_140430.png

エラー内容を下に示す。

PhysDesignRules:2309 - The PLLE2_ADV block is using an output pin that does not use dedicated connectivity. Routing from the pin to a BUFIO buffer type is not supported.

PLLE2_ADVからBUFIO に行く配線はないそうだ。

ZYBO Base System Design を見ると、制約ファイルでMMCM が制約されていた。制約ファイルを引用する。

INST "*/USER_LOGIC_I/USE_BUFR_DIV5.Inst_mmcme2_drp/mmcm_adv_inst" LOC = "MMCME2_ADV_X0Y1";

MMCMを X0Y1 に配置していた。PLLも X0Y1 に制約することにした。

Project Navigator のProcesses ウインドウのUser Constraints を展開して、I/O Pin Planning(PlanAhead) - Post-Syntesis をダブルクリックして、PlanAheadを立ちあげた。

PLL_BASE_PIXELのインスタンスを見つけて、X0Y1 の位置に固定した。
ZYBO_CDC_AXI_slave_46_140430.png

生成された制約を示す。

INST "system_i/cdc_axi_slave_0/cdc_axi_slave_0/dvi_disp_inst/PLL_BASE_PIXEL" LOC = PLLE2_ADV_X0Y1;


これで再度、インプリメントを行ったところ、やはり同様にエラーが出てしまった。
ZYBO_CDC_AXI_slave_47_140501.png

”7 シリーズ FPGA クロッキング リソースユーザーガイド UG472 (v1.8) 2013 年 8 月 7 日”の45ページに、BUFIO を駆動するクロックとして、”同じクロック領域内の HPC を駆動する場合は、MMCM クロック出力 0 ~ 3”と書いてあった。PLLの記述はなかったので、接続できないのかもしれない。

PLLをMMCMに変更することにした。
  1. 2014年05月01日 05:14 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0