FC2カウンター FPGAの部屋 FPGAのマイクロプロセッサ

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

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

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

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

MicroBlaze
次のXilinx社のマイクロプロセッサはMicroBlaze です。最近はZynq のARM プロセッサばかりでMicroBlaze はあまり使っていませんでした。ですが、MicroBlaze はXilinx社の32ビットのソフトコアのマイクロプロセッサの代表格です。(MicroBlaze プロセッサ リファレン ガイド 2016.1 UG984 (v2016.1) 2016 年 4 月 6 日参照)
いろいろなコンフィギュレーションがあって、性能重視には5段パイプライン、エリア重視には3段パイプラインと使え分けられます。
MicroBlaze の基本機能です。(MicroBlaze プロセッサ リファレン ガイド 2016.1 UG984 (v2016.1) 2016 年 4 月 6 日から引用)

・32 個の 32 ビッ ト 汎用レジス タ
・オペランド 3 つと アドレス指定モード 2 つを含む 32 ビッ ト 命令ワード
・デフォルトでは、32ビットのアドレスバス
・シングル・パイプライン


ブロック図を引用します。(MicroBlaze プロセッサ リファレン ガイド 2016.1 UG984 (v2016.1) 2016 年 4 月 6 日6 ページの図 2‐1 : MicroBlaze コアのブロック図を引用)
Xilinx_Micon_9_161210.png

それでは実際にMicroBlazeを使ったプロジェクトを作ってみましょう。
Vivado 2016.3 を使用して、ZedBoardのボードの定義ファイルを使ってやってみました。
IP Integrator のブロックデザインを作成しました。
ブロックデザイン上でAdd IP をして、 microで検索して、MicroBlaze を選択しました。
Xilinx_Micon_10_161210.png

MicroBlaze のIP がインスタンスされました。
Xilinx_Micon_11_161210.png

MicroBlaze をダブルクリックして設定を見てみよう。
Select implementation optimization は、PERFORMANCE とAREA, FREQUENCY に設定することができる。
Xilinx_Micon_12_161210.png

Xilinx_Micon_14_161210.png

Select Configuration は下の図に示す設定があります。
Xilinx_Micon_13_161210.png

Next > ボタンをクリックするとGeneral 設定画面が表示されます。
ここでは、バレルシフタを使うか?や浮動小数点演算器を使うか?整数掛け算器、整数割り算器、などなどの設定を行うことができます。
Xilinx_Micon_15_161210.png

次がDebug 設定画面です。
デバック・モジュールの設定ができるようです。
Xilinx_Micon_17_161210.png

次がBus の設定画面です。
AXI バスの設定などがあります。ストリームのインターフェースも指定できるようです。
Xilinx_Micon_18_161210.png

これで設定画面を終了させます。
Run Block Automation のリンクをクリックすると、Run Block Automation ダイアログが表示されます。
ここではメモリを 32KB にしてOK ボタンをクリックしました。
Xilinx_Micon_19_161210.png

MicroBlaze の周辺回路がインスタンスされて、配線されました。
Xilinx_Micon_20_161210.png

axi_gpio を Add IP してみましょう。
Xilinx_Micon_21_161210.png

Run Connection Automation をクリックして配線を行いました。
Xilinx_Micon_22_161210.png

アドレスマップです。
Xilinx_Micon_23_161210.png

これでブロックデザインは終了なので、セーブします。
次に、Source ウインドウのブロックデザインを右クリックして、Create HDL Wapper... を選択して、トップのVerilog HDLファイルを生成します。
Xilinx_Micon_24_161210.png

論理合成、インプリメントを行ってから、ハードウェアをエクスポートし、SDKを立ち上げました。
SDK のFile メニューからNew を選択し、Application Project を選択します。
Application Project ダイアログで、Project name をtest にし、Next > ボタンをクリックします。
次のTemplates ダイアログで、Peripheral Tests を選んで、周辺デバイス・テストのサンプルデザインを選択し、Finish ボタンをクリックします。そうすると、test プロジェクトがビルドされます。
Xilinx_Micon_25_161210.png

これを起動すると、MicroBlaze を使うことができると思います。
  1. 2016年12月11日 03:48 |
  2. FPGAのマイクロプロセッサ
  3. | トラックバック:0
  4. | コメント:0

Xilinx 社のマイクロプロセッサまとめ1(PicoBlaze, MicroBlaze MCS)

ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016”の記事として書きます。
始めはVivado HLS について書こうと思ったのですが、マイクロプロセッサの話題が主というか?ほとんどマイクロプロセッサの話題のようなので、急遽ブログ記事を変更しました。

PicoBlaze
最初に一番小さいマイクロプロセッサから行きましょう。まだあるんだ。。。ということで、「PicoBlaze 8-ビット マイクロコントローラー」です。

デバイス ファミリ サポート: Zynq-7000 Virtex-7 Kintex-7 Artix-7 Spartan-6 Virtex-6 Virtex-5 Virtex-4 Virtex-II Pro Virtex-II Spartan-3AN Spartan-3A Spartan-3

Zynqもサポートされているんですね。。。知らなかった。とってもコンパクトな 8 ビット マイクロプロセッサです。
ブロック図です(UG129 - PicoBlaze 8-bit Embedded Microcontroller User Guide for Spartan-3, Spartan-6, Virtex-5, Virtex-6 and 7 Series FPGAs ( v2.1, 2835 KB ) [PDF] の8 ページの「Figure 1-1: PicoBlaze Embedded Microcontroller Block Diagram」を転載させていただきました)
Xilinx_Micon_1_161203.png

PicoBlaze フォーラムもありますよ。

PicoBlaze資料のページ

PicoBlaze のダウンロードページ

FPGAの部屋のブログのPicoBlazeの記事
スパルタン3EスターターキットのLCD表示回路まとめ」でLCDを表示するためにPicoBlazeを使用しました。
「スパルタン3Eスタータキットのロータリーエンコーダ2
Spratan3E Starter KitのDDR SDRAMコントローラ(プロジェクト)」 DDR SDRAMコントローラのシミュレーションのためにPicoBlaze を使ったんだったかな?

MicroBlaze MCS
MicroBlaze MCS もまだあったとは知らなかった。。。

資料
MicroBlaze Micro Controller System v3.0 LogiCORE IP Product Guide Vivado Design Suite PG116 October 5, 2016


MicroBlaze MCS はパイプライン3段固定のMicroBlaze で 32 ビットのRISC プロセッサです。
MicroBlaze Micro Controller System (MicroBlaze MCS) のブロック図をMicroBlaze Micro Controller System v3.0 LogiCORE IP Product Guide Vivado Design Suite PG116 October 5, 2016
の 5 ページ Figure 1-1: MicroBlaze Micro Controller System から引用します。
Xilinx_Micon_8_161203.png

次に示す IO モジュールがあります。

I/O Bus
Interrupt Controller using fast interrupt mode
UART
Fixed Interval Timers
Programmable Interval Timers
General Purpose Inputs
General Purpose Outputs


MicroBlaze と MicroBlaze MCS の違いは、MicroBlaze がフルスペックなのに対して、MicroBlaze MCS は固定された機能を使えるという違いがあります。(MicroBlaze マイクロ コントローラー システム (MCS)の表を参照ください)
以前はフルスペックのMicroBlaze が有償だったので使っていましたが、MicroBlaze が無償となった今となっては使いどころはあまりないと思われます。
ですが、7 シリーズも対応しているし、Vivado でも使えるようです。

Vivado のIP Integrator でも使えるので、Add IP してやってみましょう。

Vivado 2016.3 を起動して、IP Integrator のブロックデザインを開きます。

Add IP ボタンをクリックしてAdd IP します。Micro で検索するとMicroBlaze MCSが出てきます。これをダブルクリックして、ブロックデザインに入れてみましょう。
Xilinx_Micon_2_161203.png

すると、MicroBlaze MCS がインスタンスされました。まだ、Clk と Reset のみの状態です。
Xilinx_Micon_3_161203.png

MicroBlaze MCS をダブルクリックして設定してみましょう。
Xilinx_Micon_4_161203.png

MCS タブです。
Xilinx_Micon_5_161203.png

UART タブでUART をイネーブルしてみます。
Xilinx_Micon_6_161203.png

OK ボタンをクリックすると、MicroBlaze MCS にUART のポートが追加されているのが分かります。
Xilinx_Micon_7_161203.png

MicroBlaze MCSのソフトウェアを作るには、Eclipse ベースのSDK を使用します。

FPGAの部屋の「MicroBlaze MCS」のページです。
  1. 2016年12月04日 05:39 |
  2. FPGAのマイクロプロセッサ
  3. | トラックバック:0
  4. | コメント:0