Di mana untuk memulai ketika mempertimbangkan untuk membuat GPU?

8

Saya melihat video ini beberapa hari yang lalu dan itu membuat saya berpikir tentang bagaimana cara mendesain dan mendesain sesuatu seperti GPU. Di mana Anda akan mulai? Saya lebih tertarik membaca tentang bagaimana mereka bekerja dan tidak membuat satu dari TTL (toh).

Saya tahu ini terdengar seperti pertanyaan 'bagaimana Anda membuat bahasa pemrograman' tetapi setiap titik awal akan bagus karena saya tidak tahu harus mulai dari mana.

Dekan
sumber
3
Apakah Anda tertarik dengan "grafik 3D kecepatan tinggi", atau "cara mengendarai CRT / LCD"
Toby Jaffey
@Joby atm hanya menampilkan sesuatu di layar. Kuadrat warna akan menyenangkan.
Dean
3
Adakah yang bisa menjelaskan mengapa saya mendapat suara turun? Jadi saya bisa menyelesaikan masalah dengan pertanyaan itu.
Dekan
1
Kesulitan yang saya lihat dengan pertanyaan ini adalah bahwa ada BANYAK tanah antara hanya menghasilkan tampilan karakter monokrom 80x25, apa yang pernah disebut generator tampilan video, dan apa yang dimaksud dengan 'GPU'. Petunjuk bahwa Anda mungkin ingin membuat 'keluar dari TTL' membuat Anda lebih dekat dengan ujung generator tampilan 80x25 lama.
JustJeff
@JustJeff, Ok saya tidak tahu mereka dipanggil apa lagi, mengapa mereka sangat berbeda jika mereka melakukan pekerjaan yang sama?
Dean

Jawaban:

16

Itu agak seperti pergi ke ujian akhir kolase untuk kelas sains dan menjadikan ini sebagai pertanyaan Anda: Jelaskan alam semesta. Bersikap singkat, namun singkat. Tidak mungkin menjawab itu dengan cara praktis - jadi saya akan menjawab pertanyaan yang berbeda.

Apa saja hal-hal yang perlu saya ketahui sebelum mencoba merancang GPU?

Dalam urutan kronologis yang kasar, mereka adalah:

  1. Baik VHDL atau Verilog.
  2. FPGA (area yang berguna untuk bermain dengan menulis logika digital).
  3. Hal-hal jalur data dasar, seperti FIFO.
  4. Antarmuka bus, seperti antarmuka PCIe dan DDR2 / 3
  5. Implementasi biner dari fungsi matematika, termasuk floating point, dll.
  6. Desain CPU.
  7. Standar antarmuka video.
  8. Hal analog kecepatan tinggi (sisi analog digital kecepatan tinggi)
  9. PLL dan hal-hal pencatatan jam kerja semi-canggih lainnya.
  10. Desain PCB sirkuit kecepatan tinggi.
  11. Tegangan rendah, desain konverter DC / DC arus tinggi.
  12. Banyak dan banyak hal perangkat lunak.
  13. Dan akhirnya, ASIC atau desain tipe chip khusus lainnya.

Saya juga akan berani mengatakan bahwa Anda tidak akan membuat hal semacam ini dari chip logika TTL. Saya ragu bahwa Anda bisa mendapatkan antarmuka memori DDR2 / 3 yang masuk akal bekerja dengan chip TTL normal. Menggunakan FPGA besar akan jauh lebih mudah (tetapi tidak mudah).

Naik ke langkah 6 mungkin akan "cukup baik untuk memuaskan dahaga intelektual Anda". Itu juga bisa dilakukan dalam jumlah waktu yang wajar - sekitar satu tahun - untuk ditetapkan sebagai tujuan jangka pendek.

EDIT: Jika semua yang ingin Anda lakukan adalah mengeluarkan sinyal video maka itu relatif mudah. Ini, pada dasarnya, adalah sepotong memori yang digeser ke layar pada 60-ish Hz. Iblis ada dalam perinciannya, tetapi inilah garis besar kasar tentang bagaimana melakukan ini:

Mulailah dengan beberapa RAM port ganda. Tidak harus benar ram dual port, hanya beberapa RAM yang dapat dibaca / ditulis CPU dan sirkuit video Anda dapat membaca. Ukuran dan kecepatan RAM ini akan tergantung pada jenis tampilan yang Anda kendarai. Saya pribadi akan menggunakan DDR2 SDRAM yang terhubung ke antarmuka memori Xilinx Spartan-6 FPGA. Inti "memory interface generator" (MIG) membuatnya mudah untuk mengubahnya menjadi RAM dual-port.

Selanjutnya, desain sirkuit yang akan mengontrol bagaimana RAM ini dibaca dan memuntahkan data ini keluar dari bus sederhana. Biasanya Anda hanya membaca RAM secara berurutan. "Bus sederhana" sebenarnya hanya itu. Ada beberapa bit dengan nilai pixel di atasnya-- dan hanya itu. Sirkuit ini perlu melakukan dua hal lagi: harus kembali ke awal RAM setiap frame video dan harus "menjeda" output selama periode retrace horizontal / vertikal.

Ketiga: buat sirkuit yang akan mengeluarkan sinyal kontrol video (HSync, Vsync, dll.) Serta beri tahu sirkuit sebelumnya kapan harus jeda dan restart. Sirkuit ini sebenarnya cukup mudah dilakukan. Menemukan standar video yang tepat lebih sulit, ya.

Dan Akhirnya: Hubungkan sinyal kontrol dan bus data piksel video ke "sesuatu". Itu bisa berupa LCD warna kecil. Bisa juga ke DAC video untuk menghasilkan sinyal yang kompatibel dengan VGA. Ada NTSC / PAL encoders yang akan menerima sinyal ini. Dll

Jika resolusinya sangat kecil, Anda mungkin bisa menggunakan RAM internal FPGA alih-alih DDR2 SDRAM eksternal. Saya harus memperingatkan Anda bahwa jika DDR2 SDRAM digunakan maka Anda mungkin akan memerlukan FIFO dan beberapa hal lainnya - tapi itu juga tidak terlalu sulit. Tetapi dengan DDR2 SDRAM Anda dapat mendukung tampilan resolusi cukup tinggi. Anda juga dapat menemukan papan pengembangan FPGA dengan VGA DAC terintegrasi dan bentuk-bentuk lain dari output video.


sumber
Wah bukan tugas pendek kalau begitu. Saya mengerti tidak ada jawaban yang ringkas. Tetapi Anda telah memberi saya titik awal yang baik dan saya harus melakukan ini di waktu luang saya yang sangat terbatas. Namun harus menjadi pengalaman yang menarik.
Dekan
@Dean Hmmm ... Ada TIGA hal yang berbeda di sini: CPU, GPU, dan sesuatu untuk mengeluarkan sinyal video. Sangat mudah untuk membuat sesuatu untuk mengeluarkan sinyal video. GPU lebih seperti CPU yang dirancang untuk melakukan pemrosesan terkait video / grafik: grafis 3-D, akselerasi grafis 2-D, dll. Jika Anda hanya ingin sesuatu memuntahkan sinyal video maka Anda sudah siap. Jika Anda ingin grafis 3-D atau bahkan semi-canggih 2-D maka Anda harus melihat daftar saya.
1
Bagaimana mudah meludahkan sinyal video? Saya pikir ini akan menjadi langkah pertama yang lebih baik.
Dean
@Dean Saya mengedit jawaban saya untuk memasukkan hal-hal tentang cara mengeluarkan sinyal video.
1
Saya memang pernah menulis buku tentang grafik komputer (ISBN 0-471-13040-0), tetapi sangat perkenalan. Kembali pada 1990-an ketika ATI hanya memiliki chip MACH64 mereka dan ingin masuk ke 3D mereka mempekerjakan saya sebagai konsultan yang mengajarkan mereka beberapa konsep, membuat mereka pergi, dan membantu dengan arsitektur. Hasilnya adalah chip RAGE pertama. Saya adalah seorang pria grafis saat itu. Periksa paten AS 5097427 jika Anda tidak mempercayai saya. Namun, saya pikir paten interpolasi kuadrat (US $ 510.948) lebih penting tetapi kurang mencolok. Anda mungkin mengenali beberapa nama lain pada itu ;-)
Olin Lathrop
8

Racing the Beam adalah tampilan terperinci pada desain dan pengoperasian Atari VCS. Ini memiliki perawatan menyeluruh dari Adaptor Antarmuka Televisi.

TIA adalah GPU yang paling sederhana, praktis.

Memahami sistem kerja yang kecil tapi lengkap bisa menjadi cara yang baik untuk mempelajari subjek baru.

Skema lengkap tersedia, seperti manual teknis .

Toby Jaffey
sumber
Atari 2600 aturan! Sebagian besar sistem permainan menggunakan perangkat keras untuk menghasilkan tampilan, tetapi 2600 melakukan semuanya dengan sihir. Bandingkan sesuatu seperti Combat atau bahkan Asteroid dengan sesuatu seperti Toyshop Trouble (Asteroids dan Toyshop Trouble keduanya 8K). Combat menunjukkan dua objek warna tunggal dengan resolusi 2 garis; Toyshop Trouble menunjukkan 16 objek dengan resolusi satu garis dan pewarnaan per garis (dan tanpa kedipan). Tidak ada perangkat keras tambahan untuk Masalah Toyshop di luar switcher bank untuk memungkinkan 8k kode. Hanya beberapa pengkodean yang cerdas dan beberapa sihir.
supercat
BTW, 2600 pemrograman mungkin tidak jelas, tetapi satu desain video-overlay berbasis PSOC yang saya lakukan untuk pelanggan merasa agak 2600-ish. Konfigurasikan perangkat keras on-chip untuk menghasilkan beberapa pengaturan waktu, dan gunakan kode untuk mengumpankan data ke budak SPI sehingga dapat dihapus sebagai piksel.
supercat
Sulit
5

Jika Anda hanya ingin meletakkan beberapa barang di layar, dan berpikir Anda mungkin benar- benar menikmati kabel, Anda dapat membidik sistem grafis karakter awal 1980-ish. Jika Anda dapat mencapai waktu untuk RS-170A, Anda bahkan mungkin dapat mendorong sinyal ke input AV cadangan pada televisi plasma 50 ", dan menjadi retro dengan cara besar.

Beberapa sistem awal menggunakan CPU 8-bit mereka untuk secara langsung menghasilkan tampilan, contohnya adalah 6507 di Atari 2600 dan Z-80 di Timex Sinclair ZX-81. Anda bahkan dapat melakukan hal yang sama dengan mikrokontroler modern. Keuntungannya dengan cara ini adalah perangkat kerasnya sederhana, tetapi perangkat lunak umumnya harus assembler, dan sangat tepat, dan hasilnya akan benar-benar mengecewakan. Bisa dibilang 2600 menggunakan perangkat keras tambahan, tetapi TIA tidak memiliki banyak FIFO, dan 6502 (well, 6507, benar-benar) harus membuang byte ke sana secara real time. Dalam pendekatan ini, tidak ada mode video standar; setiap aplikasi yang menggunakan video harus dikombinasikan secara intim dengan kebutuhan agar piksel tetap mengalir.

Jika Anda benar-benar ingin membangun sesuatu dari TTL, tingkat kerumitan berikutnya adalah pergi untuk tampilan teks berbasis karakter-ROM. Ini memungkinkan Anda untuk menempatkan, misalnya, 256 karakter dalam salah satu dari misalnya 40 kolom dan 25 posisi baris. Ada beberapa cara untuk melakukan ini.

Satu cara - lakukan apa yang Model TRS80 saya lakukan. Sekelompok 74161 counter dengan bermacam-macam gerbang menghasilkan alamat video; tiga 74157 terdiri dari 12 bit alamat CPU dengan alamat video, untuk memberi makan alamat ke RAM statis 2K. Data RAM disangga kembali ke CPU, tetapi diumpankan tidak buffered sebagai alamat ke set ROM karakter. Tidak ada arbitrase bus; jika CPU menginginkan RAM video, sistem video dinyalakan, menghasilkan efek 'salju'. Alamat video muxed dikombinasikan dengan beberapa baris dari bagian penghitung untuk melengkapi alamat rendah; output karakter ROM dibuang ke register geser 74166. Semuanya berlari divisi dari kristal 14,31818MHz. Dalam pendekatan ini, Anda akan memiliki tepat satu mode video yang sepenuhnya diimplementasikan dalam perangkat keras, seperti 40x25 atau 64x16, dll.,

Cara lain - gali chip CRTC yang disebut seperti 6845. Ini menggabungkan sebagian besar logika counter dan lem, dan memberikan prosesor dengan antarmuka register-kontrol sehingga Anda dapat memprogram ulang sebagian waktunya. Sistem seperti ini dapat dibuat agak lebih fleksibel, misalnya, Anda mungkin mendapatkan 40x25 dan 80x25 dari perangkat keras yang sama, di bawah kendali register. Jika Anda pandai tentang frekuensi jam, Anda mungkin dapat membiarkan CPU Anda memiliki akses gratis ke RAM video selama satu setengah jam, dan akses generator alamat video selama setengah jam lainnya, sehingga meniadakan perlunya arbitrasi bus dan menghilangkan efek salju.

Namun, jika Anda ingin menggunakan mode grafis nyata, Anda akan segera menemukan bahwa menggulirkan sendiri masalah Anda. Apple 2 asli mengelolanya, tetapi sistem itu memiliki sesuatu seperti 110 MSI TTL chip di dalamnya, dan meskipun demikian ada beberapa hal lucu untuk ditangani, seperti pemetaan non-linear dari buffer video ke layar, dan palet warna yang sangat terbatas , untuk menyebutkan dua. Dan Woz secara umum diakui memiliki petunjuk. Pada saat '2e' datang, Apple sudah memasukkan sistem video ke dalam chip khusus. C-64, sekitar waktu yang sama, berutang kemampuan grafis untuk chip kustom.

Jadi .. saya akan mengatakan di sana tentang dua cara untuk melakukannya. Salah satu cara - mendapatkan ember dari TTL tua dan aspire untuk 80x25 tampilan teks satu warna; sebaliknya - dapatkan papan evaluasi FPGA yang bagus, lakukan semuanya dalam VHDL, dan mulai dengan tampilan teks 80x25.

JustJeff
sumber
1

Anda perlu memulai dengan beberapa dasar arsitektur komputer, dan secara paralel, memulai dengan desain ASIC dasar menggunakan VHDL atau bahasa deskripsi lainnya.

Setelah Anda mempelajari dasar-dasar arsitektur komputer, saya akan merekomendasikan bertualang ke grafis komputer, mungkin dimulai dengan beberapa proyek OpenGL sederhana. Hal utama yang dapat diambil di sini adalah mendapatkan gagasan tentang arsitektur render pipa grafis .

Langkah selanjutnya adalah memikirkan cara merender pipa ini dapat diselesaikan dengan perangkat keras khusus daripada dalam perangkat lunak.

Dalam hal benar-benar membangun GPU dan menghubungkannya ke komputer Anda, saya tidak berpikir ini layak dilakukan dengan anggaran penggemar, tapi mungkin ada sesuatu yang sangat mendasar yang dapat Anda coba dengan platform ARM-linux tertanam (yang memperlihatkan bus sistem) dan FPGA (FPGA dalam hal ini adalah GPU Anda yang ditulis dalam VHDL) keluaran ke tampilan VGA resolusi rendah sebagai proyek tie-it-all-together. Ini akan memerlukan driver penulisan juga. Jika Anda bisa melakukannya, itu akan menjadi pembunuh di resume.

Jon L
sumber
1

Lihatlah diagram blok GPU tingkat tinggi dari AMD dan NVidia. Anda mungkin akan menemukan sedikit info dari orang-orang opengraphics, yang merancang perangkat keras grafis yang bersifat open source, dengan driver open source.

Maka Anda perlu melihat apa yang Anda inginkan.

  • Output, HDMI, DVI atau VGA?
  • Transformasi Vertex?
  • Tekstur?
  • Pixel Shading?
  • Kliping segitiga dan rasterisasi?
  • Ada Tekstur?
  • Operasi Raster?

Jika Anda belum melakukan pemrograman menggunakan fitur GPU, itu mungkin juga hal yang baik untuk diketahui.

Saya pikir Leon juga memaku. Saya akan menggunakan Verilog jika saya melakukan ini.

Jika Anda hanya menginginkan video situs, seperti dalam video yang Anda posting. Ada banyak contoh di luar sana. Heck, lihat implementasi Woz dari Apple II. :)

Joe
sumber
1
Apakah @Leon meninggalkan komentar? Jika demikian, saya tidak dapat melihatnya.
Dekan
Saya menghapusnya. Saya menyarankan menggunakan FPGA untuk mengimplementasikan CPU sederhana. Saya melakukannya beberapa tahun yang lalu dengan desain dari sebuah buku, yang ditulis dalam VHDL, yang saya modifikasi untuk perangkat keras saya.
Leon Heller
Ahh ok kalau begitu mengapa saya bisa melihatnya.
Dean
1

Kedengarannya seperti Anda tidak ingin membuat GPU (dalam arti 3d dan menaungi semua itu) sebanyak generator video. Banyak papan eval FPGA memiliki konektor untuk VGA atau monitor jenis lain dan proyek sampel baik dari pabrikan atau pengguna lain untuk menampilkan sesuatu pada monitor itu. Ada juga beberapa papan dengan built in LCD tetapi mereka cenderung berada di kelas $ 300 dan lebih tinggi, sedangkan yang dasar yang dapat mendorong monitor standar harganya $ 60-120.

Sebagian besar FGPA tidak memiliki memori internal yang cukup untuk melakukan lebih dari layar kecil, tetapi kemudian banyak papan memiliki memori eksternal dengan kapasitas lebih. Banyak dari mereka menggerakkan monitor VGA analog secara digital, yaitu, RG dan B baik penuh atau mati, meskipun beberapa memberi Anda dua tingkat dan Anda mungkin dapat menemukan satu dengan DAC video atau konektor untuk antarmuka monitor digital.

Chris Stratton
sumber