Como uma GPU / CPU se comunica com uma saída de vídeo padrão? (HDMI / DVI / etc) [fechado]

14

Estou interessado em como o cpu / gpu apresenta (para qualquer equipamento que ele faça) dados de vídeo depois de processados.

Foi-me dito que o vídeo é processado pela CPU / GPU e depois enviado para um circuito integrado por serial de alta velocidade que converte o sinal serial em uma saída de vídeo apropriada, mas não posso confirmar isso pesquisando online.

Estou interessado na sinalização e não posso procurar protocolos / etc porque não sei o que estou procurando. Então, a CPU / GPU interage diretamente com as saídas de vídeo (eu posso encontrar esses protocolos facilmente) ou existe um "intermediário", por assim dizer, e se sim, qual é o tipo de chip / etc?

Craig Lafferty
fonte
Você pode comprar RAMDACs de vídeo como partes distintas: ti.com.cn/cn/lit/ds/symlink/tvp3703.pdf, embora isso não signifique que será separado em sua placa gráfica.
Pjc50

Respostas:

18

A imagem exibida no monitor é armazenada na RAM de vídeo do computador na placa de vídeo em uma estrutura chamada buffer de moldura. Os dados no buffer de quadros geralmente são de cores RGB de 24 bits; portanto, haverá um byte para vermelho, um para verde e outro para azul para cada pixel na tela, possivelmente com alguns bytes de preenchimento extras. Os dados na RAM de vídeo podem ser gerados pela GPU ou pela CPU. A RAM de vídeo é lida continuamente por um componente DMA especializado na placa de vídeo e enviada ao monitor. A saída do sinal para o monitor é um sinal analógico (VGA), em que os componentes coloridos são enviados através de conversores digitais para analógicos antes de deixar o cartão ou um sinal digital no caso de DVI, HDMI ou DisplayPort. O hardware responsável por isso também gera os sinais de sincronização horizontal e vertical, bem como todos os atrasos apropriados, para que os dados da imagem sejam enviados apenas ao monitor quando estiverem prontos para isso. No DVI e no HDMI, o fluxo de informações de cores de pixels é codificado e serializado e enviado via TMDS (sinalização diferencial minimizada de transição) para o monitor. O DisplayPort usa codificação 8b / 10b. A codificação serve a vários propósitos. Primeiro, o TMDS minimiza as transições de sinal para reduzir as emissões EMI. Segundo, o TMDS e o 8b / 10b são protocolos balanceados em CC, de modo que os capacitores de bloqueio de CC podem ser usados ​​para eliminar problemas com loops de aterramento. Terceiro, 8b / 10b garante uma densidade de transição alta o suficiente para permitir a recuperação do relógio no receptor, pois o DisplayPort não distribui um relógio separado. o fluxo de informações de cores de pixels é codificado e serializado e enviado via TMDS (sinalização diferencial minimizada de transição) para o monitor. O DisplayPort usa codificação 8b / 10b. A codificação serve a vários propósitos. Primeiro, o TMDS minimiza as transições de sinal para reduzir as emissões EMI. Segundo, o TMDS e o 8b / 10b são protocolos balanceados em CC, de modo que os capacitores de bloqueio de CC podem ser usados ​​para eliminar problemas com loops de aterramento. Terceiro, 8b / 10b garante uma densidade de transição alta o suficiente para permitir a recuperação do relógio no receptor, pois o DisplayPort não distribui um relógio separado. o fluxo de informações de cores de pixels é codificado e serializado e enviado via TMDS (sinalização diferencial minimizada de transição) para o monitor. O DisplayPort usa codificação 8b / 10b. A codificação serve a vários propósitos. Primeiro, o TMDS minimiza as transições de sinal para reduzir as emissões EMI. Segundo, o TMDS e o 8b / 10b são protocolos balanceados em CC, de modo que os capacitores de bloqueio de CC podem ser usados ​​para eliminar problemas com loops de aterramento. Terceiro, 8b / 10b garante uma densidade de transição alta o suficiente para permitir a recuperação do relógio no receptor, pois o DisplayPort não distribui um relógio separado.

Além disso, para HDMI e DisplayPort, os dados de áudio também são enviados para a placa gráfica para transmissão ao monitor. Esses dados são inseridos em pausas no fluxo de dados entre os quadros de vídeo. Nesse caso, a placa de vídeo se apresentará como um coletor de áudio para o sistema operacional e os dados de áudio serão transferidos via DMA para a placa para inclusão nos dados de vídeo.

Agora, você provavelmente percebe que, para uma tela de 1920 x 1080 com 4 bytes por pixel, você precisa apenas de 8 MB para armazenar a imagem, mas a RAM de vídeo do seu computador provavelmente tem muitas vezes esse tamanho. Isso ocorre porque a RAM de vídeo não se destina apenas ao armazenamento do buffer de quadros. A RAM de vídeo está diretamente conectada à GPU, um processador para fins especiais projetado para renderização 3D eficiente e decodificação de vídeo. A GPU usa seu acesso direto à RAM de vídeo para agilizar o processo de renderização. De fato, colocar dados da memória principal na memória de vídeo é um gargalo, pois o barramento PCI que conecta a placa de vídeo à CPU e a memória principal são significativamente mais lentas que a conexão entre a GPU e a RAM de vídeo.

alex.forencich
fonte
7

As várias saídas de tela modernas são essencialmente fluxos de bits seriais. A taxa de bits é muito alta para um processador (ou, se pudesse continuar, exigiria muito do seu tempo de processamento). Um pedaço de memória é reservado para conter os bits da imagem. Uma peça de hardware dedicada lê o conteúdo da memória e o transmite. Esta peça é semelhante a um controlador de DMA e, na verdade, bastante simples. É apenas uma pequena parte de uma GPU moderna, que se preocupa principalmente em criar essa imagem na memória a partir de comandos de GPU de nível superior.

A memória que contém a imagem de vídeo pode fazer parte da memória principal (barata) ou de uma memória dedicada que pode ser acessada simultaneamente pelo 'DMA' e pela CPU e / ou GPU. O 'DMA' deve ser configurado com vários parâmetros, por exemplo, largura e altura do pixel, profundidade da cor, local de início na memória, etc.

Nos computadores modernos, a GPU é um processador (muito especializado) que rivaliza com a velocidade da CPU principal (e a excede em seu próprio território). Faz coisas como gerar uma imagem 3D de psuido a partir de um monte de objetos 3D com texturas e fontes de luz. Tudo isso pode ser feito dentro da memória de vídeo pela GPU. A CPU apenas entrega os objetos, texturas e fontes de luz.

Ler os dados de vídeo da memória e retirá-los é um processo bastante simples, mas deve ser feito com muita rapidez e o tempo todo. Portanto, essa tarefa é adequada para hardware dedicado e inadequada para uma CPU. AFAIK, os últimos computadores que tiveram a CPU envolvida na geração do sinal de vídeo foram o ZX80 / 81 e o Spectrum. Nessas, a CPU poderia fazer seu próprio trabalho apenas durante o tempo de retração (vertical?).

Wouter van Ooijen
fonte
1
Esta é uma ótima informação. Então o controlador DMA (ou hardware similar) acessa a memória de vídeo diretamente? E em um sistema com gráficos integrados que usa a RAM do sistema, ele acessa a RAM do sistema diretamente? Desculpe pela simplicidade das minhas perguntas. Eu sou um grande DIY'er, então eu tendem a pular em coisas de nível superior com conhecimento de nível inferior. :)
Craig Lafferty 31 /
E para acompanhar, como o controlador sabe qual endereço na RAM "roubar" o quadro? Os quadros / bitmaps estão sendo substituídos rapidamente e movidos, suponho.
Craig Lafferty
Seu último comentário está correto: ele é armazenado em um buffer de quadro e, para vídeo analógico, é passado para um RAMDAC . O endereço do buffer de estrutura pode ser fixo ou especificado em um registro de controle. Existem vários truques envolvendo a troca de buffers de quadros entre ou durante os quadros, ou em alguns sistemas (Amiga), a alteração do modo de vídeo na metade do quadro.
Pjc50
Por que o processador ficaria mais lento? Ele já não precisa processar o vídeo para que o controlador possa usá-lo? Vou adivinhar aqui e dizer que o controlador lê a RAM uma e outra vez e a CPU / GPU apenas atualiza a RAM com novas informações de exibição quando algo muda, por exemplo, a GPU colocará minha tela atual em sua RAM e quando movo o cursor, ele atualiza os pixels que foram alterados. Enquanto isso, o controlador lê a RAM cerca de 60 vezes por segundo (tipo de FR padrão, eu acho).
Craig Lafferty
1
A RAM de vídeo não é usada apenas para armazenar a imagem exibida, mas também é usada internamente pela GPU para armazenar dados de cena que são renderizados no buffer de quadros. Isso pode ocupar muito espaço, porque a GPU precisa acessar as malhas 3D detalhadas dos objetos, além de todos os dados de textura de suas superfícies.
alex.forencich