Tutoriais

Criado por Marco Antonio Soares de Mello Alves (Laboratório de Arquitetura de Computadores).

Ubuntu 24.04.1 LTS (Noble Numbat)

Windows 11

Licença Questa

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).

Revisão_01

Revisão_02

Revisão_03

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.

MIPS de ciclo único para as instruções do grupo A
MIPS de ciclo único para as instruções do grupo A

Circuito do MIPS, ciclo único, para as instruções do grupo A e B.

MIPS de ciclo único para as instruções do grupo A e B
MIPS de 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:

Github.

É necessário fazer o download dos arquivos que utilizaremos para o driverVGA:

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.

SINAIS

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.

Binary Image 0 1

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:

batMAN
batMAN

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:

batMAN
batMAN

3 - Acesse o site https://www.dcode.fr/binary-image, e coloque as seguintes configurações:

binary-image
binary-image

4 - Após isso, selecione a imagem para ser convertida e clique em CONVERT, o desenho deverá aparecer a esquerda, conforme a imagem abaixo:

binary-imageCONVERTIDO
binary-imageCONVERTIDO

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’.

desenhoNOmapa
desenhoNOmapa

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).