1つの記事でPYNQを知る

次のコンテンツはPYNQから抜粋したものです:「PioneerZYNQPYNQ開発ガイド」

PYNQはPython + ZYNQと考えることができますが、単純な追加ではありません。使用面では、PYNQ開発はZYNQ開発のコレクションであると言えます。また、PYNQはZYNQのフルスタック開発であるとも言えます。関連するコンテンツには、FPGAデザイン、PSおよびPLの協調的相互作用だけでなく、 HLS、Linuxドライバー開発だけでなく、Python開発にも精通しており、さまざまなPythonライブラリを使用します

PYNQは、ザイリンクスが立ち上げたオープンソースプロジェクトです。目的は、Pythonを使用してザイリンクスプラットフォームをより簡単に開発することです。設計者は、Python言語とライブラリを使用して、ZYNQのプログラマブルロジックPLやマイクロプロセッサPSなどのザイリンクスSOCデバイスを利用して、より強力な電子システムを構築できます。PYNQをZynq、Zynq UltraScale +、Zynq RFSoC、Alveoアクセラレータカード、AWS-F1とともに使用して、並列ハードウェア実行、高フレームレートビデオ処理、ハードウェアアクセラレーションアルゴリズム、リアルタイム信号処理などの高性能アプリケーションを作成できます

1.PYNQとは

多くの人が、PYNQはPynqZ1開発ボードなどの開発ボードであると考えています。実際、PYNQはZynqのPython Productivityの略語、つまりZynqのPython生産性です。PYNQ= Python + ZYNQは、ザイリンクスが立ち上げたオープンソースフレームワークと見なすことができます。設計者はzynqを使用できます。プログラム可能なロジックとマイクロプロセッサの利点により、高性能の組み込みアプリケーションを迅速に構築できます。

PYNQの主な目標は、組み込みシステムの設計者がアプリケーションでザイリンクスデバイスの独自の利点を簡単に利用できるようにすることです。具体的には、PYNQを使用すると、組み込みシステムを設計するアーキテクト、エンジニア、およびプログラマーは、ASICスタイルの設計ツールを使用してプログラマブルロジック回路を設計する代わりに、Zynqデバイスを使用できます。PYNQは、次の3つの方法でこの目標を達成します。

  1. プログラマブルロジック回路は、オーバーレイと呼ばれるハードウェアライブラリとして提供されます。これらのオーバーレイは、ソフトウェアライブラリに似ています。ソフトウェアエンジニアは、アプリケーションに最適なオーバーレイを選択でき、アプリケーションプログラミングインターフェイス(API)を介してオーバーレイにアクセスできます。新しいオーバーレイを作成するには、プログラマブルロジック回路の設計に関する専門知識を持つエンジニアが必要です。ただし、主な違いは、一度構築され、何度も使用されることです。オーバーレイは、ソフトウェアライブラリと同様に、構成可能であり、さまざまなアプリケーションで可能な限り頻繁に再利用できるように設計されています。
    注:これは、ソフトウェアコミュニティのベストプラクティスから借用した方法です。毎日、何千人もの組み込み設計者がLinuxカーネルを使用しています。カーネルは、1,000人未満の高度なスキルを持つソフトウェアアーキテクトおよびエンジニアによって開発および保守されています。これらの比較的少数の才能のあるエンジニアの作業は頻繁に再利用され、より多くのソフトウェアエンジニアがより高いレベルの抽象化を実行できるようになります。ハードウェアライブラリまたはオーバーレイは、基盤となるハードウェア関連ソフトウェアの多くの詳細を正常に抽出するLinuxカーネルモデルの成功に触発されています。

  2. PYNQは、Pythonを使用して組み込みプロセッサとオーバーレイをプログラムします。Pythonは「生産性レベル」の言語です。これまでのところ、CまたはC ++が最も一般的な組み込みプログラミング言語です。それどころか、Pythonはプログラミングの抽象化とプログラマーの生産性のレベルを向上させます。ただし、これらは相互に排他的なオプションではありません。PYNQは、Cで記述されたCPythonを使用し、数千のCライブラリを統合し、Cで記述された最適化されたコードで拡張できます。可能であれば、より生産性の高いPython環境を使用する必要があり、効率が必要な場合は低レベルのCコードを使用できます。

  3. PYNQは、あらゆるコンピューティングプラットフォームとオペレーティングシステムで動作するように設計されたオープンソースプロジェクトです。この目標は、ブラウザとは関係のないWebベースのアーキテクチャを採用することで達成できます。PYNQには、オープンソースのJupyterノートブックインフラストラクチャが組み込まれており、ZynqデバイスのARMプロセッサでInteractive Python(IPython)カーネルとWebサーバーを直接実行します。Webサーバーは、ダッシュボード、bashターミナル、コードエディター、およびJupyterノートブックを提供する一連のブラウザーベースのツールを介してカーネルにアクセスします。ブラウザツールは、JavaScript、HTML、およびCSSの組み合わせによって実装され、最新のブラウザで実行できます。

全体として、PYNQは、APSoC設計を簡素化および改善するために、次の要素を組み合わせた最初のプロジェクトです。

  • 高レベルの生産性言語(Python)
  • 包括的なAPIを備えたFPGAオーバーレイはPythonライブラリとして公開されています
  • 組み込みプロセッサによって提供されるWebベースのアーキテクチャ、および組み込みコンテキストでデプロイされたJupyterNotebookフレームワーク

PYNQはPython言語を介してFPGAを直接プログラムしないことに注意してください。著者は、PYNQについて初めて聞いたときに、PYNQがFPGAを直接プログラムしてハードウェアアクセラレーションを実現できると多くの人が感じると考えています。実際、PYNQフレームワークでは、Pythonを介してFPGAをプログラミングして、従来のRTLプログラミング方法を置き換えることはできません。PYNQフレームワークは、ソフトウェア開発者がFPGAリソースにアクセスするためのPythonインターフェイスを提供します。Python開発者はこれらの実装の詳細を無視できます。Pythonを介してFPGAに簡単にアクセスし、関数を呼び出すのと同じように、コンパイル済みのさまざまなFPGAアプリケーションを動的にロードできます。さまざまなアプリケーションを呼び出すにはFPGAによって加速されるか、FPFAに接続された周辺機器にアクセスします。ソフトウェアエンジニアがFPGA並列コンピューティングと柔軟な構成の多くの利点を簡単に享受できるようにします。さまざまなFPGAアプリケーションに関しては、プロのハードウェアエンジニアが開発にVivadoツールを使用する必要があります。

2.PYNQアーキテクチャ

オープンソースフレームワークとして、PYNQは、基盤となるハードウェアFPGAの実装の詳細を、高レベルのパッケージングを通じて上位アプリケーション層の使用から切り離すように設計されています。ソフトウェア開発者向けに、PYNQフレームワークはFPGAリソースにアクセスするための完全なライブラリを提供しています。 、上位レベルのアプリケーション開発者がPythonプログラミングを介してFPGAモジュールを呼び出すことができ、FPGAパラレルコンピューティング、インターフェイスの簡単な拡張、および柔軟な構成の多くの利点を享受するために、Verilog / VHDLハードウェアプログラミングを理解する必要はありません。

PYNQアーキテクチャを図1.2.1に示します。この図から、PYNQシステムアーキテクチャは、FPGA設計に基づくハードウェア層、LinuxカーネルとPythonに基づくソフトウェア層、およびJupyterの3つの層に分割されていることがわかります。ノートブックはメインのアプリケーション層です。

ここに画像の説明を挿入します
ハードウェア層の設計は、PSとPL間の協調的な相互作用を実現するための組み込み設計方法と同じです。FPGAパーツ全体のデザインはオーバーレイと呼ばれ、複数のユーザーおよび複数のアプリケーション用に異なるビットストリームファイルを生成でき、ソフトウェアAPIを介して呼び出して、FPGAのロジック機能を動的に切り替えることができます。

ソフトウェアレイヤーはZYNQのPSで実行され、主にUbuntuオペレーティングシステムとUbuntuオペレーティングシステム上に構築されたPythonで構成されています。PYNQのAPIライブラリは、ソフトウェアとハ​​ードウェアを接続する役割を果たし、Pythonを介してFPGA側のプロセッシングユニットにアクセスできるようにします。

アプリケーション層は、主にJupyterNotebookとPython上で実行されるIPythonで構成されています。Jupyter Notebookは、PythonカーネルとWebsocketプロトコルに基づくブラウザベースのインタラクティブコンピューティング環境です。Jupyter Notebookが提供する環境では、コードを記録し、コードを実行して結果を表示し、データ分析を視覚化し、出力結果を表示できます。これらの機能により、エンドツーエンドのデータサイエンスワークフローを実行するための便利なツールになります。これは、データクリーニング、統計モデリング、機械学習モデルの構築とトレーニング、データの視覚化、およびその他の多くの目的に使用できます。Jupyterによって作成されたインタラクティブなノートブックドキュメントは、リアルタイムコード、インタラクティブウィジェット、描画、マークダウン、方程式、画像、およびビデオをサポートします。近年、このツールはビッグデータ分析と機械学習の分野で最も人気のあるツールの1つになりました。過去3年間にgithubにアップロードされたノートブックドキュメントの数は230万を超えました!

JupyterNotebookはWebブラウザで実行されます。PythonでPYNQプログラミングを開始し、最終的にホストコンピューターのブラウザーを介してJupyter Notebookへのアクセスを実現するには、互換性のあるWebブラウザーのみが必要です。その後、PYNQのソフトウェア部分を開発できます。

PYNQアプリケーションには、ハードウェア設計と、PLビットストリームやPythonパッケージなどのソフトウェアドライバーの両方が含まれていることがわかります。ユーザーは、スムーズに実行するために、これら2つの部分を同時にデプロイする必要があります。

図1.2.2のPYNQフレームワークの構造は、PYNQの全体的なフレームワークと使用法を簡潔に表しています。図1.2.2左側は、ホストコンピューターとホストコンピューター上で実行されているブラウザーです。ブラウザーで実行されているJupyter Notebookは、右側のZYNQまたはZU +で実行されているJupyterWebサーバーと対話します。

図1.2.2から、PYNQがUbuntuリリースのLinuxシステムに基づいて構築されていることもわかります。

ここに画像の説明を挿入します
ここに画像の説明を挿入します
図1.2.4からわかるように、UbuntuベースのLinuxシステムを使用するPYNQの最大の利点は、Ubuntuのルートファイルシステムを使用できるため、Ubuntuのパッケージ管理ツール-aptを使用できることです。言い換えれば、PYNQはUbuntuのすべてのソフトウェアライブラリを使用できます。Ubuntuの人気、および強力なコミュニティと公式サポートを考慮して、UbuntuにはほぼすべてのLinuxソフトウェアとライブラリが含まれているため、開発者はさまざまなソフトウェアとライブラリを移植する手間を省くことができます。展開効率は犠牲になりますが、開発速度が大幅に向上し、開発者の生産性が向上します。

全体として、PYNQの最も重要な機能は、Pythonでプログラムできることと、Webアクセスに基づいたJupyterNotebookのオンライン編集ツールを提供することです。Armプロセッサで実行されているUbuntuベースのLinuxシステムは、Python環境やJupyterNotebookツールなどの基本的なソフトウェアプラットフォームをPYNQに提供します。

PYNQ対応の開発ボードは、Pythonを使用してJupyter Notebookで簡単にプログラミングできるだけでなく、Pythonも使用できます。開発者は、ハードウェアライブラリまたはPL上のオーバーレイを使用できます。ハードウェアライブラリまたはオーバーレイは、ZynqまたはZU +開発ボードで実行されているソフトウェアを高速化し、ハードウェアプラットフォームとインターフェイスをカスタマイズできます。

3. PYNQは誰に適用されますか?

このトピックについて説明する前に、次の図(ザイリンクスの画像)を見てみましょう。

ここに画像の説明を挿入します
Virginiaの設計に携わっているハードウェアエンジニアを比較すると、ARMとC / C ++に携わっている組み込みソフトウェアエンジニアとPythonに携わっているドメインの専門家が比較的多く、ドメインの専門家が最も多いことがわかります。これを考慮して、PYNQは、次のような幅広い設計者および開発者が使用できるように設計されています。

➢ASICスタイルの設計ツールを使用せずにザイリンクスプラットフォームの機能を使用してハードウェアを設計したいソフトウェア開発者。

➢Zynq、Alveo、AWS-F1の設計を迅速にプロトタイプ化して開発するために、シンプルなソフトウェアインターフェイスとフレームワークを必要とするシステム設計者。

➢自分のデザインをできるだけ多くの人に使用してもらいたいハードウェア設計者。

第四に、オーバーレイとは何ですか

オーバーレイはハードウェアライブラリとも呼ばれます。これはZYNQのPL(FPGA)設計であり、ユーザーアプリケーションをZynqの処理システムPSからプログラマブルロジックPLに拡張できます。オーバーレイは、ソフトウェアアプリケーションを高速化するために使用でき、特定のアプリケーション用にハードウェアプラットフォームをカスタマイズすることもできます。

たとえば、画像処理は、FPGAがアクセラレーションを提供できる典型的なアプリケーションです。ソフトウェアプログラマは、ソフトウェアライブラリと同様の方法でオーバーレイを使用して、FPGAアーキテクチャで特定の画像処理機能(エッジ検出、しきい値処理など)を実行できます。オーバーレイは、ソフトウェアライブラリと同様に、必要に応じてFPGAに動的にロードできます。画像処理の場合、個別の画像処理関数をさまざまなオーバーレイに実装し、Pythonからオンデマンドで読み込むことができます。

PYNQは、PSで実行されているPythonによってPLのオーバーレイを制御できるようにするPythonインターフェイスを提供します。FPGAデザインはハードウェアエンジニアリングの知識と専門知識を必要とする特殊なタスクであるため、PYNQオーバーレイはハードウェアデザイナーによって作成され、PYNQ PythonAPIを使用してパッケージ化されます。次に、ソフトウェア開発者はPythonインターフェースを使用して、オーバーレイを自分で設計しなくても、オーバーレイをプログラムおよび制御できます。これは、専門の開発者によって作成され、アプリケーションレベルで他の多くのソフトウェア開発者によって使用されるソフトウェアライブラリに似ています。

デフォルトでは、baseと呼ばれるオーバーレイ(ビットストリーム)が起動時にPLにダウンロードされます。ベースオーバーレイは、開発ボードのリファレンスデザインと見なすことができます。新しいオーバーレイは、開発ボードにアップロードまたはコピーでき、システムの実行中にPLにロードできます。

オーバーレイには通常、次の3つの部分が含まれます。

➢FPGAアーキテクチャの構成に使用されるビットストリームファイル

➢Vivadoデザインで使用可能なIPのhwhファイルを決定します(初期に使用されていたTclファイル)

➢IPを属性として公開するPythonAPI(PYNQライブラリに帰属)

PYNQ Overlayクラスを使用して、オーバーレイをロードできます。ビットストリームファイルの名前を指定して、オーバーレイをインスタンス化します。オーバーレイをインスタンス化すると、デフォルトでビットストリームファイルがダウンロードされ(ここでは、base.bitを例として取り上げます)、hwhファイル(以前はTclファイルでした)が解析されます。オーバーレイをロードするコードは次のとおりです。

from pynq import Overlay
overlay_design = Overlay("base.bit")

オーバーレイをインスタンス化した後、help()メソッドを使用して、help(overlay_design)などのoverlay_designの内容を理解できます。出力ヘルプ情報を使用して、オーバーレイを操作できます。

5.PYNQ学習リソースの要約

PYNQ公式ウェブサイト:http://www.pynq.io/

PYNQの公式ドキュメント:https://pynq.readthedocs.io/en/latest/

PYNQソースコード:https//github.com/xilinx/pynq

PYNQ官方ワークショップ:https://github.com/葉可能性/ PYNQ_Workshop

おすすめ

転載: blog.csdn.net/qq_39507748/article/details/114433347