概要VerilogやVHDLなどのハードウェア言語を用いて作成したRTLモジュールの入出力に、IPパッケージャーを使用してAXI4-Liteインタフェースを追加する方法を解説。IDEで作成する方法を具体的に解説しました。IDEのプラットフォームプロジェクトと、プラットフォーム上で動作するアプリケーションを作成しています。AXI4はXilinx社のIPを使う上での共通言語の役割を果たしています。自作でRTLモジュールを作成した場合に、既存のIPと接続するためには、自作RTLモジュールにAXIプロトコルの入出力インターフェースを追加しなくてはいけません。実際にゼロからIPにAXIプロトコルの入出力インターフェースを追加するのは大変です。そこで、前回の記事から、Xilinx社が提供するVivadoのIPパッケージャーという機能を用いて、自作のカスタムIPにAXIプロトコルの入出力インターフェースを追加する方法について解説しています。本記事では、VerilogやVHDLなどのハードウェア言語を用いて作成したRTLモジュールの入出力に、IPパッケージャーを使用してAXI4-Liteインタフェースを楽に追加する方法を解説しています。カスタムIPの作成方法を紹介します。カスタムIPの内部構成について解説ハードウェア言語で作成したRTLモジュールにIPパッケージャーを使用してAXI4-Liteインタフェースを追加する方法を解説しています。カスタムIPのどこを変更すればよいか、図解しながらIPの内部構成とカスタマイズ方法を解説しています。phys-higashi.com2021.06.17今回は、作成したカスタムIPからプラットフォームプロジェクトを作成し、Vitisからアプリケーションを作る方法を解説します。自作RTLモジュールの接続先IPにAXI4インタフェースしか用意されていないような場合カスタムIPに制御レジスタやステータスレジスタを設け、プロセッサからそれらを参照したい場合AXI4プロトコルの動作について学ぶには以下の書籍がおすすめです。入門者向けにAXI4プロトコルの動作は、「FPGAプログラミング大全」に非常にわかりやすく解説されています。本記事全体の目標は次の通りです:自作のRTLモジュールにAXI4-Liteインタフェース(S側)を追加するカスタムIPに実装するRTL回路は比較的簡単なLED点滅回路とします。プロセッサが書き込んだ制御レジスタの値によって、LEDの点滅位置を変更します。前回、パッケージングしたカスタムIPを使って、プラットフォームプロジェクトを作成していきましょう。Vivadoを立ち上げて、IPカタログに作成した[led_config_v1.0]を追加します。Catalog]をクリックしてIPカタログのタブを表示します。Repository]をクリックします。作成したカスタムIPのフォルダを選択するウィンドウが立ち上がるので、カスタムIPを作成したパスを指定します。以下のようにled_config_v1.0がIPに追加されました。追加されたIPをブロックデザインに配置します。GPIO]IPの代わりにカスタムIP[led_config_0]を組み込むだけです。ブロックデザインの作成方法は、以下の記事をご覧いただければと思います。本記事ではVitisとVivadoを用いてZybo上のLEDを点滅させるアプリケーションの作成をめざします。CPU上で”LED点滅”プログラムを動かすために、Zynq内部のハードウェア構成を定めるプロジェクトを作成しました。phys-higashi.com2021.02.13下の図のような、ブロックデザインを作成しました。XSAファイル生成このブロックデザインから、プラットフォームプロジェクトの設計図となるXSAファイルを生成します。制約ファイルは以下のコードのようにしました。この制約ファイルをVivadoに読み込み、論理合成からXSAファイルの作成までを一気に行いました。{leds_4bits[3]}]論理合成やインプリメントの方法は、前回の記事と重複する内容になりますので、改めて確認したい方は[+]マークから詳細をご確認ください。読み込んだブロックデザインをもとにHDL(ハードウェア言語)を作成します。bitstreamファイルの作成までを行います。立ち上がった新しいウィンドウ上で、エクスポートの設定を確認していきます。[Next]をクリックします。bitstream]を選択し、[Next]をクリックします。ファイル名とエクスポート先を指定し、[Next]をクリックします。最後に、[Finish]をクリックして完了です。IDEを立ち上げて、XSAファイルからプラットフォームプロジェクトを作成します。ワークスペースの作成手順については、すでに過去の記事でまとめていますので、改めて確認したい方は[+]マークから詳細をご確認ください。IDE]を選択します。立ち上がったウィンドウ上で、Workspaceを格納するディレクトリを指定します。指定が完了したら、[Launch]をクリックします。新しくVitisのウィンドウが立ち上がります。Project]をクリックし、新しいアプリケーションプロジェクトを作成していきます。ハードウェアデザイン(XSAファイル)の読み込み最初のウィンドウではそのまま[Next]をクリックします。Vivadoで作成したハードウェアデザイン(XSAファイル)を読み込んでいきます。(XSA)]タブを選択し、[Browse]をクリックし、前回の記事で作成したXSAファイルを選択します。選択が完了したら、[Next]をクリックします。アプリケーションプロジェクト名の指定アプリケーションプロジェクト名を入力し、アプリケーションを動作させるプロセッサの種類を選択したら、[Next]をクリックします。今回は特に設定変更不要ですので、そのまま[Next]をクリックします。Application”を選択し、[Finish]をクリックします。IDEのウィンドウの立ち上げまで完了したら、このワークスペース上で、”LED点滅”プログラムを作成していきましょう。自作のカスタムIPを使ったプラットフォームプロジェクトをそのままビルドするとエラーが起きてしまいました(確認環境:Windows版Vitis2020.2)。このエラーの原因と回避方法については、以下の記事をご覧ください。カスタムIPを含むプラットフォームビルド時のmakefileエラーを修正する方法カスタムIPを含むXSAファイルからVitis2020.2でプラットフォームプロジェクトを生成・ビルドしたところmakefileにおけるエラーが発生しました。本記事では、エラーの修正方法について紹介します。phys-higashi.com2021.06.20エラーを修正すれば、以下のようにプラットフォームプロジェクトのビルドが通るようになります。アプリケーションプロジェクトの作成プラットフォームプロジェクトができたので、次にアプリケーションプロジェクトを作成します。0;}LED_CONFIG_mWriteRegというAPI関数を使って、カスタムIPのslv_reg0というレジスタに、0x2という値を書き込んでいます。前回の記事で示したロジック同様に、こちらも非常に簡単な関数ですが、動作確認のために2番目のLEDが点灯するようにしました。“led_config_v1_0′′に関係するドライバAPIについて解説します。確認すべきは、次の2つのヘッダファイルです。“led_config_v1_0′′のベースアドレスは、”xparameters.h”に記載されています。0x43C0FFFFこのdefine文から、ベースアドレスが0x43C00000であることがわかります。次は、カスタムIPのレジスタ構成を整理してみましょう。ZynqプロセッサからAXI4-Liteを介して、カスタムIPの内部に構成されている4つのレジスタに書き込み・読み出しを行います。4つのレジスタのオフセットアドレス、書き込み・読み出しに用いるドライバAPI関数は、”led_config.h”に記載されています。オフセットアドレスやAPI関数のイメージを図にまとめると下のようになります。12カスタムIP自体のベースアドレスが0x43C00000で、カスタムIP内部の各レジスタにアクセスするためには、そこにオフセットアドレスを加えた値をアドレスとして指定することになります。書き込み・読み出しに用いるドライバ関数も次のように、led_config.h内部で定義されています。(RegOffset))ベースアドレスにオフセットアドレスを加えて、直接レジスタに値を書き込んだり、読み込んだりしていることがわかります。それぞれの関数の機能と、引数・返り値は以下のとおりです:led_config.hで定義されるドライバAPI関数と、その引数LED_CONFIG_mWriteReg:レジスタにデータを書き込むBaseAddress:IPのベースアドレス。今回はXPAR_LED_CONFIG_0_S00_AXI_BASEADDR(0x43C00000)RegOffset:レジスタのオフセットアドレス。Data:レジスタに書き込みたいデータ。返り値:なしLED_CONFIG_mReadReg:レジスタからデータを読み出すBaseAddress:IPのベースアドレス。今回はXPAR_LED_CONFIG_0_S00_AXI_BASEADDR(0x43C00000)RegOffset:レジスタのオフセットアドレス。返り値:読みだしたデータ。アプリケーションプロジェクトのビルドソースコードの追加とビルド作成したソースコードを追加していきます。アプリケーションプロジェクトの[src]フォルダを右クリックし、[New]>[File]を選択します。Name]を指定し、[Finish]をクリックします。新しく作成した[led_blink.c]に先程のソースコードを記述します。記述できたら、アプリケーションプロジェクトを右クリックし、[Build]を選択します。ここでも、そのままビルドするとエラーが起きてしまいました(確認環境:Windows版Vitis2020.2)。エラーを回避するには、一度プラットフォームプロジェクトを構成するXSAファイルを再度アップデートする必要がありました。このエラーの回避方法についても、以下の記事に詳述しています。カスタムIPを含むプラットフォームビルド時のmakefileエラーを修正する方法カスタムIPを含むXSAファイルからVitis2020.2でプラットフォームプロジェクトを生成・ビルドしたところmakefileにおけるエラーが発生しました。本記事では、エラーの修正方法について紹介します。phys-higashi.com2021.06.20アップデートを行うと、無事にビルドが通るようになります。これで、アプリケーションプロジェクトの作成は完了です。動作確認では、Zyboに接続し、所望の動作(レジスタに0x2を書き込んだので2番目のLEDが光る)どおりにLEDが点灯するかどうか、動作を確認しましょう。Hardware]を選択します。問題なく、Zybo上で所望のLEDが光りました。RinkerDigilentAmazon楽天市場Yahooショッピングひがし本記事では、カスタムIPを含むプラットフォームプロジェクトの作成方法と、ドライバ関数を用いたアプリケーションの記述方法について解説しました。次回はM側のAXI4-Liteをカスタマイズしていきます。(1)カスタムIPの内部構成について理解するハードウェア言語で作成したRTLモジュールにIPパッケージャーを使用して、Master側のAXI4-Liteインタフェースを追加する方法を解説しています。カスタムIPのどこを変更すればよいか、図解しながらIPの内部構成を解説しています。-掛け算IPをZyboに実装-本記事では、掛け算を行う関数をハードウェアIPに高位合成し、さらに高位合成の結果を実感するためにLED点滅回路に実装しました。回路実装では、スイッチからの入力を掛け算してLEDに出力して、掛け算IPの動作を確認しています。取りうる範囲を意識せずに扱った結果、無限ループに陥ってしまいました。その失敗談を交えつつ、無限ループを避ける対策をまとめました。Controllerは、ビデオの入出力を行う上で有用なIPです。初心者向けに動画像におけるタイミング信号のフォーマット、他のIPと接続したときIPの役割など、基本的な機能を解説しています。Zynqが外部からのHDMI信号を受信しDDRメモリに格納した後、DDRメモリを読み出しVGA信号を送信するアプリケーションの解説を行っています。HDMI信号をZynqが受信する際の割り込みの設定方法について紹介・解説しました。TerminalのマイコンとZynqをデータを通信する方法を解説。本記事では、ZynqのMIOとEMIOの違いについて解説した後、Zynq内部のブロックデザインをVivadoで作成しました。企業のエンジニアとして働きつつ、FPGAを使ったデジタル回路の設計に興味を持ち、休日に勉強をしています。このサイトを見ながら、実機を動かしているのですが、led_config.hというのが、無い、とのエラーが出てきます。PMご質問に気づかずお返事が遅くなりまして申し訳ありません。led_config.hはVitisでのアプリケーションプロジェクト生成時に自動で生成されます。カスタムIPの名前がヘッダーファイルの名称となりますので、例えばカスタムIPの名前が異なっているとエラーが発生するかと思います。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。@phys_higashiFPGAを使ったデジタル回路の設計に興味を持ち、休日に勉強をしています。初学者の目線から、詰まりやすいポイントとそれを解決した方法について、記事にまとめています。初学者ゆえの間違い等あるとは思いますが、お気づきの際はお問い合わせをいただけますと幸いです。@phys_higashiFPGAを使ったデジタル回路の設計に興味を持ち、休日に勉強をしています。初学者の目線から、詰まりやすいポイントとそれを解決した方法について、記事にまとめています。初学者ゆえの間違い等あるとは思いますが、お気づきの際はお問い合わせをいただけますと幸いです。-掛け算IPをZyboに実装-2021.04.182022.02.13Rustupをインストールするときに発生したエラーの回避方法2021.08.102021.11.07。