Bagaimana cara GPU / CPU berkomunikasi dengan output tampilan standar? (HDMI / DVI / dll) [ditutup]

14

Saya tertarik pada bagaimana cpu / gpu menyajikan (ke peralatan apa pun yang dilakukannya) data video setelah diproses.

Saya telah diberitahu bahwa video diproses oleh CPU / GPU dan kemudian dikirim ke sirkuit terintegrasi dengan serial kecepatan tinggi yang mengubah sinyal serial menjadi output tampilan yang sesuai, tetapi saya tidak dapat mengonfirmasi ini dengan mencari online.

Saya tertarik dengan pensinyalan dan tidak dapat mencari protokol / dll karena saya tidak tahu apa yang saya cari. Jadi apakah CPU / GPU berinteraksi dengan output video secara langsung (saya dapat menemukan protokol-protokol ini dengan mudah) atau adakah "perantara" yang bisa dikatakan dan jika demikian apa, jenis chip / dll?

Craig Lafferty
sumber
Anda dapat membeli RAMDAC video sebagai bagian berbeda: ti.com.cn/cn/lit/ds/symlink/tvp3703.pdf meskipun itu tidak berarti akan terpisah pada kartu grafis Anda.
pjc50

Jawaban:

18

Gambar yang ditampilkan pada monitor disimpan dalam RAM video komputer Anda pada kartu grafis dalam struktur yang disebut framebuffer. Data dalam framebuffer umumnya warna RGB 24 bit, sehingga akan ada satu byte untuk merah, satu untuk hijau, dan satu untuk biru untuk setiap piksel pada layar, mungkin dengan beberapa byte bantalan tambahan. Data dalam RAM video dapat dihasilkan oleh GPU atau oleh CPU. RAM video terus dibaca oleh komponen DMA khusus pada kartu video dan dikirim ke monitor. Output sinyal ke monitor adalah sinyal analog (VGA) di mana komponen warna dikirim melalui konverter digital ke analog sebelum meninggalkan kartu, atau sinyal digital dalam kasus DVI, HDMI, atau DisplayPort. Perangkat keras yang bertanggung jawab untuk ini juga menghasilkan sinyal sinkronisasi horizontal dan vertikal serta semua penundaan yang sesuai sehingga data gambar hanya dikirim ke monitor ketika sudah siap untuk itu. Dalam DVI dan HDMI, aliran informasi warna piksel dikodekan dan diserialisasi dan dikirim melalui TMDS (transisi meminimalkan sinyal diferensial) ke monitor. DisplayPort menggunakan pengodean 8b / 10b. Pengkodean melayani beberapa tujuan. Pertama, TMDS meminimalkan transisi sinyal untuk mengurangi emisi EMI. Kedua, baik TMDS dan 8b / 10b adalah protokol seimbang DC sehingga kapasitor pemblokiran DC dapat digunakan untuk menghilangkan masalah dengan ground loop. Ketiga, 8b / 10b memastikan kepadatan transisi yang cukup tinggi untuk memungkinkan pemulihan jam pada penerima karena DisplayPort tidak mendistribusikan jam terpisah. aliran informasi warna piksel dikodekan dan diserialisasi dan dikirim melalui TMDS (transisi pensinyalan diferensial yang diperkecil) ke monitor. DisplayPort menggunakan pengodean 8b / 10b. Pengkodean melayani beberapa tujuan. Pertama, TMDS meminimalkan transisi sinyal untuk mengurangi emisi EMI. Kedua, baik TMDS dan 8b / 10b adalah protokol seimbang DC sehingga kapasitor pemblokiran DC dapat digunakan untuk menghilangkan masalah dengan ground loop. Ketiga, 8b / 10b memastikan kepadatan transisi yang cukup tinggi untuk memungkinkan pemulihan jam pada penerima karena DisplayPort tidak mendistribusikan jam terpisah. aliran informasi warna piksel dikodekan dan diserialisasi dan dikirim melalui TMDS (transisi pensinyalan diferensial yang diperkecil) ke monitor. DisplayPort menggunakan pengodean 8b / 10b. Pengkodean melayani beberapa tujuan. Pertama, TMDS meminimalkan transisi sinyal untuk mengurangi emisi EMI. Kedua, baik TMDS dan 8b / 10b adalah protokol seimbang DC sehingga kapasitor pemblokiran DC dapat digunakan untuk menghilangkan masalah dengan ground loop. Ketiga, 8b / 10b memastikan kepadatan transisi yang cukup tinggi untuk memungkinkan pemulihan jam pada penerima karena DisplayPort tidak mendistribusikan jam terpisah.

Juga, untuk HDMI dan DisplayPort, data audio juga dikirim ke kartu grafis untuk dikirim ke monitor. Data ini dimasukkan ke dalam jeda dalam aliran data antara bingkai video. Dalam hal ini, kartu video akan menampilkan dirinya sebagai wastafel audio ke sistem operasi, dan data audio akan ditransfer melalui DMA ke kartu untuk dimasukkan dengan data video.

Sekarang, Anda mungkin menyadari bahwa untuk tampilan 1920x1080 dengan 4 byte per piksel, Anda hanya perlu sekitar 8 MB untuk menyimpan gambar, tetapi RAM video di komputer Anda mungkin berkali-kali lipat dari ukuran itu. Ini karena RAM video tidak hanya dimaksudkan untuk menyimpan framebuffer. RAM video terhubung langsung ke GPU, prosesor tujuan khusus yang dirancang untuk rendering 3D dan decoding video yang efisien. GPU menggunakan akses langsung ke RAM video untuk mempercepat proses rendering. Faktanya, memasukkan data dari memori utama ke dalam memori video adalah sedikit hambatan karena bus PCI yang menghubungkan kartu video ke CPU dan memori utama secara signifikan lebih lambat daripada koneksi antara GPU dan RAM video.

alex.forencich
sumber
7

Berbagai keluaran tampilan modern pada dasarnya adalah bitstream serial. Bitrate terlalu tinggi untuk prosesor (atau jika bisa terus-menerus akan mengklaim terlalu banyak waktu pemrosesan). Sepotong memori disisihkan untuk mengandung potongan-potongan gambar. Sepotong perangkat keras khusus membaca isi memori dan mengalirkannya. Bagian ini mirip dengan pengontrol DMA dan sebenarnya cukup sederhana. Ini hanya sebagian kecil dari GPU modern, yang sebagian besar menyangkut dirinya dengan menciptakan gambar dalam memori dari perintah GPU tingkat yang lebih tinggi.

Memori yang berisi gambar video dapat menjadi bagian dari memori utama (murah) atau memori khusus yang dapat diakses secara bersamaan oleh 'DMA' dan CPU dan / atau GPU. 'DMA' harus dikonfigurasi dengan berbagai parameter, misalnya lebar dan tinggi piksel, kedalaman warna, lokasi awal dalam memori, dll.

Pada komputer modern, GPU adalah prosesor (sangat khusus) yang menyaingi kecepatan CPU utama (dan melampauinya di wilayahnya sendiri). Itu hal-hal seperti menghasilkan gambar psuido-3D dari sekelompok objek 3D dengan tekstur dan sumber cahaya. Ini semua bisa dilakukan di dalam memori video, oleh GPU. CPU hanya mengirimkan objek, tekstur, dan sumber cahaya.

Membaca data video dari memori dan memindahkannya adalah proses yang agak sederhana, tetapi harus dilakukan dengan cukup cepat, dan sepanjang waktu. Karenanya tugas ini sangat cocok untuk perangkat keras khusus, dan tidak cocok untuk CPU. AFAIK komputer terakhir yang melibatkan CPU dalam menghasilkan sinyal video adalah ZX80 / 81 dan Spectrum. Pada mereka CPU hanya bisa melakukan pekerjaannya sendiri selama waktu retrace (vertikal?).

Wouter van Ooijen
sumber
1
Ini informasi yang bagus. Jadi pengontrol DMA (atau perangkat keras serupa) mengakses memori video secara langsung? Dan pada sistem dengan grafik terintegrasi yang menggunakan sistem RAM itu mengakses sistem RAM secara langsung? Maaf atas kesederhanaan pertanyaan saya. Saya seorang DIYer besar jadi saya cenderung untuk melompat ke hal-hal tingkat yang lebih tinggi dengan pengetahuan tingkat yang lebih rendah. :)
Craig Lafferty
Dan untuk menindaklanjuti, bagaimana controller tahu dari mana alamat dalam RAM untuk "mencuri" frame dari? Frame / bitmap sedang diganti dengan sangat cepat dan bergerak di sekitar saya anggap.
Craig Lafferty
Komentar terakhir Anda benar: itu disimpan dalam framebuffer , dan untuk video analog diteruskan ke RAMDAC . Alamat framebuffer dapat diperbaiki atau ditentukan dalam register kontrol. Ada berbagai trik yang melibatkan bertukar framebuffer antara atau selama bingkai, atau pada beberapa sistem (Amiga) mengubah mode video setengah jalan ke bawah bingkai.
pjc50
Mengapa prosesor akan melambat? Bukankah sudah harus memproses video agar controller dapat menggunakannya? Saya akan menebak lagi di sini dan mengatakan bahwa pengontrol membaca RAM berulang-ulang dan CPU / GPU hanya memperbarui RAM dengan informasi tampilan baru ketika sesuatu telah berubah, jadi misalnya GPU akan menempatkan layar saya saat ini ke dalam RAM dan ketika saya memindahkan kursor saya itu memperbarui piksel yang telah diubah. Sementara itu, pengontrol membaca RAM 60 kali atau lebih satu detik (jenis standar FR kurasa).
Craig Lafferty
1
Video RAM tidak hanya digunakan untuk menyimpan gambar tampilan, tetapi juga digunakan secara internal oleh GPU untuk menyimpan data adegan yang dirender ke dalam framebuffer. Ini bisa memakan banyak ruang karena GPU membutuhkan akses ke detail 3D meshes dari objek beserta semua data tekstur untuk permukaannya.
alex.forencich