Zynq7020 ピュア VHDL は MIPI ビデオ、HDMI 出力をデコードし、ISP ダイナミック コンフィギュレーションをサポートし、vivado プロジェクト ソース コードとテクニカル サポートを提供します。

1 はじめに

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

このデザインはザイリンクスの Zynq7020 開発ボードに基づいています. OV5640 カメラから 2Line MIPI ビデオを収集します. OV5640 カメラ ピンは Zynq7020 の BANK35 に接続されています. D-PHY および CSI2 RX モジュールは純粋な VHDL 出力ベイヤー ビデオで実装されています,その後、Bayer to RGB モジュールが RGB を出力し、ビデオはガンマ補正モジュールによって画質が向上し、ザイリンクス公式 VDMA が呼び出されて PS 側の DDR3 に画像が送信され、3 フレームのバッファリングが行われます。読み出し; ザイリンクス公式 VTC モジュールが呼び出されて出力ビデオ タイミングを生成し、zynq は SDK ソフトウェアを通じて VTC を動的に構成します。出力タイミングは 3 つのタイミング出力をサポートします: 1080P、720P、および 640P。ザイリンクス公式 AXI4-Stream を呼び出して、データ ストリーム変換用のビデオ出力は、VGA タイミング RGB データを出力し、最終的に純粋な VHDL で実装された RGB to HDMI モジュールを介してディスプレイにビデオを出力します。SDK ソフトウェア側では、シリアル ポートを介して PC と通信し、 PC は SDK ソフトウェアに命令を送信して ISP を動的に構成します。ISP 機能には、OV5640 入力解像度の制御、OV5640 入力画像フォーマットの制御、OV5640 内部レジスタ値の任意の変更、OV5640 内部レジスタ値の任意の読み取り、OV5640 の内部レジスタ値の任意の変更が含まれます。ガンマ補正係数 (さまざまな出力効果)、自動ホワイトバランス モードの制御と切り替え (高度、シンプル、無効の 3 つのモードがあります)。

この記事では、Zynq7020 ピュア VHDL デコード MIPI ビデオ HDMI 出力の設計スキームについて詳しく説明します。エンジニアリング コードがコンパイルされ、オンボード デバッグと検証に合格した後、プロジェクトを直接移植できます。学校の学生の卒業に適しています。プロジェクト開発は、医療、軍事、その他の産業におけるデジタル イメージングおよび画像送信の分野で使用でき、完全な実行可能なエンジニアリング ソース コードと
、テクニカル サポート;
エンジニアリング ソース コードとテクニカル サポートの入手方法は記事の最後にあります、辛抱強く読んでください 最後に;
MIPI プロトコルについては、ご自身で検索してください。それについては詳しく説明するので、これ以上は書きません。

免責事項

このプロジェクトとそのソース コードには、私が書いた部分と、インターネット上のパブリック チャネル (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: OV5640 カメラを入力として使用し (主に安価)、実用性は限界に達しています。このデザインは、実際のプロジェクトに近い、実践的なプロジェクトを直接指向しており、同様のプロジェクトを持つ兄弟が直接使用して、1 か月分の給与を直接受け取ることができます。5: 最大
1920です、カスタム IP としてカプセル化されており、ユーザーはコードの実装を気にする必要はありません複雑なロジックの場合、IP を呼び出して、それを使用するために UI インターフェイスを介して構成するだけです。内部のソース コードを参照してください。直接開いて見ることもできます。

4. 詳細設計計画

設計概略図

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

OV5640 カメラとその構成

私が使用している OV5640 カメラは 2 ライン MIPI フォーマットを出力します。出力解像度は 720p@60Hz と 1080p@30Hz です。SDK ソフトウェアを通じて設定するものを選択できます。OV5640 は RAW10 データを出力します。zynq は i2c オンチップ ペリフェラルを通じて設定されます。 OV5640 では、この操作は SDK ソフトウェアで完了し、PL 側のハードウェアが関与する必要はありません。

D-PHYモジュール

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

CSI-2-RX モジュール

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

RGB to HDMI モジュール

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

ISP の動的構成

SDK ソフトウェア側では、シリアル ポートを介して PC と通信し、PC は SDK ソフトウェアに命令を送信して ISP を動的に構成します。ISP 機能には、OV5640 入力解像度の制御、OV5640 入力画像フォーマットの制御、任意の変更が含まれますOV5640 内部レジスタ値、および OV5640 内部レジスタ値の任意の読み取り、ガンマ補正係数の任意の変更 (さまざまな出力効果)、自動ホワイト バランス モードの制御と切り替え (アドバンスト、シンプル、無効の 3 つのモードがあります); 詳細ビットをダウンロードした後、PC 上のシリアル ポート デバッグ アシスタントは
出力プロンプト情報を受け取ります。

Please press the key corresponding to the desired option:
a. Change Resolution
b. Change Liquid Lens Focus
d. Change Image Format (Raw or RGB)
e. Write a Register Inside the Image Sensor
f. Read a Register Inside the Image Sensor
g. Change Gamma Correction Factor Value
h. Change AWB Settings

現時点では、a、b、d、e、f、g、h の場合を入力してカメラを動的に構成できます。ここでの手順は次のとおりです。

OV5640 入力解像度制御

a を入力すると、次の情報が印刷されます。

1. 1280 x 720, 60fps
2. 1920 x 1080, 15fps
3. 1920 x 1080, 30fps

入力 1、OV5640 の入力解像度は 1280 x 720、60fps、
入力 2、OV5640 の入力解像度は 1920 x 1080、15fps、
入力 3、OV5640 の入力解像度は 1920 x 1080、30fps、

OV5640 フォーカスコントロール

上で b を入力したときの関数ですが、この関数のデバッグに失敗していて、どこに問題があるのか​​まだわからないので、詳細は説明しません。

OV5640 入力データ形式制御

d を入力すると、次の情報が表示されます。

Please press the key corresponding to the desired setting:
1. Select image format to be RGB, output still Raw
2. Select image format & output to both be Raw

入力 1、OV5640 の入力データ形式は RGB;
入力 2、OV5640 の入力データ形式は RAW;
注: このプロジェクトは MIPI であるため、RGB 形式はデバッグでのみ使用されるため、必ず RAW として構成してください。

OV5640 書き込みレジスタ制御

「e」と入力すると、次の情報が表示されます。

Please enter address of image sensor register, in hex, with small letters:

このとき、書き込む必要がある OV5640 レジスタ アドレスを入力する必要があります。
アドレスを入力すると、次の情報が表示されます。16 進数を入力することに注意してください。

Please enter value of image sensor register, in hex, with small letters:

このとき、書き込む必要がある OV5640 レジスタのデータを入力する必要があります (16 進数を入力することに注意してください)。
これ以降、OV5640 レジスタの書き込み操作は完了します。

OV5640 読み取りレジスタ制御

「f」と入力すると、次の情報が表示されます。

Please enter address of image sensor register, in hex, with small letters:

このとき、読み取る必要がある OV5640 レジスタのアドレスを入力する必要があります。入力するのは 16 進数であることに注意してください。
アドレスを入力すると、データが読み取られます。

ガンマ補正係数制御

「g」と入力すると、次の情報が表示されます。

Please press the key corresponding to the desired Gamma factor:
1. Gamma Factor = 1
2. Gamma Factor = 1/1.2
3. Gamma Factor = 1/1.5
4. Gamma Factor = 1/1.8
5. Gamma Factor = 1/2.2

1 と入力するとガンマ補正係数は 1、2 と
入力するとガンマ補正係数は 1/1.2、3 と入力すると
ガンマ補正係数は 1/1.5、4 と入力するとガンマ補正係数は 1/1.8、5 と入力するとガンマ補正係数
は1/
1.8 となります。ガンマ補正係数は 1/ 1.8、馬補正係数は 1/2.2、

自動ホワイトバランス制御

「h」と入力すると、次の情報が表示されます。

Please press the key corresponding to the desired AWB change:
1. Enable Advanced AWB
2. Enable Simple AWB
3. Disable AWB

1 を入力すると、自動ホワイト バランスは詳細モードで、効果は最高です。2 を
入力すると、自動ホワイト バランスはシンプル モードで、効果は平均的です。3 を
入力すると、自動ホワイト バランス機能は無効になり、出力は黒人かもしれない。

MIPI D-PHY ハードウェア ソリューション

この設計では、ザイリンクスが公式に推奨する抵抗ネットワーク ソリューションを使用しており、800M Hz 以下と 30mm 以内の配線が必要です。オンボード MIPI インターフェイスの回路図は次のとおりです。次に、差動信号グループは次のように BANK35 に接続されます
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します

ここに画像の説明を挿入します

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

PL側FPGAハードウェア設計

開発ボード FPGA モデル: Xilinx–zynq7020–xc7z020clg400-1;
開発環境: Vivado2019.1;
入力: OV5640 MIPI 2 ライン RAW10;
出力: HDMI ディスプレイ、720P;
アプリケーション: Zynq7020 ピュア VHDL デコーディング MIPI ビデオ HDMI 出力;
プロジェクト ブロック デザインは
ここに画像の説明を挿入します
エンジニアリング コードの構造は次のとおりです。包括的な
ここに画像の説明を挿入します
コンパイル後の 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/132690083
おすすめ