RISC-V multiciclo com vídeo VGA
O objetivo desta prática é adicionar instruções de manipulação de bytes ao processor RISC-V multiciclo. Estamos usando um gerador de vídeo no padrão VGA que calcula um endereço de memória e busca dados em um frame buffer para apresentar na tela. O Makefile desta pasta processa o arquivo riscv.asm, gera o arquivo .hex para a memória e faz a simulação, enquanto o da pasta superior pode ser usado para programar a placa.
O comando make && make -f ../Makefile clean program faz, portanto, as duas coisas.
Para economizar recursos, a resolução real de 640x480 é mapeada na memória com 20x15, onde cada byte tem o formato XXRRGGBB e representa um quadrado de 32x32 pixels na tela. Isso requer 300 bytes ou 75 palavras, pouco mais que 1/4 da nossa memória. Vejamos algumas partes relevantes do nosso código:
Adicionamos um reset para facilitar a simulação e garantir o estado inicial dos contadores e endereços. O processador continua acessando a memória normalmente, mas esta agora possui duas portas adicionais: (i) vaddr (gerado no módulo vga) que aponta para uma palavra do frame buffer e (ii) vdata que retorna seu respectivo valor. Ela também tem agora leitura síncrona, o que permite que seja mapeada das block RAMs do FPGA, economizando muitos ALMs:
O primeiro código de exemplo coloca alguns pixels estáticos na tela. Note que, em relação à declaração, a palavra é mostrada invertida na tela:
De certa forma, isso tem relação com o Endianess da arquitetura. O RISC-V adota em geral a abordagem Little-endian.

Os recursos ocupados no kit DE0_CV são os seguintes (zeros omitidos):