# Dual-ported video RAM

Dual-ported video RAM (VRAM) é uma variante de porta dupla da RAM dinâmica (DRAM), que já foi comumente usada para armazenar o framebuffer em adaptadores gráficos.
A RAM de porta dupla permite que a CPU leia e grave dados na memória como se fosse um chip DRAM convencional, ao mesmo tempo que adiciona uma segunda porta que lê os dados em série. Isso facilita a interface com um controlador de exibição de vídeo (VDC), que envia um sinal de temporização para a memória e recebe dados na sequência correta à medida que desenha a tela. Como a CPU e o VDC acessam a memória simultaneamente em portas diferentes, a RAM de porta dupla não exige que a CPU faça uma pausa enquanto o VDC usa a memória, eliminando assim os estados de espera associados e melhorando o desempenho geral do sistema.
RAM de porta dupla era comum de meados da década de 1980 até meados da década de 1990. Após essa data, começaram a ser usadas novas formas de memória de alto desempenho que eventualmente substituíram os designs de porta dupla. Como essas outras formas de memória também são conhecidas como memória de vídeo e, portanto, VRAM, às vezes é confundida com essa forma mais antiga de memória.

## História

Os primeiros computadores usavam RAM dinâmica para armazenar dados de vídeo a serem enviados para uma televisão convencional ou uma simples conversão de uma televisão que aceitasse entrada de vídeo composto. Para trabalhar com tal monitor é extremamente importante que o hardware de vídeo emita um sinal cronometrado com muita precisão. Nas velocidades em que a memória contemporânea funcionava, a leitura de dados para alimentar o hardware de vídeo consumia grande parte do desempenho possível dos dispositivos de memória. Isso entrava em conflito com a necessidade da unidade central de processamento (CPU) gravar dados na memória para leitura do sistema de vídeo, já que ambos não podiam usar a mesma memória ao mesmo tempo.
Duas soluções gerais foram usadas para evitar problemas de tempo. Para sistemas mais caros, os sistemas de vídeo tinham sua própria memória dedicada e usavam um sistema separado para a CPU armazenar dados. Isto eliminou qualquer possibilidade de disputa por memória, mas ao custo de exigir memória separada numa época em que a memória era muito cara. Ele também quase sempre se comunicava por meio de um barramento de sistema lento que limitava a velocidade com que as alterações na tela podiam ser feitas, dificultando os gráficos interativos. A outra solução, utilizada pela maioria dos computadores domésticos, era utilizar um único banco compartilhado de memória e permitir que o hardware de vídeo controlasse o acesso à memória, pausando a CPU quando necessário. Isso pode levar a um desempenho de computação mais lento, pois a CPU é colocada repetidamente nesses "estados de espera", mas tem a vantagem de ser mais barato e permitir que a CPU atualize a exibição mais rapidamente e, assim, forneça mais interatividade.
No início da década de 1980, a introdução de monitores de resolução muito mais alta que exigiam framebuffers maiores e as interfaces gráficas de usuário (GUIs) recentemente introduzidas que exigiam alta resolução e alto desempenho geral tornaram o desempenho do sistema de vídeo um problema cada vez mais difícil. Sistemas complexos como o Amiga Agnus surgiram para controlar cuidadosamente o acesso à memória e reduzir a contenção, mas embora reduzissem o problema, não o eliminaram.
A solução foi usar memória que pudesse ser acessada pela CPU e pelo hardware de vídeo ao mesmo tempo. Foi inventado por F. Dill, D. Ling e R. Matick na IBM Research em 1980, com uma patente emitida em 1985 (Patente dos EUA 4.541.075). O primeiro uso comercial de VRAM foi em um adaptador gráfico de alta resolução introduzido em 1986 pela IBM para seu sistema RT PC, que estabeleceu um novo padrão para exibições gráficas. Antes do desenvolvimento da VRAM, a memória com porta dupla era bastante cara, limitando gráficos bitmap de alta resolução a estações de trabalho de última geração. A VRAM melhorou o rendimento geral do framebuffer, permitindo gráficos coloridos de baixo custo, alta resolução e alta velocidade. Os sistemas operacionais modernos baseados em GUI se beneficiaram disso e, portanto, forneceram um ingrediente chave para a proliferação de interfaces gráficas de usuário (GUIs) em todo o mundo naquela época.

## Descrição

A RAM dinâmica é organizada internamente em uma matriz de linhas e colunas de capacitores, com cada interseção de linha/coluna contendo um único bit em uma célula. Em uso típico, uma CPU acessando uma DRAM solicitará uma pequena quantidade de dados por vez, possivelmente um único byte. Para ler um byte para a CPU, a DRAM decodifica o endereço fornecido em uma série de oito células, lê toda a linha que contém essas células e bloqueia os dados solicitados para que possam ser lidos no barramento de dados. Na época, as linhas geralmente tinham 1.024 células de largura.
Dispositivos DRAM são destrutivos, o que significa que o ato de ler uma linha também faz com que os dados nela contidos sejam apagados. Para tornar os dados permanentes, qualquer leitura deve ser seguida pela gravação dos mesmos dados pela DRAM naquela linha. Para conseguir isso, travas separadas para a linha inteira devem ser incluídas e os dados são gravados de volta na linha enquanto a CPU lê o byte solicitado. Quando consideramos o processo como um todo, isso significa que a DRAM está lendo repetidamente linhas inteiras de dados, selecionando um único byte desses dados e descartando o restante, e então gravando tudo novamente.
A VRAM opera não descartando os bits em excesso na linha. Em vez disso, os dados lidos no armazenamento de linha também são enviados para um segundo conjunto de travas e um deslocador de bits associado. A partir desse ponto, os dados podem ser lidos um pouco de cada vez, acionando o shifter, e isso requer apenas um único pino. VRAM geralmente não tem dois barramentos de endereço, o que significa que a CPU e os gráficos ainda precisam intercalar seus acessos ao chip, mas como uma linha inteira de dados é lida para o driver gráfico, e essa linha pode representar várias linhas de varredura no tela, o número de vezes que a CPU deve ser interrompida pode ser bastante reduzido.
Tal operação é descrita no artigo "All points addressable raster display memory" de R. Matick, D. Ling, S. Gupta e F. Dill, IBM Journal of R&D, Vol 28, No. 379–393. Para usar a porta de vídeo, o controlador primeiro usa a porta DRAM para selecionar a linha do conjunto de memória que será exibida. A VRAM então copia toda a linha para um buffer de linha interno que é um registrador de deslocamento. O controlador pode então continuar a usar a porta DRAM para desenhar objetos na tela. Enquanto isso, o controlador alimenta um clock chamado shift clock (SCLK) para a porta de vídeo do VRAM. Cada pulso SCLK faz com que a VRAM entregue o próximo bit de dados, em estrita ordem de endereço, do registrador de deslocamento para a porta de vídeo. Para simplificar, o adaptador gráfico geralmente é projetado de forma que o conteúdo de uma linha e, portanto, o conteúdo do registrador de deslocamento, corresponda a uma linha horizontal completa na tela.

## Shift to SDRAM

Durante a década de 1990, muitos subsistemas gráficos usaram VRAM, com o número de megabits apontado como um ponto de venda. No final da década de 1990, as tecnologias DRAM síncronas tornaram-se gradualmente acessíveis, densas e rápidas o suficiente para substituir a VRAM, embora ela tenha apenas uma porta e seja necessária mais sobrecarga. No entanto, muitos dos conceitos VRAM de buffer e organização interna no chip foram usados ​​​​e aprimorados em adaptadores gráficos modernos.