FPGAがHDMIビデオプロジェクトに頻繁に使用されるのはなぜですか?


24

hackadayのようなサイトでhdmiプロジェクトを見ると、それらのほぼすべてがFPGAに関係していることがわかります。FPGAを使用していないHDMI出力のDIYプロジェクトを見たことはないと思います。

しかし、なぜ?私が知る限り、FPGAは高価で、約70〜100ドルです。それを35ドルのRaspberry Piと比較すると、もっと複雑なことができ、HDMIを出力できます。ARMが使用されないのはなぜですか?それとももっと安いマイクロコントローラーですか?

古いゲームシステムでビデオをアップグレードする場合、ロジックは安価なマイクロコントローラーで処理できるほど複雑ではありませんが、HDMIはFPGAのみが取り組むことの不可能なハードルであると考えています。


安いG PUSも見つけることができます(RPiのように)。キャッチは、彼らがHDMIライセンスに違反したり、一部の(DMCA)国では完全に違法なことをしないということです。これは、リンクするほとんどのプロジェクトが行うことです。IPコア GPUを購入し、それを変更してそのようなことを行うことができます...しかし、誰がそれを製造するのでしょうか?FPGAは貧乏人(または海賊)の工場です。
フィズ

回答:


66

基本的に、マイクロコントローラーはなく、ラズベリーパイでも十分に高速ではありません。ラズベリーパイには、HDMI出力を生成するオンボードGPUがあります。それ以外に、raspberry piのI / O機能は非常に制限されています。HDMI以外の最高帯域幅インターフェイスはUSBです。HDMI変換プロジェクトの多くでは、奇妙な形式の別のビデオストリームを取り込み、それをHDMI経由で標準のHDTVに送信できるものに作り直します。これには、ビデオ信号を読み込むカスタムインターフェイスロジック、再フォーマットする信号処理ロジック、HDMI TMDSエンコードロジック、HDMIポートを実際に駆動する高速シリアライザーが必要です。

ストリーミング、非圧縮、高解像度ビデオを使用するには、大量のデータを処理する必要がありますが、これは汎用CPUでは実現不可能です。1秒あたり30フレームの1080pビデオ信号には、1秒あたり約6,200万ピクセルがあります。raspberry piは700 MHzで実行されるため、ピクセルあたり11命令あります。そして、それは奇数のビデオ形式でリアルタイムに読み込み、それを再スケーリングするなどの11の指示です。不可能です。期間。

FPGAでは、クロックサイクルごとに1つ以上のピクセルを処理できる長い処理パイプラインを生成し、非常に決定的な方法で(割り込みやタスクの切り替えなしで)処理できるため、ピクセルデータをHDMIで送信する準備ができます正確なタイミングで。あらゆる種類のオペレーティングシステムを実行している汎用CPUで広範囲に作業している場合、ミリ秒レベルで正確なタイミングを取得することは多かれ少なかれ実行可能ですが、マイクロ秒レベルではほとんど不可能です。HDMIの場合、ナノ秒スケールの精度が必要です。汎用CPUでは実行できません。また、neo geo向けのHDMIオーディオ/ビデオプロジェクトもご覧ください。これは、ビデオを再スケーリングするだけでなく、オーディオをリサンプリングしてHDMIビデオストリームに挿入する必要があります。

そして、これはあなたが持っているどんな入力データ形式でも読むのに必要なカスタムロジックをまだ考慮していません。これを解釈するには、カスタムハードウェアが必要です。ソフトウェアは、十分に高速でも確定的でもありません。たとえば、何らかのUSBベースのストリームに再フォーマットできるかもしれませんが、とにかくカスタムデジタルロジックが必要になるため、HDMIを直接出力することもできます。

これらすべてを実装するには、デジタルロジックが実際に唯一の実行可能なソリューションです。また、デジタルロジックを実行している場合、FPGAが唯一の実現可能なソリューションです。個別の7400ロジックとASICには速すぎて複雑すぎるため、ASICは数桁高価です。

もう1つの必須コンポーネントは、ケーブルを介して送信されるパラレルシリアルデータストリームを生成するための実際の高速シリアライザーと差動ドライバーです。汎用CPUから1秒あたり1ギガビット程度のシリアルデータをビットバンすることはできません。これには専用のハードウェアが必要です。raspberry piにはこれを行うオンボードGPUがありますが、文書化されていることは言うまでもなく、GPUができることに関しては制限されています。ほとんどのFPGAには、少なくとも、低解像度ビデオをサポートするのに十分な差動ドライバーとDDRフリップフロップが含まれています。また、フルHDストリームを生成するために必要なシリアライザー(ザイリンクスOSERDESブロック)も含むFPGAがかなりあります。シリアルストリームが「ベースバンド」ではないことを忘れないでください 実際のデータはフレーミング情報とともに逐語的に送信される通常のシリアルポートのように、データは実際にTMDS(遷移最小差動信号)でエンコードされ、特定の電気的特性を信号に与えます。これを実装するには、実際の高速シリアライザーに加えて、少しのロジックが必要です。これはすべて、ASICまたはFPGAのいずれかの純粋なデジタルロジック(エンコードはとにかく-シリアライザーはほぼアナログ、または少なくとも混合信号)で行うのは比較的簡単です。

実際には、システムのどの部分をソフトウェアで実装でき、どの部分がハードウェアを必要とするか、市販の専用チップ、FPGA、カスタムのいずれかの形で把握することは、デジタル/組み込みシステム全体の設計プロセスの非常に重要な部分ですASIC、ハードIPまたはハードIP(HDL、ネットリスト、GDSII)など。この場合は明確です。ビデオ信号の生成には、汎用CPUと組み合わせたGPU、統合ハードまたはソフトCPUコアまたは外部CPUとのペア、またはより特殊なもの。

編集:fpga4funサイトとneo geoビデオプロジェクトの両方がフルHDではなく640x480で実行されることに気付きました。ただし、操作が非常に簡単になりますが、実際にはこれは行われません。最小ピクセルクロックは25 MHzで、ビットクロックは250 MHzです。つまり、FPGAはHDMIの送信にシリアライザーを実際に必要とせず、DDRフリップフロップのみを必要とします。ただし、これでもビデオデータの読み取りの問題は軽減されません。ハードウェアの支援なしでラズベリーパイでそれをしたい場合は、25 MHzでGPIOから連続的に読み取る必要があります。これは、175命令ごとに1回読み取られます。可能性の領域に入りますが、その作業を行う唯一の方法は、ハンドコーディングされたアセンブリを使用したベアメタル(Linuxなし)上です。


2
7400ロジックに言及したので、ディスクリートロジックでHDMI信号を生成できるかどうか疑問に思います。fpga4funサイトには、ビットレート250 Mbit / secまたは125 MHz DDRの25 MHz HDMIクロックを使用した640x480ビデオの例があります。ディスクリートロジックチップで実行できるほど高くはありません。誰かにとって興味深いプロジェクトになるかもしれません。
alex.forencich

1ピクセルあたり11命令-その数をどのように計算しましたか?クロックティックごとに1つの命令を想定していますか?
グロノスタジ

700 MHz / 62 Mpps = 11.3。シングルコアCPUのクロックサイクルごとに1 CPUのボールパークの仮定。
alex.forencich

そして、私が言及しなかったと仮定する他の仮定は、入力ビデオ信号がハードウェアの支援なしでGPIOピンにビットバンギングされるため、そのための命令は何らかのタイミングで正しいタイミングでインターリーブされなければならないということです。
alex.forencich

15
TL; DR:ハードウェアで実行する必要があります。ソフトウェアが遅すぎる。
JS。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.