FC2カウンター FPGAの部屋 Xilinx 社のマイクロプロセッサまとめ3(Zynq)

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

FPGAの部屋

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

Xilinx 社のマイクロプロセッサまとめ3(Zynq)

Xilinx 社のマイクロプロセッサまとめ2(MicroBlaze)”の続きです。

ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016”の18日目の記事として書きます。

前回は、MicroBlaze について書いてみました。今回はXilinx のZynq チップについて書きたいと思います。
まずは、Zynq の資料としては、なんといっても”Zynq-7000 All Programmable SoC テクニカル リファレンス マニュアル UG585 (v1.10) 2015 年 2 月 23 日”です。1780ページもありますが、目を通しておきましょう。。。

前回まではソフトマクロのプロセッサ、つまり、FPGA のロジックセルで構成されるプロセッサでしたが、今回のZynq はARMのCortex A9 x 2 個がハードマクロとして、搭載されているXilinx 社のFPGA チップというか、ARMプロセッサ + おまけのFPGA チップです。
MicroBlaze が最高動作周波数が 200 MHz 程度(7 シリーズ)なのに比べて、ZYBOボードの -1 グレードのCortex A9 でも 650 MHz で動作します。この本のコラムによると10 倍程度の性能差があるということです。私もそう思います。Linuxも実用的なスピードで使用することができます。Zynq 上のUbuntu 14.04 を使っていますが、これで開発もしています。私はARMプロセッサのパワーとそれに連帯するFPGAが便利で、最近はZynqばかり使っています。ソフトウェアで十分でないところは、Vivado HLS(C、C++ 言語ベースの高位合成ツール)を使って、すぐにハードウェアにオフロードして、ソフトウェアと連帯してシステムを構成することが容易にできます。
なお、私が今書いているZynq は7 シリーズのAll Programmable SoC ですが、更に進化して、Cortex A53が2個または4個、Cortex R5が2個搭載されたMPSoC もあります。MPSoCはやっと一般的に買えるようになってきました。私は、まだ持っていませんが。。。

前置きが長くなりましたが、Zynq のブロック図を図 1 に示します。
Zynq_block_zu_161217.png
  図 1 Zynq ブロック図

図 1 で、PSが Cortex-A9 x 2 があるProcessing System です。Cortex-A9 はFPU のNEON、MMU、I-Cache、D-Cache と一緒にApplication Processing Uinit にあります。512 KB の L2 Cache も搭載されいます。その先には、Memory Controllerがあって、ZYBO だと 512MB のDDR3 SDRAMが載っています。
また、PS の左側にはいろいろなI/O Peripheral があって、モジュールを選択することができます。そして、選択されたモジュールの入出力をMIO にアサインします。I/O Peripheral が何を持っているか?は図を見ると一目瞭然ですが、必要とされるI/Oが一通りそろっています。SDカードのインターフェースもあって、ZYBO にもMicro SDカードのコネクタがついています。Micro SDカードに、Linuxのブートイメージを入れておいてLinuxをブートします。
また、Memory Interface としてはSRAM やQ-SPI のインターフェースなどがあります。

PSとFPGA部分のPL(Programmable Logic) とは、AXIバスで接続されています。主にFPGA上のIP の設定レジスタなどを接続するGeneral-Purpose Ports(GPポート)、FPGAからSDRAMなどをアクセスするためのHigh-Performance (HPポート)、キャッシュにアクセスできるACPポートなどがあります。

奥が深いZynq ですが、Vivado でIP を作って、使う例としては私の書いた”Vivado and zybo linux勉強会資料3”をご覧ください。

さて、Vivado 2016.3 のIP インテグレータでPS をインスタンスしてみましょう。
その前に、Zynqを搭載しているボードがどのようなIOの構成になっているかを知らせるための設定ファイルが必要です。それが、ボードファイルです。それが無ければ、自分ですべて設定する必要があります。
ボードファイルはZynqボードだけでなく、普通のFPGAのボードにも対応しています。例えば、Digiletnt社のボードはボードファイルをダウンロードして使用することができます。詳しくは、”Digilent社のボード・ファイルのインストール”をご覧ください。

ZYBOボードのプロジェクトを作成します。
Zynq のPS を使うためにはIPインテグレータのブロックデザインを作る必要があります。Create Block Design をクリックします。
zynq_test_2_161217.png

Design name に適当な名前(ここでは、zynq_test にしました)を入れて、OKボタンをクリックします。
zynq_test_3_161217.png

Diagram ウインドウができます。そこで、Add IP ボタンをクリックします。
zynq_test_4_161217.png

Search に zynq と入れると、ZYNQ7 Processing System が出てくるので、それをダブルクリックします。
zynq_test_5_161217.png

processing_system7_0 が生成されました。Run Block Automation をクリックします。この時点では、ZYBOボードの設定は反映されていません。
zynq_test_6_161217.png

Run Block Automation ダイアログが表示されます。Apply Board Preset にチェックが入っているとボードファイルの設定情報が反映されるようです。(AR# 58425 2013.3 Vivado IP インテグレーター - Processing System 7 (PS7) IP ブロックでプロジェクトのボード設定に基づいてボード設定が自動入力されない(AR# 58425 2013.3 Vivado IP インテグレーター - Processing System 7 (PS7) IP ブロックでプロジェクトのボード設定に基づいてボード設定が自動入力されない
zynq_test_7_161217.png

DDRとFIXED_IO にポートが出て、ボードファイルの設定が反映されて、processing_system7_0 のポートが増えました。
zynq_test_8_161217.png

processing_system7_0 をダブルクリックするとIOなどの設定が見えるので、見てみましょう。
Zynq Block Design ページです。
ここでは、グラフィカルにPS の設定を確認することができます。使うI/O Peripheral にチェックがついているのが分かります。
zynq_test_9_161217.png

PS-PL Configuration では、UARTのボーレートやFPGA とのデータのやり取りに使用するGPポート、HPポート、ACPポートの設定などあります。
zynq_test_10_161217.png

Peripheral I/O Pins では、MIOピンの設定を行います。どのPeripheral を有効にするかを設定します。有効にしたPeripheral はMIOピンを使用します。同じMIOピンを使用するPeripheral は排他的に使用します。
zynq_test_11_161217.png

MIO Configuration はどのPeripheral がどのMIO ピンを使用するのか?をリストで表した表です。
zynq_test_12_161217.png

Clock Configuration はクロックの設定を行います。PL Fabric Clocks がPL つまりFPGA部に回すことができるクロックです。
zynq_test_13_161217.png

DDR Configuration はその名の通り、DDR SDRAMのパラメータを設定します。
zynq_test_14_161217.png

SMC Timing Caluclation です。これはよくわかりませんがメモリの設定でしょうか?
zynq_test_15_161217.png

最後にInterrupts 割り込みの設定です。
zynq_test_16_161217.png

これでPS の設定画面は終わりです。それでは、FPGA 上のIP の AXI GPIO をPS につないでみましょう。こうすると、PL(FPGA)とPS(Cortex-A9 )の接続方法が良くわかると思います。

右クリックし、右クリックメニューからAdd IP を選択し、Search にgpio と入力すると AXI GPIO が示される。それをダブルクリックする。
zynq_test_17_161217.png

axi_gpio_0 がインスタンスされた。Run Block Automation をクリックすると配線される。
zynq_test_18_161217.png

Run Block Automation ダイアログが表示されます。All Automation にチェックを入れて、OK ボタンをクリックします。
zynq_test_19_161217.png

必要なIP がインスタンスされて、配線も自動でされました。
zynq_test_20_161217.png

processing_system7_0 を見ると、M_AXI_GP0 ポートからAXI Interconnect に配線され、そこから axi_gpio_0 にAXIバスが配線されています。このM_AXI_GP0 ポートが図 1 のところで説明したGeneral-Purpose Ports(GPポート)です。
なお、processing_system7_0 以外の箱は、PL(FPGA)にインスタンスされるIP を表します。つまりFPGA部分をVivado のIP インテグレータで作っています。
  1. 2016年12月18日 04:23 |
  2. FPGAのマイクロプロセッサ
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog19.fc2.com/tb.php/3665-8134430e
この記事にトラックバックする(FC2ブログユーザー)