FPGA ピュア VHDL デコード IMX214 MIPI ビデオ、2 チャンネル ビデオ スプライシング出力、vivado エンジニアリング ソース コードとテクニカル サポートを提供

1 はじめに

FPGA 画像取得の分野で最も複雑で技術的に難しいプロトコルは、おそらく MIPI プロトコルです。MIPI デコードは非常に難しいため、数え切れないほどの英雄を打ち破ってきました。そのため、ザイリンクスは開発者が使用できる専用の IP コアを正式に発売する必要がありました。この操作は多くの FPGA 開発者を直接怖がらせ、誰もそれを使おうとしません。

この設計は、ザイリンクスの Kintex7 開発ボードに基づいています。2 チャンネルの IMX214 カメラから 4Line MIPI ビデオを収集します。IMX214 カメラ ピンは、Kintex7 の LVDS バンクに接続されています。MC20901 チップは、IMX214 MIPI 信号を LVDS 信号に変換し、それらを LVDS 信号に出力します。 FPGA、CSI2 RX モジュールがベイヤー ビデオを出力し、ベイヤー RGB モジュールを介して RGB ビデオを出力し、ガンマ補正モジュールを使用して画質を向上させ、画像スケーリングのために 2 つのザイリンクス公式ビデオ スケーラーを呼び出します。 、入力 1920x1080 ビデオを 960x1080 に縮小し、3 ザイリンクスを呼び出します。公式 VDMA は、3 フレーム バッファリングのために PS 側の DDR3 にイメージを送信してから読み出します。ザイリンクス公式 VTC モジュールを呼び出して、出力ビデオ タイミングを生成します。 Kintex7 は MicroBlaze を呼び出し、SDK ソフトウェアを通じて VTC 出力タイミングを動的に設定し、1080P、720P、640P をサポートします。タイミング出力、データ ストリーム変換のためにザイリンクス公式 AXI4-Stream をビデオ出力に呼び出し、VGA タイミング RGB データを出力し、最後にオンボードの Silicon9134 によって実装された RGB to HDMI モジュールを介してディスプレイにビデオを送信します。

この記事では、FPGA ピュア VHDL デコード IMX214 MIPI ビデオと 2 チャンネル ビデオ スプライシング出力の設計スキームについて詳しく説明します。エンジニアリング コードはボード上でコンパイル、デバッグ、検証されます。プロジェクトに直接移植できます。学校の学生が卒業プロジェクトや卒業プロジェクトの開発を行うのに適しており、現場のエンジニアがプロジェクトを開発するのに適しており、医療、軍事、その他の産業におけるデジタルイメージングおよび画像伝送の分野で使用でき、完全な機能を提供します
。 、エンジニアリング ソース コードとテクニカル サポートの詳細については、
エンジニアリング ソース コードとテクニカル サポートの入手方法が記事の最後に記載されています。辛抱強く最後まで読んでください。MIPI
プロトコルについては、自分で検索してください。 csdn の多くの偉い人たちがこの件について詳しく語っているので、これ以上は書きません。

免責事項

このプロジェクトとそのソース コードには、私が書いた部分と、インターネット上のパブリック チャネル (CSDN、ザイリンクス公式 Web サイト、アルテラ公式 Web サイトなどを含む) から入手した部分の両方が含まれています。気分を害される場合は、プライベート メッセージを送信して批判してください。本プロジェクトおよびそのソースコードは、読者またはファンの個人的な学習・研究に限定しており、商業目的での使用を禁止します 読者またはファン自身による商業利用により法的問題が生じた場合、当ブログとブロガー様とは一切関係がございませんので、ご利用の際はご注意ください。

2. すでにここにある MIPI コーデック ソリューション

現在、FPGA ベースの MIPI エンコードおよびデコード ソリューション (主に MIPI デコード) を豊富に所有しています。純粋な vhdl によって実装された MIPI デコードと、ザイリンクスの公式 IP を呼び出して実装された MIPI デコードの両方があります。2 ライン MIPI デコードと 4 ライン MIPI デコードの両方があります。 4K 解像度の MIPI デコーディングと 720P の解像度の MIPI デコーディング、Xilinx プラットフォーム FPGA に基づく MIPI デコーディング、Altera プラットフォーム FPGA に基づく MIPI デコーディング、Lattice プラットフォーム FPGA に基づく MIPI デコーディングを含みます。国産FPGAよりも優れたMIPIデコードソリューションを投入します。結局のところ、将来的には国産ソリューションが主流になります。将来的には、より多くのMIPIエンコードDSIソリューションも投入し、FPGA向けのMIPIエンコードおよびデコードソリューションを手頃な価格で提供できるよう努めます。」
これに基づいて、MIPI エンコードとデコードに関する特別な列を作成し、すべての MIPI エンコードとデコードのブログをその列に入れました。プロジェクトのニーズがある、または FPGA エンコードとデコード MIPI に興味がある兄弟は、私のコラムを参照してください。アドレスは以下の通りです:
クリックするとコラムへ直接移動します

3. この MIPI CSI2 モジュールの性能と利点

一言で言えば、素晴らしい、パフォーマンスは次のとおりです:
1: 純粋な VHDL コードの実装、学習性と可読性は限界に達しています;
2: FPGA がザイリンクスの逆シリアル化ソース言語と互換性がある限り、移植性は問題ありません。移植可能;
3: アルゴリズムは限界に達しており、標準の CSI2 受信プロトコルはデコードを実装しています;
4: IMX214 カメラを入力として使用し、実用性は限界に達しています (主に安価なため) 検証や実験プロジェクトとは異なります市場では、このデザインは実践的なプロジェクトに直接指向しており、実際のプロジェクトに近く、同様のプロジェクトを持つ兄弟が直接使用して、1 か月分の給与を直接受け取ることができます。5: 最大
1920です、カスタム IP としてカプセル化されており、ユーザーはコードの実装を気にする必要はありません複雑なロジックの場合、IP を呼び出して、それを使用するために UI インターフェイスを介して構成するだけです。内部のソース コードを確認できますが、直接開いて視聴することもできます; 8 : 同時に異なるソース クロックを持つ 2 台の MIPI カメラを収集し、2 つのチャンネルをデコードしますビデオ スプライシング表示は、現実的なハイエンド プロジェクトとの一貫性が高くなります。 ;


4. 詳細設計計画

設計概略図

設計原理のブロック図は次のとおりです。
ここに画像の説明を挿入します

IMX214 カメラとその構成

私が使用している IMX214 カメラの出力は 4 ライン MIPI フォーマット、出力解像度は 1080p@60Hz、RAW10 データを出力、FPGA は AXI-IIC を呼び出して IMX214 をコンフィギュレーションし、この操作は SDK ソフトウェアで完了します。

D-PHYモジュール

D-PHY はハードウェア ソリューションを使用して実装され、MC20901 チップ (主に安価で平均的なパフォーマンス) を使用して IMX214 の MIPI 信号を LVDS 信号に変換し、FPGA に出力します。概略ブロック図は次のとおりです。
ここに画像の説明を挿入します

CSI-2-RX モジュール

MIPI CSI-2-RX については、原理や概念を紹介する記事がインターネット上に多数ありますので、ここでは繰り返しませんが、ここでは FPGA を使用した実装に焦点を当てます。純粋な VHDL コードを使用して MIPI CSI を実装します
。 -2-RX 機能 誰にでも配慮するため VHDL コードを読む習慣に慣れるために、コードの一部をカスタム IP にカプセル化しました ユーザーはコード実装の複雑なロジックを気にする必要はありません。 IP を呼び出し、それを使用するために UI インターフェイスを介して設定するだけです。もちろん、それを見たい場合は、ソース コードを直接開いて表示することもできます。この MIPI CSI-2-RX は 4 行のみをサポートします。 MIPI ビデオ、およびデータ形式は RAW10 をサポートしています。
このプロジェクトの CSI-2-RX カスタム IP 呼び出しは次のとおりです:
ここに画像の説明を挿入します
MIPI CSI-2-RX 純粋 VHDL ソース コードは次のとおりです。
ここに画像の説明を挿入します

ベイヤーからRGBへのモジュール

MIPI ベイヤーから RGB への変換については、原理や概念を紹介する記事がインターネット上に多数ありますので、ここでは繰り返しませんが、ここでは FPGA を使用した実装に焦点を当てます。純粋な VHDL コードを使用して MIPI ベイヤーを RGB に実装します
。 VHDL コードの読み取りに慣れていない人でも安心して使用できるように、RGB 変換機能を搭載しています。慣例に従って、コードの一部をカスタム IP にカプセル化しています。ユーザーはコード実装の複雑なロジックを気にする必要はありません。 IP を呼び出して、それを使用するために UI インターフェイスを介して設定するだけで済みます。もちろん、内部のソース コードを確認したい場合は、直接開いて見ることもできます。このプロジェクトの Bayer から RGB へのカスタム IP 呼び出しは次のとおりです

ここに画像の説明を挿入します
MIPI ベイヤーから RGB の純粋な VHDL ソース コードは次のとおりです
ここに画像の説明を挿入します

ガンマ補正モジュール

MIPI ガンマ補正については、原理や概念を紹介する記事がインターネット上にたくさんありますので、ここでは繰り返しませんが、ここでは FPGA を使用した実装に焦点を当てます。純粋な VHDL コードを使用して MIPI ガンマ補正機能を実装します
。 VHDL コードを読むことに慣れていないすべての人に配慮するため、慣例に従い、コードの一部をカスタム IP にカプセル化しました。ユーザーはコード実装の複雑なロジックを気にする必要はありません。呼び出すだけで済みます。 IP を取得し、UI インターフェイスを介して設定して使用します。もちろん、内部のソース コードを確認したい場合は、直接開いて見ることもできます。このプロジェクトのガンマ補正カスタム IP 呼び出しは次のとおりです: MIPI
ガンマ
ここに画像の説明を挿入します
補正純粋な VHDL ソース コードは次のとおりです。
ここに画像の説明を挿入します

VDMA画像キャッシュ

3 チャネル VDMA を呼び出し、そのうち 2 チャネルは書き込みモードでのみ設定され、ビデオを DDE3 に書き込む必要があるだけであり、他の 1 チャネルは読み取り動作用に設定されています。この設計の目的は、2 チャネル ビデオ スプライシングを行うことです。 、2 チャネル VDMA はイメージの DDR アドレスを書き込みます。これとは異なり、メモリ内のイメージ アドレスが競合しないことを保証できますが、イメージを読み取る場合、読み取り操作の実行に使用できる VDMA チャネルは 1 つだけです。これは従来の設計アイデアであるだけでなく、HP インターフェイス AXI4 バスの負荷を軽減するための要件でもあり、書き込み専用
モードで構成されます。 VDMA は次のとおりです。 VDMA は
ここに画像の説明を挿入します
読み取りモードで構成されます。
ここに画像の説明を挿入します

Video Scaler の画像キャッシュ

画像スケーリングのために 2 つのザイリンクス公式ビデオ スケーラーを呼び出し、入力 1920x1080 ビデオを 960x1080 に縮小します。この目的は、2 チャンネル ビデオを出力解像度 1920x1080 のディスプレイに接続することです。ビデオ スケーラーのスケーリング操作は、 SDK の IP は次のとおりです。
ここに画像の説明を挿入します

HDMI出力

HDMI 出力は silcom9134 を使用して完了します。Silcom9134 を使用するには、i2c 構成が必要です。Kintex7 は MicroBlaze を呼び出し、SDK ソフトウェアを通じて構成します。silcom9134 チップの構成については、以前のブログを参照してください。ブログ アドレス: クリックして直接移動します

5. vivadoプロジェクトの詳細説明

PL側FPGAハードウェア設計

開発ボード FPGA モデル: Xilinx–Kintex7–xc7k325tffg900-2;
開発環境: Vivado2019.1;
入力: 2 チャンネル IMX214 MIPI 4 ライン RAW10;
出力: HDMI 2 ウェイ スプライシング ディスプレイ、1080P;
アプリケーション: FPGA ピュア VHDL デコーディング IMX214 MIPI ビデオ、2 チャンネルのビデオ スプライシング出力;
プロジェクトのブロック デザインは次のとおりです:
ここに画像の説明を挿入します
プロジェクトのコード構造は次のとおりです:
ここに画像の説明を挿入します
包括的なコンパイル後の FPGA リソース消費量と消費電力の見積もりは次のとおりです:
ここに画像の説明を挿入します

PS SDK ソフトウェア設計

SDK C++ 言語ソフトウェアのコード構造は次のとおりです。
ここに画像の説明を挿入します

6. プロジェクト移植指示

Vivado バージョンの不一致の処理

1: vivado バージョンがこのプロジェクトの vivado バージョンと一致している場合は、プロジェクトを直接開きます。
2: vivado バージョンがこのプロジェクトの vivado バージョンよりも低い場合は、プロジェクトを開いて [ファイル] –> [名前を付けて保存] をクリックする必要があります。 ; しかし、この方法は安全ではありません。最も安全な方法は、vivado バージョンをこのプロジェクトの vivado バージョン以上のバージョンにアップグレードすることです。3: vivado バージョンがこのプロジェクトの vivado バージョンより高い場合、解決策
ここに画像の説明を挿入します
はプロジェクトを開くと、次のよう
ここに画像の説明を挿入します
に IP がロックされていることがわかります。
ここに画像の説明を挿入します
このとき、IP をアップグレードする必要があり、操作は次のとおりです。
ここに画像の説明を挿入します
ここに画像の説明を挿入します

FPGAモデルの不一致の処理

FPGA モデルが私のものと一致しない場合は、FPGA モデルを変更する必要があります。操作は次のとおりです: FPGA モデルを変更
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
した後、IP もアップグレードする必要があります。IP のアップグレード方法は以前に説明しました。

その他の注意事項

1: 各ボードの DDR は必ずしも完全に同じであるとは限らないため、MIG IP は独自の回路図に従って構成する必要があります。元のプロジェクトの MIG を直接削除し、IP を再度追加して再構成することもできます。2 :
独自の回路図のピン制約を変更するには、xdc ファイル内で変更するだけです; 3
: 純粋な FPGA を Zynq に移植する場合、プロジェクトに zynq ソフト コアを追加する必要があります。

7. ボードのデバッグと検証

出力は次のとおりです。
ここに画像の説明を挿入します

8. メリット:エンジニアリングコードの取得

おまけ:エンジニアリングコードの取得
コードは大きすぎてメールで送信できません 特定のネットワークディスクリンク経由で送信します
情報取得方法は非公開、または記事末尾のV名刺です
ネットワークディスク情報は以下のとおりです。
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_41667729/article/details/132745977
おすすめ