FPGAの部屋

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

何かブログに記事に関する質問がありましたら、abcd_marsee101@infoseek.jp から adcd_ を除いたメールアドレスに、ご連絡ください。なお、記事に関係のない質問は受け付けないことがあります。 FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。ご利用ください。 http://marsee101.web.fc2.com/index.html

カテゴリ: Zynq

今日は、Zynq勉強会を開催しました。15人程度の参加がありました。

午前中は、1_Zynq-7000の概要.pdf、2_Zynq用ツール概要です。
午後は、Zynqチュートリアルを皆で一緒にライブコーディングしました。が。。。ノートパソコンにISEをインストールして持ってきてもらったのですが、ISE14.4, ISE14.5は途中でエラーが出たりしました。ISE14.7とISE14.6 でチェックしたんですが。。。
後、ライセンスの問題など盛りだくさん。いろいろと問題が多かったですが、皆さん助けあって解決したりして頂いて、大体出来たと思います。良かったです。

XPSを初めて使った人もいたと思いますが、大体感じを掴んでくれたんではないでしょうか?
明日は、本番のカスタムIPの作り方を勉強します。

Zynq勉強会 6番目の資料”6_XPSプロジェクトでカスタムIPを作る方法”を公開しました。

Zynq勉強会についての詳しい情報はこちらをどうぞ

見た感想をお待ちしております。

(2013/12/24:追記)
諸般の事情により slideshare の資料を削除しました。お知り合いの方でご希望の方は、メールかツイッターでDMして頂ければPDFで送ります。

カメラ回路と制御するソフトウェアをSDカードからブートして動作させたいと思ったのでやってみた。

まずは、”Zynq-7000 EPP ソフトウェア開発者向けガイド UG821 (v2.0) 2012 年 4 月 24 日”の”ブートおよびコンフィギュレーション”の”3.1 概要”(20ページ)によると、プロセッサシステムは2段階のプロセスでブートするそうだ。(LinuxだとU-BOOTがあるので3段階)

それは、内部BootROMとFSBL (First Stage Bootloader) だ。
・内部BootROMは、ステージ0ブートコードが入っていて、ARMプロセッサおよびペリフェラルをコンフィギュレーションする。そして、FSBLへ制御を渡す。BootROMには書き込みできない。
・FSBLブートコードは、BootROMコードでフラッシュメモリからオンチップメモリ (OCM) へコピーされてから、実行される。

・FSBLの役割
 ・XPSからのPSコンフィギュレーション・データで初期化(XPSのZynqタブで設定したMIOなどのコンフィギュレーションだと思う)
 ・ビットストリームでPLをプログラム。
 ・第2段階ブートローダーまたは、ベアメタル・アプリケーション・コードをメモリへロードする。
 ・第2段階ブートローダーまたは、ベアメタル・アプリケーション・コードの実行を開始する。

ということで、FSBLを作る必要がある。FSBLはSDKで生成することができる。そのやり方を見ていこう。

・SDKの Fileメニュー -> New -> Project を選択する。
594298a8.png


・New Project ダイアログで、Xilinx -> Application Project を選択して、Next > ボタンをクリックする。
19a21475.png


・Project Name にFSBL(これは任意の名前)と入力し、Target Software で、Board Support Package にUse existing のラジオボタンをクリックして、すでにあったBoard Support Package を指定した。Next > ボタンをクリックする。
b0cbb65f.png


・Templates ダイアログが表示される。Available Templates から Zynq FSBL を選択する。
9f71ca87.png


・Finish ボタンをクリックすると、コンパイルされて、FSBL.elf が生成される。
a0a83f5d.png


次に、BOOT.bin を生成する。

・ベアメタル・アプリケーション(この場合は cam_disp2 のプロジェクト)を選択しておいて、Xilinx Tools メニューから Create Zynq Boot Image を選択する。
609b8238.png


・先ほど作成したFSBL.elf とベアメタル・アプリケーション cam_disp2.elf はすでに入っていた。
・PL部のビットストリーム、system_stub.bit をAddボタンをクリックして追加する。
・cam_disp2.elf をクリックして、DOWNボタンをクリックし、system_stub.bit と順番を入れ替える。
e326cf5d.png


・Create Image ボタンをクリックして、イメージを作成する。
・ZedBoard_CamDisp_wHDMI_144_2\ZedBoard_CamDisp_wHDMI.sdk\SDK\SDK_Export\cam_disp2\bootimage を見ると、ファイルが3つ出来ている。
093fcb5d.png


・cam_disp2.bin を BOOT.bin にリネームする。
・BOOT.bin をSDカードにコピーする。
e1c5070d.png


・SDカードをパソコンから抜いて、ZedBoardのSDカードスロットに挿入する。
・ZedBoardの設定ピンを設定する。
 MIO2 GND
 MIO3 GND
 MIO4 3V3
 MIO5 3V3
 MIO6 GND

 JP2, JP6 ショート
 JTAG SELECT 1V8

・ZedBoardの電源SWをONにすると、DONE LEDが点灯して、カメラ画像が表示された。

これで、SDカードからブードして、PL部のビットストリームをダウンロードし、PS部のソフトウェアを動作させることが出来た。

ZedBoardでビットマップ・ディスプレイ・コントローラを作っているが、このためには、ARMプロセッサ側につながれているDDR3 SDRAMをHigh Performance AXI 32b/64b Slave Portst越しにProgram Logic (PL) 部から使う必要がある。
1381c148.png


このHigh Performance AXI 32b/64b Slave Portstは、実はAXI3バスでした。てっきりハイパフォーマンスと歌われているので、AXI4バスだとばかり思っていたのだが。。。
43101222.png


AXI3バスはAWLEN, ARLENが4ビットで最大16バーストだ。ビットマップ・ディスプレイ・コントローラでは、最大128バーストしているので、ビットマップ・ディスプレイ・コントローラIPの書き直しが必要かと思ったが、AXIインターコネクトでよしなに処理してくれるようで、AXI4マスタ側では気にしなくても大丈夫のようだ。実際に動作していると思う。(弱気なのは動作が少しおかしいからだ)

LogiCORE IP Processing System 7 (v4.00.a)の34ページから49ページに記載されいてる。(S_AXI_HP0, S_AXI_HP1, S_AXI_HP2, S_AXI_HP3)

Zynqのチュートリアルはやってきたが、Zynqのことをあまり勉強していなかったので、勉強しようと思う。

最初は、”Zynq-7000 All Programmable SoC 概要DS190 (v1.2) 2012年8月21日”という日本語のデータシートを読んでみた。英語データシートも参照した。

プロセッシング システム (PS)
・Dual-core ARM® Cortex™-A9 Based Application Processor Unit
・CPU周波数はXC7Z010、XC7Z020は最大800MHzで、XC7Z030、XC7C045は最大1GHz。ZedBoardは-1なので666.7MHzで動作している。
・NEON™ メディア処理エンジン
・Coherent multiprocessor support
・単精度および倍精度のベクター浮動小数点ユニット (VFPU)
・タイマーと割り込み
・1次キャッシュは32KB。CPU毎に4ウェイセットアソシアティブ命令/データキャッシュ
・2次キャッシュはCPU同士共有の256KB
・オンチップ ブートROM
・256KBオンチップRAM(OCM) PSとPLから高速にアクセスできる。PSとPLのデータのやり取りに有効か?
・DDR3/DDR2/LPDDR2をサポートして、16ビット幅、32ビット幅のメモリをサポートするそうだ。
・1GBのアドレス空間 (DDR)
・8ビット幅のSRAMメモリインターフェイス、パラレルNORフラッシュもサポート。
・スキャッター/ギャザー対応の8チャネル・メモリコントローラー
・最大 12 のエンドポイントをサポートする 2 つのUSB2.0 OTGペリフェラル
・CAN 2.0B対応のCANバス インターフェイス2つ
・SPI x 2、UART x 2、I2C x 2、GPIO x 4
・MIO (multiplexed I/O)
・PS-PLインターフェイスは、32ビットAXIマスタ x 2、32ビットAXIスレーブ x 2、DDRやOCM(RAM) へアクセスできる高性能AXIスレーブ x 4、CPUメモリへのコヒーレントがアクセスが可能なAXIスレーブ x 1 (ACPポート)
CPUメモリへのコヒーレントなアクセスが可能ということは、CPUがキャッシュしている領域へDMAしてもキャッシュをインバリデートする必要が無いということだと思う。もしくは、CPUがライトバックキャッシュにキャッシュしているデータをDMAする時にも、CPUにキャッシュから実メモリに吐き出すコードを実行する必要がないという事だろう。この様な用途では性能が向上することが期待できる。

プログラマブル ロジック (PL)
・XC7Z010、XC7Z020には入っていないが、PCI Express ブロックが入っている。
・A/Dコンバータ x 2
ZedBoardのXC7Z020は6入力LUTで、53,200個のLUT、106,400個のFF、BRAM(32Kb)は140個で560KB、DPSは220個。
AtlysボードのXC6SLX45は、27,288個のLUT、54,576個のFF、BRAM(18Kb)は116個で261KB。
ということで、AtlysボードのFPGAの約2倍の規模ということが出来る。

しかし、PSは凄いですね。使いこなすのが難しそう。ちょこちょこっとチュートリアルはできても、その先は、やるのが難しい?ブログ書いている場合じゃなく本気で開発する必要があるか?でも製作記ブログを書けるかな?今のところその気はないが、カメラは付けてみたい。

↑このページのトップヘ