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.
Jawaban:
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:
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
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 .
sumber
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.
sumber
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.
sumber
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.
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. :)
sumber
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.
sumber