ハードもソフトもZynqで開発(1)2018/07/18
Zynqのシングルコアを使ってみよう
ザイリンクスZynq®シリーズにシングルコアチップの「Zynq-7000S」があるのをご存知ですか?
最大クロック766MHzのArmコアと基本的なI/O、それに加えてFPGAを内蔵していますので、ワンチップでハードとソフトが構成できます。
デュアルコアのZynq-7000は数年前からありましたが、シングルコアのデバイスは今までありませんでした。このデバイス、「デュアルコアほどのパワーはいらないんだけど・・・」という組込み用途にしっくりきそうです。
しかも、ザイリンクスのハードウェアデザインツールや統合開発環境が無償で使えるようになっていて、ちょっと試してみたい人にも豪華な環境が用意されています。
これはちょっと見過ごせない感じです。ということで、これから数回に渡ってZynq-7000Sについて見ていきたいと思います。
Zynqシングルコアについて
Zynq-7000はザイリンクス社のArm Cortex-A9コアとFPGAがワンパッケージになったデバイスです。プロセッサとFPGAが一つのデバイスで実装できるなら、ハード素人の私から見てもよさそうな気がします。
当初よりZynq-7000はデュアルコアでしたが、軽めの機器(?)に組込むにはちょっとオーバースペックな感じがしてました。やれ64ビットだ、UltraScale+だ、と昨今はハイエンドな方向に目が行きがちですが、ちょうどいい隙間をシングルコア「Zynq-7000S」が埋めてくれたと思います。
MiniZedボードについて
このコーナーではアヴネット社の「MiniZed」という評価ボードを使用します。このボードはZynq-7000Sを搭載しており、USB、Wi-Fi、Bluetoothなどの周辺が使用可能です。電源はUSBから給電できるようになっていますので、ACアダプタは不要です。また、価格が12,000円というのも魅力の一つです。
以下はMiniZedボードのURLです。
https://www.avnet.co.jp/kits/avnet/AES-MINIZED-7Z007-ASIA.aspx
このボードを使って何をするかと聞かれれば、まずはLチカ(LEDチカチカ)ですよね。実際のところ、GPIOでLEDが制御できれば、組込みシステムの基本を掌握したと言っても過言ではありません。
PSとPL
Zynqの構成は、ArmコアにUARTやGPIOなど各種I/Oなどを追加した「PS」という部分と、ユーザがハードウェアロジックをプログラム可能な「PL」という部分に分かれています。MiniZedのドキュメントを見るとPSだけでLEDが制御できそうですので、まずはそこから始めたいと思います。
PLのハードウェアロジックはVHDLとかVerilog HDLのような言語で記述ができるようになっています。言語で書けるのならソフト屋の自分でも何とかなるのでは、と妄想を抱いてしまいます。最終目標として、この言語を使って、ソフト開発者の憧れ「ハードのみでLチカ」を実現したいと思います。
準備するもの
MiniZedでLチカを実現するために必要なものを列挙します。
- MiniZedボード
- MiniZedのドキュメント類
- Vivado® Design Suite
- パソコン
MiniZedのドキュメント類はアヴネットのホームページからダウンロードします。後で説明しますが、MiniZedの回路図とハードウェアユーザガイドをダウンロードします。
Vivado Design SuiteはFPGAのデザインツールです(以降Vivadoとします)。VivadoはザイリンクスのホームページからWebPack版というのがダウンロードできます。WebPack版は無償で使用することができますが、扱えるデバイスが限定されています。Zynq-7000S(型番XC7Z007S)は対象デバイスに含まれていますので、無償で使用することができます。使ってみると分かるのですが、Vivadoはとても高機能なツールです。これが無償で使えるとは、なんとすばらしい。
Vivadoをインストールすると同時にXilinx SDKもインストールされます(以降SDKとします)。SDKはEclipseをベースにしたソフト開発用の統合開発環境です。Vivadoがハード屋さんのツールなら、SDKはソフト屋さんのツールといえます。
VivadoやSDKはそれなりに重いツールですので、パソコンのスペックは少し高めの方がいいかもしれません。ちなみに今回使用したパソコンはCPUがCore i7の3.4GHz、メモリは16GB搭載しています。
MiniZedのドキュメントをダウンロード
まず、アヴネット社のホームページより必要なドキュメントをダウンロードします。
http://zedboard.org/support/documentation/18891
ここではMiniZedの回路図「Board Schematics」と、ハードウェアユーザガイド「Hardware User Guide」をダウンロードしておきます。また、Vivadoを使うためにMiniZedボードの定義ファイルが必要になりますので、「Board Definition Files」もダウンロードしてください。
少しLEDについて調べるために、ハードウェアユーザガイドを見てみますと、ボード上には「PS LED」「PL LED」の2種類のLEDが実装されています。「3.11.2 SoC LED's」によりますと、一つのLEDがPSに、もう一方がPLに接続されていると書かれていますので、コントロールできそうな感じです。
Vivadoのインストール
では、いよいよVivadoをインストールしてみましょう。「vivado ダウンロード」のキーワードで検索すれば、ザイリンクスのダウンロードページへ飛べますので、そのページより「Vivado HLx 2018.2: WebPACK および Editions - Windows 用自己解凍型ウェブ インストーラー」をクリックします(2018年6月時点での最新版です)。
ここで、サインインを要求されますので、アカウントがなければ必要な情報を入力して、アカウントを作成します。サインインすると、「Name and Address Verification」のページが表示されます。ページの下の方にある「Next」ボタンを押すと、ダウンロードが開始されます。
ダウンロードしたEXEファイルを実行すると、インストールが開始されます。ここで表示されるインストール画面によると、Windows 8.1がなぜかサポート対象外になっているので注意してください。また、インストール時はウィルスチェックを禁止することをお勧めするとのことです。

ユーザIDとパスワードを入力してから、デフォルトのインストールを行います。

ライセンスに関する条文を読んで、全て「I Agree」とします。

「Vivado HL WebPACK」を選択します。

UltraScaleとかいらなさそうですが、デフォルトのままで進みます。

フォルダの指定もデフォルトの「C:¥Xilinx」としておきます。

確認画面のあとインストールに入ります。インターネット回線の速度や、PCのスペックなど環境差もあるかと思いますが、インストールの完了まで1時間20分かかりました。
Vivadoの起動とプロジェクトの作成
それでは早速、Vivadoを起動してみましょう。と、その前にMiniZedの定義ファイルをVivadoのフォルダにコピーしておく必要があります。これをやっておかないとVivadoがMiniZedボードを認識してくれません。
MiniZedの定義ファイルとは、アヴネットのページからダウンロードした「Board Definition Files」のことです。このファイルの中身は、PDFとzipファイルです。zipファイルを解凍すると以下のように展開されますので、
minized └─ 1.2 └─ board.xml minized.jpg part0_pins.xml preset.xml
これらのファイルをminizedのフォルダごと以下のフォルダにコピーします(C:¥Xilinxはデフォルトのインストールフォルダです)。
C:¥Xilinx¥Vivado¥2018.1¥data¥boards¥board_files
ではVivadoをWindowsのスタートメニューから起動してみましょう。起動は若干遅めですが、しばらくすると以下の画面が表示されますので、「Create Project」をクリックして、プロジェクトを作成します。

以下の画面で、プロジェクト名とプロジェクトの場所を入力します。ここではそれぞれ「Test」と「C:¥Xilinx¥project」としておきます。

Project Typeの画面では以下のチェックを入れておきます。

Default Partの画面で、以下のように「Boards」をクリックします。

すると、ボードの設定画面に切り替わります。ボードが写真付きで表示されますので、MiniZedボードを選択します。先ほどのボード定義ファイルは、この設定に必要なのでした。

これでフィニッシュです。

プロジェクトの作成が完了すると、Vivadoの初期画面が開きます。

中途半端ですが第1回目はとりあえずここまでとします。今回はインストールとプロジェクトの作成を行いましたが、ほとんど手順説明になってしまいました。次回はVivadoの基本的な使用方法に沿って、Zynqの回路を作っていきたいと思います。