Criado por Marco Antonio Soares de Mello Alves (Laboratório de Arquitetura de Computadores).
Ubuntu 24.04.1 LTS (Noble Numbat)
Caros alunos, bom dia.
Bem vindos à disciplina de Design de Computadores.
Nela, utilizaremos a linguagem VHDL, que vocês já viram em Elementos de Sistemas, para criar dois processadores e alguns circuitos auxiliares.
Para testar o funcionamento desses circuitos, cada aluno usará um kit FPGA (DE0-CV):
https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=165&No=921
Para programar em VHDL, usaremos o programa (gratuito) da Intel: Quartus Prime Lite, versão 20.1.
https://fpgasoftware.intel.com/?edition=lite
Por favor, instalem-no em seus computadores. Para ajudar, no site da disciplina, no Blackboard, existem dois tutoriais (Ubuntu e Windows) criados pelo Marco (técnico do laboratório de Arquitetura de Computadores). Eles estáo na opção:
Conteúdo > Atividades > Tutoriais > Instalação Quartus Prime Lite v20.1 / Preparação para Design de Computadores.
Além disso, ele dará suporte aos problemas de instalação do Quartus.
Para relembrar o VHDL e como utilizar o Quartus, antes do início das aulas, por favor, façam o tutorial do link abaixo:
ftp://ftp.intel.com/Pub/fpgaup/pub/Intel_Material/16.0/Tutorials/VHDL/Quartus_II_Introduction.pdf
Ou no Blackboard, no link que está em: Conteúdo > Atividades > Tutoriais > Tutorial para início das Aulas: Uso do Quartus e VHDL.
Apesar de ser para o Quartus versão 16, esse tutorial cobre a utilização da FPGA do kit DE0-CV (Chip FPGA: Cyclone V 5CEBA4F23C7). As versões mais novas possuem o mesmo conteúdo mas não explicam a configuração para a nossa placa.
Para quem quiser se aprofundar no assundo, o site da Intel, no Youtube, é uma boa fonte de informação.
https://www.youtube.com/c/IntelFPGA/featured
Para entender o funcionamento da FPGA:
https://www.youtube.com/watch?v=jbOjWp4C3V4 (35 minutos)
Para a história da lógica programável (PAL, PLD, CPLD e FPGA):
https://www.youtube.com/watch?v=0Ho4rDswOeE (21 minutos)
Bom trabalho a todos!!!
Obrigado,
Paulo Carlos F. Santos
Tutorial para início das Aulas: Uso do Quartus e VHDL.
Referência Rápida do Quartus (página interna: em eterna construção).
Referência Rápida VHDL (página interna: em eterna construção).
Resumo (interno) da arquitetura do MIPS e as instruções que serão implementadas.
Circuito do MIPS, ciclo único, para as instruções do grupo A.
Circuito do MIPS, ciclo único, para as instruções do grupo A e B.
Vídeo no Youtube sobre como programar um montador (assembler) em Python:
Let’s Code a Minimal Assembler from Scratch in Python (100 Lines).
Assembler MIPS em Python (referência para o projeto 1 e uso para o MIPS):
Assembler em Python (v2 com correção de bugs).
Assembler, em Python, feito pelo Marco Mello, para o contador/relógio:
É necessário fazer o download dos arquivos que utilizaremos para o driverVGA:
Descompacte os arquivos na raiz do seu projeto. Todos os módulos VHDL necessários já estão interconectados via port map, basta fazer a instanciação do componente driverVGA.vhd.
Forma de instanciar no arquivo que utilizará este componente:
nomeComponente : entity work.driverVGA
port map (
CLOCK_50 => sinalLocal, -- DE0-CV -> CLOCK_50
VGA_HS => sinalLocal, -- DE0-CV -> VGA_HS
VGA_VS => sinalLocal, -- DE0-CV -> VGA_VS
VGA_R => sinalLocal, -- DE0-CV -> VGA_R
VGA_G => sinalLocal, -- DE0-CV -> VGA_G
VGA_B => sinalLocal, -- DE0-CV -> VGA_B
posCol => sinalLocal, -- Posição da Coluna(X)
posLin => sinalLocal, -- Posição da Linha(Y)
dadoIN => sinalLocal, -- Posição do carac. dentro do arquivo mapaDeCaracteres
VideoRAMWREnable => sinalLocal
);
OBS: para os sinais posCol, posLin, dadoIN, VideoRAMWREnable pode ser necessário adicionar um registrador à entrada deste circuito.
Abaixo está uma pequena descrição dos sinais para o controle do driver para VGA.
posCol: Esse sinal é responsável por controlar a posiçao do caracterer na tela para o “eixo X” (Coluna).
posLin: Esse sinal é responsável por controlar a posiçao do caracterer na tela para o “eixo Y” (Linha).
dadoIN: Esse sinal é responsável por controlar o dado (Cor/Caractere) que será impresso na tela, os 2 bits mais significativos controlam a cor (Vermelho, Azul, Verde e Branco), e os 6 bits menos significativos controlam o caractere, definido na sequencia de posições de memória do arquivo charMapROM_32x32_2K.mif, ou seja, só é possível ter no seu mapa de caracteres 2^6 caracteres diferentes.
VideoRAMWREnable: Esse sinal é o responsável por habilitar a escrita no driverVGA, ele deve ser habilitado por último, após definir posCol, posLIN e o dadoIN.
Esse site consegue gerar o “desenho” de uma imagem com um formato no padrão que utilizamos no nosso mapa de caracteres (charMapROM_32x32_2K.mif). Abaixo está descrito os passos necessários para fazer essa conversão de bmp para o padrão utilizado.
OBS¹: Os passos descritos utilizam uma imagem bitmap, 32x32px e monocromática (Preto e Branco)
OBS²: Nossos desenhos de caractere estão limitados resolução do desenho que utilizamos no driverVGA
1 - Escolha a imagem para ser convertida, para o exemplo escolhi a imagem abaixo:
2 - Após isso, abra alguma ferramenta de desenho (Paint, GIMP, Inkscape…) e converta a imagem de maneira que a mesma seja salva em formato Bitmap, Monocromático e com resolução de 32x32p:
3 - Acesse o site https://www.dcode.fr/binary-image, e coloque as seguintes configurações:
4 - Após isso, selecione a imagem para ser convertida e clique em CONVERT, o desenho deverá aparecer a esquerda, conforme a imagem abaixo:
5 - Basta copiar e colar o resultado no seu arquivo charMapROM_32x32_2K.mif, no caso foi substituido o caractere ‘B’ pelo desenho da imagem, ou seja, nas posições de memória de 64 a 95 (posição do terceiro caractere), que antes ficava o desenho do caractere ‘B’.
OBS: Para acessar esse terceiro caractere, o valor dos 5 bits menos significados recebido pelo sinal dadoIN deverá ser “00010” (2 em binário/5 bits).