Portionで構成されています。PortionとAXIで接続します。この時、ユーザー回路側がマスタとなるAXIとしては、次の2種類が選択できます。Port)を利用できるのが特徴です。Interfaceは、ACPやペリフェラルのアクセスは行えませんが、その代わりに4GBのメイン・メモリをリニアにアクセスできるのが特徴です。IIで観測してみました。使用した開発キットはDE0-Nano-SoCです。BridgeのAXI応答AXIの設定などAXIの設定は次の通りです。Bridgeとユーザー回路は、ダイレクトに接続しています。途中にプロトコル変換やバス幅変換のモジュールは接続していません。QsysでのHPS設定は次の通りです。Bridgeの設定DDR3は標準の設定(DE0-Nano-SoCのサンプルの設定)をそのまま使用しています。DDR3の設定ソフトウェアについてLinuxとベアメタルの2種類でアプリを実行しました。観測結果リードとライトアクセスについて、それぞれバースト長16のアクセスを観測しました。アクセス先のアドレスはDDR3メイン・メモリです。アクセスは、すべてACPを有効にしています。8000_0000hのオフセットをアドレスに加えてDDR3をアクセスしています。ライトAXIではライト・コマンドとライト・データの関係は特に決まっていませんが、今回のAXIマスタは、ライト・コマンドが受け付けられた直後のサイクルから、バースト長分のライト・データを連続して出力します。このようなAXIライトを行うと、ライト・コマンドはウェイトなしでAXIに送出されました(AWVALID=HかつAWREADY=H)。ライト・データはウェイト・サイクル(WREADY=L)が観測されました。具体的には、4バースト後に1サイクルのウェイト・サイクルが入り、その後2バーストごとに1サイクルのウェイト・サイクルが入りました。AXIライトリードリード・コマンドもウェイト・サイクルなしの1サイクルで受け付けられました(ARVALID=HかつARREADY=H)。この例の場合、1サイクルを空けてリード・コマンドを4回発行しています。バースト長16のリード・データは、連続ではなく分割されて戻ってきました。具体的には、13サイクル後に最初のリード・データが戻り、その後有効データ(RVALID=H)が2サイクル、次に1ウェイト(RVALID=L)が1サイクルという繰り返しで16のデータが戻ります。AXIリードまとめDDR3の動作周波数が400MHz(データ転送は800MHz)、データ・バス幅が32ビットなので、50MHzに換算すると、1サイクルのデータ・バス幅は512ビットになります(400MHzで64ビット->200MHzで128ビット->100MHzで256ビット->50MHzで512ビット)。今回のユーザー回路のAXI動作周波数は50MHzなので、リード、ライトともに連続してデータを転送するのに十分な余裕がありそうに思いましたが、実際にはウェイト・サイクルが観測されました。パラメータなど、設計で調整が必要な部分があるのかも知れません。波形は動作中のあるタイミングでのスナップ・ショットなので、すべてのAIX転送がこのような応答をしているとは限りません。全体的にはこのような傾向が観測されました。Linux上でアプリを動かしても、ベアメタルでアプリを動かしてもAXIの応答に大きな違いはありませんでした。NiosIIのプログラム開発で、プロジェクトとは別のディレクトリに存在するソースコードをリンクする場合のメモです。新しいアプリケーションプロジェクトを作成します。Generatorをコマンドラインから実行するXilinx社の最新の開発環境はVivadoに移行しましたが、Virtex-6やSpartan-6、またそれらよりも古いデバイスを使う場合は、以前の開発環境であるISEを使うことになります。GUIのImplementationをコマンドラインから実行する場合の手順です。Bitstreamをコマンドラインから実行する場合の手順です。GUIのSynthesisをコマンドラインから実行する場合の手順です。GUIで一通り動作するプロジェクトを作成して合成を実行します。HLS(高位合成)を無償で試せるようになりました。HLSを使うと、CやC++で記述したコードからVerilogやVHDLのコードが生成できます。ディジタル技術資料タイトルとURLをコピーしました。