先日このビデオを見て、どうやってGPUのようなものを設計するかについて考えさせられました。どこから始めますか?私はそれらがどのように機能するかについて読むことにもっと興味があって、TTLからそれを作るのではない(まだとにかく)。
これは「プログラミング言語をどのように作成するのか」という質問のように聞こえますが、どこから始めればよいかわからないので、出発点は何でもいいでしょう。
先日このビデオを見て、どうやってGPUのようなものを設計するかについて考えさせられました。どこから始めますか?私はそれらがどのように機能するかについて読むことにもっと興味があって、TTLからそれを作るのではない(まだとにかく)。
これは「プログラミング言語をどのように作成するのか」という質問のように聞こえますが、どこから始めればよいかわからないので、出発点は何でもいいでしょう。
回答:
それは、理科のクラスのコラージュ最終試験に行って、これを質問として持っているようなものです。宇宙を説明してください。簡潔かつ簡潔にします。実用的な方法でその質問に答えることはできません。そのため、別の質問に答えます。
GPUを設計する前に知っておくべきことは何ですか?
大まかな年代順に、次のとおりです。
また、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開発ボードも見つけることができます。
Racing the Beamは、Atari VCSの設計と操作を詳細に説明しています。テレビインターフェースアダプターの徹底的な取り扱いがあります。
TIAは、最も単純で実用的なGPUに関するものです。
小さいながらも完全に機能するシステムを理解することは、新しい主題を学ぶ良い方法です。
画面に何かを表示したいだけの場合は、 配線を本当に楽しんで 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のテキストディスプレイから始めます。
コンピュータアーキテクチャの基礎から始め、同時に、VHDLまたは他の記述言語を使用して基本的なASIC設計を始める必要があります。
コンピューターアーキテクチャの基本を学習したら、コンピューターグラフィックスに挑戦することをお勧めします。おそらく、いくつかの単純なOpenGLプロジェクトから始めます。ここでの主なポイントは、グラフィックスパイプラインレンダリングアーキテクチャのアイデアを得ることです。
次のステップは、このレンダリングパイプラインをソフトウェアではなく専用ハードウェアで実現する方法を考えることです。
GPUを実際に構築してコンピューターに接続するという点では、これをマニアの予算で実行するのは現実的ではないと思いますが、組み込みのARM-linuxプラットフォーム(これは、システムバス)およびFPGA(この場合、FPGAはVHDLで記述されたGPU)を、すべてをまとめたプロジェクトとして低解像度のVGAディスプレイに出力します。これにはドライバの作成も必要になります。あなたがそれを行うことができるならば、それは履歴書でキラーになるでしょう。
AMDとNVidiaのGPUの高レベルのブロック図を見てください。おそらく、オープンソースのグラフィックハードウェアをオープンソースドライバーで設計しているオープングラフィックの人々からのかなりの情報を見つけるでしょう。
次に、必要なものを確認する必要があります。
GPU機能を使用したプログラミングをまだ行っていない場合は、それも知っておくとよいでしょう。
レオンもそれを釘付けにしたと思います。これを行う場合は、Verilogを使用します。
投稿したビデオのように、コンサイトビデオのみが必要な場合。そこには多くの例があります。一体、WozのApple IIの実装を見てください。:)
あなたは、GPU(3Dの意味ですべてをシェーディングすること)をビデオジェネレーターほど作成しようとしていないように思えます。多くのFPGA評価ボードには、VGAまたはその他のタイプのモニター用のコネクターがあり、そのモニターに物を表示するためのメーカーまたはその他のユーザーのサンプルプロジェクトがあります。LCDを組み込んだボードもいくつかありますが、それらは300ドル以上のクラスになる傾向がありますが、標準的なモニターを駆動できる基本的なボードは60〜120ドルです。
ほとんどのFGPAには、小さなディスプレイ以上のことを行うのに十分な内部メモリがありませんが、多くのボードには、より大きな容量の外部メモリがあります。それらの多くはアナログVGAモニターをデジタルで駆動します。つまり、RGとBはフルオンまたはフルオフですが、いくつかは2つのレベルを提供し、デジタルモニターインターフェイス用のビデオDACまたはコネクターを備えたものをおそらく見つけることができます。