Aula 7: Estudo Guiado

Objetivos

  1. Projetar um contador microprocessado.

Contextualização

Até agora, temos um processador de 8 bits, com 11 instruções, endereçamento de 512 posições de memória de instruções e 512 posições de memória de dados. Vamos utilizá-lo no projeto de um contador que deverá:

Processador de 8 bits e 11 Instruções
Processador de 8 bits e 11 Instruções

Independente da necessidade de utilização, o nosso projeto terá:

O esboço inicial do nosso mapa de memória terá os seguintes blocos de 64 posições:

Como o espaço de endereçamento é de 512 posições, e temos blocos de 64 posições, podemos fazer um decodificador de 3 entradas (os bits mais significativos do endereçamento) e 8 saídas (uma para ativar cada bloco de 64 posições).

Utilizando o nosso processador, mostrado abaixo, devemos conectar e endereçar os periféricos listados - mostrados nos desenhos a seguir.

CPU: 9 bits para Endereços (512 endereços), 13 bits para Instrução, 8 bits de Entrada de Dados (leitura) e 8 bits de Saída de Dados (escrita)
CPU: 9 bits para Endereços (512 endereços),
13 bits para Instrução,
8 bits de Entrada de Dados (leitura) e
8 bits de Saída de Dados (escrita)
ROM de 512 Posições
ROM de 512 Posições
RAM de 64 Bytes
RAM de 64 Bytes
Decodificador Binário para 7 Segmentos
Decodificador Binário para 7 Segmentos
Entrada de Chaves e Botões
Entrada de Chaves e Botões



O esboço abaixo será o ponto de partida para a implementação.

Primeiro Esboço do Computador
Primeiro Esboço do Computador

A memória RAM ocupa o intervalo de endereços entre 0 e 63.

Ligando os endereços mais significativos (A8, A7 e A6) do barramento de endereços ao decodificador, teremos os sinais de ativação para oito blocos de 64 endereços cada.

A RAM será alocada no primeiro bloco desse decodificador e a faixa de endereços de A0 até A5 será ligada diretamente a ela. Além disso, precisaremos dos sinais que habilitam a escrita ou a leitura da RAM e os barramentos de dados de leitura e escrita.

A figura abaixo, mostra as conexões para esse primeiro periférico.

Conexão e Endereçamento da RAM
Conexão e Endereçamento da RAM

Vamos implementá-lo em VHDL e testaremos o seu funcionamento junto com a implementação dos LEDs.

Os LEDs estão alocados na faixa de endereços para E/S de escrita (entre 256 e 319). Nesta mesma faixa estão os displays de sete segmentos.

Teremos três endereços, um para um conjunto de oito LEDs (LEDR0 até LEDR7) e outros dois: um para o LEDR8 e outro para o LEDR9. De maneira arbitrária, vamos definir os seguintes endereços:

Para isso, podemos utilizar um novo decodificador de 3 para 8 conectado às linhas de endereços de mais baixa ordem (A0, A1 e A2). A ativação de cada conjunto de LEDs será feita através da ligação de portas AND, conforme mostrado abaixo.

Para o ativar o conjunto de 8 LEDs, no endereço 256, teremos uma porta AND com três entradas:

Para o ativar o LEDR8, no endereço 257, teremos uma porta AND com três entradas:

Para o ativar o LEDR9, no endereço 258, teremos uma porta AND com três entradas:

Conexão e Endereçamento dos LEDs
Conexão e Endereçamento dos LEDs

Vamos implementá-lo em VHDL e testar o seu funcionamento e o funcionamento da RAM. Para tanto, podemos utilizar um programa similar ao mostrado abaixo. Lembre que os valores dos argumentos estão em decimal e precisam ser convertidos para hexadeximal.

Programa de teste da RAM e da interface de LEDs
Linha Instrução Observação
0 LDI $1 Carrega o acumulador com o valor 1
1 STA @0 Armazena o valor do acumulador na posição zero da memória (MEM[0])
2 SOMA @0 Soma o valor atual do acumulador com o conteúdo de MEM[0]
3 STA @1 Armazena o valor do acumulador em MEM[1]
4 LDA @0 Carrega o acumulador com o valor de MEM[0]
5 STA @257 Armazena 1 no LEDR8
6 STA @258 Armazena 1 no LEDR9
7 LDI $85 Carrega o acumulador
8 STA @256 Armazena 85 em LEDR0 até LEDR7
9 LDI $170 Carrega o acumulador
10 STA @256 Armazena 170 em LEDR0 até LEDR7
11 JMP @11 Fim. Deve ficar neste laço

O caractere arroba (@) indica um endereço de memória (RAM ou ROM) enquanto que o caractere cifrão ($) indica um valor constante (imediato).

Programa, igual ao acima, para ser copiado e utilizado na ROM, com os devidos ajustes nos endereçamentos.

LDI $1
STA @0
SOMA @0
STA @1
LDA @0
STA @257
STA @258
LDI $85
STA @256
LDI $170
STA @256
JMP @11

Esta Atividade deverá ser entregue através do Blackboard!



Ferramentas