GPUの作成を検討する場合、どこから始めればよいですか?


8

先日このビデオ見て、どうやってGPUのようなものを設計するかについて考えさせられました。どこから始めますか?私はそれらがどのように機能するかについて読むことにもっと興味があって、TTLからそれを作るのではない(まだとにかく)。

これは「プログラミング言語をどのように作成するのか」という質問のように聞こえますが、どこから始めればよいかわからないので、出発点は何でもいいでしょう。


3
「高速3Dグラフィックス」、または「CRT / LCDの駆動方法」に興味がありますか
Toby Jaffey

@Joby atmはディスプレイに何かを表示するだけです。色の正方形がいいでしょう。
ディーン

3
私が反対票を投じた理由を誰かが説明してもらえますか?だから私は質問の問題を解決することができます。
ディーン

1
この質問で私が見る難しさは、モノクロの80x25文字ディスプレイだけを生成すること、かつてはビデオディスプレイジェネレーターと呼ばれていたものと、「GPU」が意味するものとの間にかなりの根拠があることです。1つを「TTLから外す」必要があるかもしれないというヒントは、古い80x25ディスプレイジェネレーターの終わりにはるかに近づきます。
JustJeff

@JustJeff、わかりました。他に何と呼ばれていたのかわかりませんでした。同じような仕事をしているのに、なぜそんなに違うのですか。
ディーンディーン

回答:


16

それは、理科のクラスのコラージュ最終試験に行って、これを質問として持っているようなものです。宇宙を説明してください。簡潔かつ簡潔にします。実用的な方法でその質問に答えることはできません。そのため、別の質問に答えます。

GPUを設計する前に知っておくべきことは何ですか?

大まかな年代順に、次のとおりです。

  1. VHDLまたはVerilog。
  2. FPGA(デジタルロジックの記述で遊ぶのに役立つ領域)。
  3. FIFOのような基本的なデータパス関連のもの。
  4. PCIeやDDR2 / 3インターフェースなどのバスインターフェイス
  5. 浮動小数点などの数学関数のバイナリ実装。
  6. CPUデザイン。
  7. ビデオインターフェイス標準。
  8. 高速アナログスタッフ(高速デジタルのアナログ側)
  9. PLLやその他の高度なクロッキング機能。
  10. 高速回路のPCB設計。
  11. 低電圧、高電流のDC / DCコンバーター設計。
  12. たくさんのソフトウェアのもの。
  13. 最後に、ASICまたはその他のカスタムチップタイプの設計。

また、TTLロジックチップからこの種のものを作成することはありません。通常のTTLチップで動作する適切なDDR2 / 3メモリインターフェイスが得られるとは思えません。大きなFPGAを使用する方がはるかに簡単です(ただし、簡単ではありません)。

ステップ6に進むことはおそらく「あなたの知的な喉の渇きを癒すのに十分良い」でしょう。それはまた、短期間の目標として設定するために、妥当な時間内(約1年)で実行できます。

編集: ビデオ信号を吐き出すだけの場合は、比較的簡単です。それは本質的に、60 ish Hzでディスプレイにシフトアウトされるメモリのチャンクです。悪魔は詳細にありますが、これを行う方法の大まかな概要は次のとおりです。

いくつかのデュアルポートRAMから始めます。真のデュアルポートRAMである必要はありません。CPUが読み書きできる、ビデオ回路が読み込める一部のRAMだけです。このRAMのサイズと速度は、駆動しているディスプレイの種類によって異なります。個人的には、ザイリンクスSpartan-6 FPGAのメモリインターフェイスに接続されたDDR2 SDRAMを使用します。「メモリインターフェイスジェネレーター」コア(MIG)により、これを簡単にデュアルポートRAMに変えることができます。

次に、このRAMの読み取り方法を制御し、このデータを単純なバスに出力する回路を設計します。通常は、RAMを順番に読み取るだけです。「シンプルなバス」はまさにそれです。ピクセル値が含まれているいくつかのビットです-それだけです。この回路では、さらに2つのことを行う必要があります。ビデオフレームごとにRAMの先頭に戻る必要があり、水平/垂直帰線期間中に出力を「一時停止」する必要があります。

第3に、ビデオ制御信号(HSync、Vsyncなど)を出力する回路を作成し、一時停止して再起動するタイミングを前の回路に伝えます。これらの回路は実際にはかなり簡単です。適切なビデオ標準を見つけるのは難しいです。

そして最後に:制御信号とビデオピクセルデータバスを「何か」に接続します。それは小さなカラーLCDかもしれません。これは、VGA互換信号を出力するためのビデオDACに対するものです。これらの信号を受け取るNTSC / PALエンコーダがあります。等。

解像度が本当に小さい場合は、外部DDR2 SDRAMの代わりにFPGAの内部RAMを使用することで問題が解決する可能性があります。DDR2 SDRAMを使用する場合は、FIFOやその他のものが必要になることを警告しておきますが、それもそれほど難しくありません。ただし、DDR2 SDRAMを使用すると、かなり高解像度のディスプレイをサポートできます。また、VGA DACやその他の形式のビデオ出力が統合されたFPGA開発ボードも見つけることができます。


すごい短いタスクではありません。簡潔な答えはなかったと思います。しかし、あなたは私に良い出発点を与えてくれました、そして私は非常に限られた余暇にこれをしなければなりません。しかし、興味深い経験になるはずです。
ディーン

@Dean Hmmm ...ここには3つの異なるものがあります:CPU、GPU、そしてビデオ信号を吐き出すもの。ビデオ信号を吐き出すための何かを作るのは簡単です。GPUは、ビデオ/グラフィックス関連の処理(3Dグラフィックス、2Dグラフィックスアクセラレーションなど)を実行するように設計されたCPUに似ています。ビデオ信号を出力したいだけの場合は、これで準備は完了です。3Dグラフィックスまたはさらに高度な2Dが必要な場合は、私のリストを参照する必要があります。

1
ビデオ信号を吐き出すのは簡単ですか?これはより良い第一歩になると思います。
ディーン

@Dean私はビデオ信号を吐き出す方法に関するものを含めるように私の回答を編集しました。

1
コンピュータグラフィックスに関する本を一度書いたことはあります(ISBN 0-471-13040-0)が、それは非常に初歩的なものです。1990年代にATIにMACH64チップしかなく、3Dを使いたいと思っていた頃、コンサルタントとしていくつかのコンセプトを教え、それらを実行し、アーキテクチャを支援するコンサルタントとして私を雇いました。結果は最初のRAGEチップでした。私は当時グラフィックスの人でした。私を信じないなら、米国特許5097427をチェックしてください。ただし、2次補間の特許(US 5109481)の方が重要ですが、派手さは少ないと思います。あなたはそれらの他のいくつかの名前を認識するかもしれません;-)
Olin Lathrop

8

Racing the Beamは、Atari VCSの設計と操作を詳細に説明しています。テレビインターフェースアダプターの徹底的な取り扱いがあります。

TIAは、最も単純で実用的なGPUに関するものです。

小さいながらも完全に機能するシステムを理解することは、新しい主題を学ぶ良い方法です。

技術マニュアルと同様に、完全な回路図が利用可能です。


アタリ2600ルール!ほとんどのゲームシステムはハードウェアを使用して表示を生成しますが、2600はすべて魔法でそれを行います。CombatやAsteroidsのようなものをToyshop Troubleのようなものと比較します(AsteroidsとToyshop Troubleはどちらも8K)。Combatは、2行の解像度で2つの単色オブジェクトを表示します。Toyshop Troubleは、1行の解像度と1行ごとのカラーリング(ちらつきなし)の16個のオブジェクトを示しています。Toyshop Troubleには、8kのコードを許可するバンクスイッチャー以外のハードウェアはありません。ちょうどいくつかの巧妙なコーディングといくつかの魔法。
スーパーキャット2011年

ところで、2600プログラミングはあいまいかもしれませんが、顧客のために私が行ったPSOCベースのビデオオーバーレイデザインの1つは、2600っぽい感じがしました。一部のタイミングを生成するようにオンチップハードウェアを構成し、コードを使用してデータをSPIスレーブに供給して、ピクセルとしてクロックアウトできるようにします。
スーパーキャット2011年

ビームの帰線時間中にすべてのゲームコードを実行しなければならなかったことは信じられないほどです
JustJeff

5

画面に何かを表示したいだけの場合は、 配線を本当に楽しんで 1980年代初頭のキャラクターグラフィックスシステムを目指すことができます。RS-170Aのタイミングを打つことができれば、信号を50インチプラズマテレビの予備のAV入力にプッシュして、レトロに大きく移行できるかもしれません。

初期のシステムの中には、8ビットCPUを使用してディスプレイを直接生成するものもありました。例としては、Atari 2600の6507やTimex Sinclair ZX-81のZ-80などがあります。最新のマイクロコントローラーでも同じようなことができます。この方法の利点は、ハードウェアがシンプルですが、ソフトウェアは一般にアセンブラでなければならず、非常に厳密であり、結果は本当に圧倒的です。間違いなく、2600は追加のハードウェアを使用しましたが、TIAにはFIFOの多くはなく、6502(実際には6507)はリアルタイムでバイトをダンプする必要がありました。このアプローチでは、標準のビデオモードはありません。ビデオを使用するすべてのアプリケーションは、ピクセルの流れを維持するニーズと密接に組み合わせる必要があります。

本当にTTLから何かを構築したい場合、次のレベルの複雑さは、文字ROMベースのテキスト表示に行くことです。これにより、たとえば256文字を40列、25行などの任意の位置に配置できます。これを行うにはいくつかの方法があります。

1つの方法-私がしたTRS80モデルを実行します。さまざまなゲートを持つ74161カウンターのグループがビデオアドレスを生成しました。2つのスタティックRAMにアドレスを供給するために、3つの74157がビデオアドレスとCPUアドレスの12ビットを多重化しました。RAMデータはバッファリングされてCPUに戻されましたが、アドレスとしてバッファリングされずに文字セットROMに送られました。バスの調停はありませんでした。CPUがビデオRAMを必要とする場合、ビデオシステムが踏まれて、「雪」効果が発生しました。多重化されたビデオアドレスは、低いアドレスを丸めるためにカウンターセクションからのいくつかの行と組み合わされました。文字ROM出力が74166シフトレジスタにダンプされました。すべてが14.31818MHz水晶からの分割を実行しました。このアプローチでは、40x25や64x16などのハードウェアに完全に実装された厳密に1つのビデオモードがあります。

別の方法-6845のようないわゆるCRTCチップを掘り下げます。これらはほとんどのカウンターとグルーロジックを組み合わせ、プロセッサに制御レジスタインターフェイスを提供して、タイミングの一部を再プログラムできるようにしました。このようなシステムは、やや柔軟にすることができます。たとえば、レジ​​スタ制御下で、同じハードウェアから40x25と80x25を取得できます。クロック周波数について巧妙になれば、半分のクロックでCPUがビデオRAMに自由にアクセスでき、残りの半分のクロックでビデオアドレスジェネレーターにアクセスできるため、バスアービトレーションが不要になります。雪の影響排除します。

ただし、実際のグラフィックモードを使用したい場合は、自分でロールすることに問題があることがすぐにわかります。オリジナルのApple 2がそれを管理していましたが、そのシステムには110 MSI TTLチップのようなものが含まれていたため、ビデオバッファーのディスプレイへの非線形マッピングや極端に限定されたカラーパレットなど、扱うべきいくつかの面白いことがありました、2つ挙げます。そしてウォズは一般的に手がかりを持っていると認識されています。「2e」が登場する頃には、Appleはすでにビデオシステムをカスタムチップに組み込んでいました。C-64はほぼ同時期に、そのグラフィックス機能をカスタムチップに負っていました。

だから..それを行うには2つの方法があると思います。1つの方法-古いTTLのバケツを取り出して、80x25の1色のテキスト表示を目指します。逆の方法-適切なFPGA評価ボードを入手し、VHDLですべてを行い、80x25のテキストディスプレイから始めます。


1

コンピュータアーキテクチャの基礎から始め、同時に、VHDLまたは他の記述言語を使用して基本的なASIC設計を始める必要があります。

コンピューターアーキテクチャの基本を学習したら、コンピューターグラフィックスに挑戦することをお勧めします。おそらく、いくつかの単純なOpenGLプロジェクトから始めます。ここでの主なポイントは、グラフィックスパイプラインレンダリングアーキテクチャのアイデアを得ることです。

次のステップは、このレンダリングパイプラインをソフトウェアではなく専用ハードウェアで実現する方法を考えることです。

GPUを実際に構築してコンピューターに接続するという点では、これをマニアの予算で実行するのは現実的ではないと思いますが、組み込みのARM-linuxプラットフォーム(これは、システムバス)およびFPGA(この場合、FPGAはVHDLで記述されたGPU)を、すべてをまとめたプロジェクトとして低解像度のVGAディスプレイに出力します。これにはドライバの作成も必要になります。あなたがそれを行うことができるならば、それは履歴書でキラーになるでしょう。


1

AMDとNVidiaのGPUの高レベルのブロック図を見てください。おそらく、オープンソースのグラフィックハードウェアをオープンソースドライバーで設計しているオープングラフィックの人々からのかなりの情報を見つけるでしょう。

次に、必要なものを確認する必要があります。

  • 出力、HDMI、DVIまたはVGA?
  • 頂点変換?
  • テクスチャリング?
  • ピクセルシェーディング?
  • 三角形のクリッピングとラスタライズ?
  • テクスチャリングはありますか?
  • ラスター操作?

GPU機能を使用したプログラミングをまだ行っていない場合は、それも知っておくとよいでしょう。

レオンもそれを釘付けにしたと思います。これを行う場合は、Verilogを使用します。

投稿したビデオのように、コンサイトビデオのみが必要な場合。そこには多くの例があります。一体、WozのApple IIの実装を見てください。:)


1
@Leonはコメントを残しましたか?もしそうなら、私はそれを見ることができません。
Dean

削除しました。FPGAを使用して単純なCPUを実装することを提案しました。私は数年前、VHDLで書かれた本のデザインをハードウェア用に変更しました。
Leon Heller

ああ、わかりました、それで私はそれを見ることができます。
ディーン

1

あなたは、GPU(3Dの意味ですべてをシェーディングすること)をビデオジェネレーターほど作成しようとしていないように思えます。多くのFPGA評価ボードには、VGAまたはその他のタイプのモニター用のコネクターがあり、そのモニターに物を表示するためのメーカーまたはその他のユーザーのサンプルプロジェクトがあります。LCDを組み込んだボードもいくつかありますが、それらは300ドル以上のクラスになる傾向がありますが、標準的なモニターを駆動できる基本的なボードは60〜120ドルです。

ほとんどのFGPAには、小さなディスプレイ以上のことを行うのに十分な内部メモリがありませんが、多くのボードには、より大きな容量の外部メモリがあります。それらの多くはアナログVGAモニターをデジタルで駆動します。つまり、RGとBはフルオンまたはフルオフですが、いくつかは2つのレベルを提供し、デジタルモニターインターフェイス用のビデオDACまたはコネクターを備えたものをおそらく見つけることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.