VGA character generator with color attributes in VHDL

Continuando a apreender qualquer coisa, e depois de suspender o projecto de execução do computador de 8 bits do Ben eater, voltei ao gerador de caracteres.

Já tinha colocado a funcionar um gerador de caracteres com base nos seguintes trabalhos:

  • https://github.com/fsmiamoto/EasyFPGA-VGA
  • https://github.com/tibor-electronics/vga_generator

O resultado , quando testado na board altera cyclone RZ easyFPGA a2.2, não foi perfeito, pelo menos em termos de definição, mas decidi que antes de tentar melhorar a qualidade queria implementar também os atributos.

A imagem abaixo já é a de uma versão com atributos, na versão monocromática é texto verde em fundo preto.

mde

Os ficheiros deste gerador de caracteres em VHDL, e o ficheiro com as configurações dos pinos para a RZ easyFPGA a2.2, estão no seguinte link:

https://github.com/inaciose/RZ-easyFPGA-A2.2/tree/main/VGACharGen

No design implementado existe uma memoria para definir quais os caracters definidos pelo seu codigo ascii que são exibidos num monitor VGA numa grelha de 80 x 30, caracteres. Cada caracter tem 8×16 pixels.

Na implementação com atributos existe também uma memoria para definir os atributos desses caracteres. Esses atributos codificam em 8 bits, a cor do caracter, a cor de fundo, se pisca, ou se está underlined. (neste momento apenas a cor está implementada. Cada atributo desta memória é acedido no mesmo endereço que o caracter correspondente, pelo que partilham como input o mesmo bus de endereço.

Caso este design seja implementado com uma CPU então terá que conter mecanismos de selecção da memoria onde pretende escrever. O acesso aleatório a estas memorias está condicionado pela necessidade do modulo de gerador de caracteres necessitar de usar as suas linhas de endereços. Uma forma de contornar esta limitação é  usar memórias de 3 portos e buffers tristate nas ligações ao bus de dados.

Considero que tal como está este design pode ser adaptado a outros situações. Em particular um sistema para escrever na memoria de video (char e attrb) de modo a ser usado para escrita posicional.

O próximo passo será a sua integração com um teclado, em modo de feedback com simulação de um cursor a piscar.

Os ficheiros para este projecto estão disponível na seguinte ligação:

https://github.com/inaciose/RZ-easyFPGA-A2.2/tree/main/VGACharColGen

Foi testado numa fpga altera cyclone IV, board RZ easyFPGA a2.2