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.

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