インテルのみ表示可能 — GUID: sbh1683281685808
Ixiasoft
インテルのみ表示可能 — GUID: sbh1683281685808
Ixiasoft
37.3. Video Frame Reader IPの機能の説明
csr_num_buffer_sets レジスターをプログラムして、設定するバッファーセットの数でIPをコンフィグレーションします。各セットについて、バッファーの数、ベースアドレスとバッファーオフセット、バッファーサイズ、およびカラースペース情報をバッファーセットのレジスターにプログラムします。csr_buffer_mode レジスターを複数のバッファーセット・モードに設定します。このモードでは、IPが現在のセットから最後のバッファを生成すると、IPは自動的に次のセットからバッファーを読み出します。それ以外の場合、IPは現在のセットからのみバッファーを読み出します。csr_starting_buffer_set レジスターをプログラムし、csr_run レジスターのLSBを設定すると、csr_commit レジスターに書き込んだ後すぐに、IPによる出力フレームの生成が開始されます。
csr_run の bit [1] が設定されている場合、シングルショット・モードがコンフィグレーションされます。このモードでは、セットの最後のバッファーが出力されるとIPが停止します。
外部タイミング同期信号を使用して読み出しの出力タイミングを計りたい場合は、csr_run レジスターを2に設定します。このモードでは、IPを通常どおりに設定しますが、IPが各フレームの出力を開始するときに、フレーム同期コンジットに立ち上がりエッジまたは立ち下がりエッジを提供します。
IPが立ち上がりエッジでのみフレームを生成するようにする場合は、csr_fsync_pulse_mode を設定します。
IPがすでにフレームを出力しているときにフレーム同期エッジが検出されると、IPは現在のフレームの直後に次のフレームの出力を開始します。
csr_run を0に設定し、csr_commit レジスターに書き込むと、IPは現在のフレームの終了時に停止します。
レジスターの動作
IPが最初のフレームの生成を開始すると、csr_status レジスターのビット [0] がHighになります。IPがフレームの最後の行の出力を終えると、ビット [0] はLowになります。IPが次のフレームの生成を開始すると、ビット [0] はHighに戻ります。
IPがフレームの生成を完了すると、csr_last_buffer_read レジスターはフレームのベースアドレスで更新されます。
IPがフレームを生成するタイミングを知る必要があるアプリケーションでは、これらのステータスレジスターをポーリングできます。または、IRQ_CONTROL レジスターを使用して、IPがフレームの生成を完了したときに割り込みを設定します。
ダブルバッファーのアプリケーション
CPU またはGPU (ホスト) がフレームを生成するアプリケーションでは、ダブルバッファーを使用することがよくあります。ホストは1つのバッファーに書き込み、IPは別のバッファーから読み出します。ホストが新しいフレームの書き込みを完了すると、IPは新しいフレームからの読み出しに切り替わります。その後ホストは、IPが読み出しを停止したバッファーに、次のフレームの作成を開始できます。
IPを使用してダブルバッファーをコンフィグレーションするために、インテルでは、それぞれ1つのバッファーを持つ2つのバッファーセットをコンフィグレーションすることをお勧めしています。各バッファーセットを1つのバッファーとして考えてください。IPは、csr_starting_buffer_set レジスターに従って、最初に1つのバッファーからビデオを生成し、次にもう1つのバッファーからビデオを生成します。
レジスターを次のようにプログラムします。
- CSR_NUM_BUFFER_SETS = 2 (2セット、それぞれに1つのバッファー)
- CSR_BUFFER_MODE = 0 (ホストが新しいフレームを書き込む前にIPがセット1のバッファーに自動的に進むのを防ぐため)
- CSR_STARTING_BUFFER_SET = 0 (ホストによる最初のセット0へのフレームの作成)
- CSR_RUN = 1 (IPは現在のセットからすべてのフレームを継続的に生成し、この場合は1つのフレームのみ)
CSR_BUFFER_0_BASE および CSR_BUFFER_1_BASE のバッファーセットのレジスターは、両方のバッファーの正しいベースアドレスとその他の詳細でプログラムする必要があります (バッファーセットのレジスターバンクを参照)。各セットには1つのバッファーしか含まれていないため、BUFFER_0_NUM_BUFFERS および BUFFER_1_NUM_BUFFERS は1に設定する必要があります。各セットにバッファーが1つしかないため、BUFFER_N_INTER_BUFFER_OFFSET レジスターは使用されません。
ホストが最初のフレームを CSR_BUFFER_0_BASE に書き込み終えたら、CSR_COMMIT = 1を書き込むと、IPはこのフレームを繰り返し生成し始めます。
ホストは CSR_BUFFER_1_BASE でフレームの構築を開始できます。ホストが終了したら、次のようにプログラムします。
- CSR_STARTING_BUFFER_SET = 1
- CSR_COMMIT = 1
IPでは、CSR_BUFFER_1_BASE で新しいフレームを繰り返し生成します。
このプロセスは繰り返し実行でき、ホストは CSR_BUFFER_0_BASE に再度書き込み、IPにそのフレームに変更するように指示します。
- CSR_STARTING_BUFFER_SET = 0
- CSR_COMMIT = 1
マルチビデオ・アプリケーション
マルチビデオ・アプリケーション用に複数のバッファーセットを確立できます。ホストはメモリー内にビデオセグメントを保持し、IPは任意のセグメントを読み出すことができ、複数のバッファーセット・モードを使用して次のセグメントに自動的に進むオプションがあります。
5つのビデオセグメントがあり、ベースアドレス CSR_BUFFER_0_BASE から CSR_BUFFER_4_BASE でセグメントが使用可能な例で、すべてのシーケンスを順番に表示するには、レジスターを次のようにプログラムします。
- CSR_NUM_BUFFER_SETS = 5
- CSR_BUFFER_MODE = 1 (現在のセットの最後のバッファーを出力した後、IPは次のセットの最初のバッファーに自動的に進む)
- CSR_STARTING_BUFFER_SET = 3 (最初にセット3から出力開始)
両方のバッファーのベースアドレスとその他の詳細を、CSR_BUFFER_0_BASE から CSR_BUFFER_4_BASE のレジスターセットにプログラムします (バッファーセットのレジスターバンクを参照)。
CSR_RUN = 1 (IPは、buffer_mode設定によって次のセットに移動する前に、各セットからすべてのフレームを継続的に生成)
CSR_BUFFER_N_NUM_BUFFERS は、シーケンスNの正しいフレーム数 (例えば、60 Hzの1分間のビデオの場合は3600) でプログラムされます。
各セットの解像度とカラースペースは異なる場合がありますが、各セット内のすべてのバッファーの解像度とカラースペースは同じである必要があります。
CSR_COMMIT = 1を書き込むと、5つのビデオセグメントすべての出力が順番に開始されます。
この5つのビデオセグメントの例を実装するには、ホストはセットが最終フレームを生成するタイミングを手動で設定し、次のセットを動的にコンフィグレーションする必要があります。ただし、組み込みのバッファーセットのレジスターを使用する方が便利で、デバッガーの使用時など、ホストが次のセットを時間内にプログラムできない場合でも、マルチビデオの再生が継続されます。
フレーム同期アプリケーション
フレーム同期をイネーブルするには、CSR_RUN を2に設定します。このモードでは、前述のようにバッファーセットを設定し、IPは fsync_in_read 入力でフレーム同期エッジを検出するたびにフレームを生成します。
レイテンシー
フレームリーダーのレイテンシーは外部メモリー・インターフェイスの可用性に依存し、av_mm_mem_read_host_waitrequest 信号を介してIPの読み出しインターフェイスにバックプレッシャーが発生する可能性があります。
ストリーミング・ビデオ出力は、axi4s_vid_out_tready 入力を介してバックプレッシャーを経験します。ワーストケースのレイテンシーの数値は、フレームリーダーがバックプレッシャーを経験していない場合のものです。バックプレッシャーが発生すると、これらのレイテンシーは同じサイクル数だけ増加します。
レイテンシーの数値は、ホスト・インターフェイスに個別のクロックがなく、すべてのインターフェイスが同じクロックで動作する場合のものです。
開始イベント | 結果イベント | レイテンシー (クロックサイクルで測定) | 図中のラベル |
---|---|---|---|
csr_run レジスターのLSBがすでに設定されている場合は、 csr_commit に書き込み | 画像情報パケット (フルモードのみ) | 10 | a->d |
csr_run レジスターのLSBがすでに設定されている場合は、 csr_commit に書き込み | av_mm_mem_read_host_ read によって開始された読み出し | 14 | a->b |
av_mm_mem_read_host_readdatavalid ストローブがHighになり、最初のフレームデータを返す | axi4s_vid_out_tuser[0] ストローブで、ストリーミング出力のフレーム開始を示す | 20 | c->e |
