Você está na página 1de 2

Parte III

 
 As partes anteriores deste projeto apresentaram a estrutura de um processador simples. A
parte I apresentou o projeto e na parte II o processador foi conectado a um contador externo e a
uma unidade de memória. Nesta nova etapa serão descritas outras partes do projeto deste
processador.
O primeiro passo é a extensão do processador de maneira que um contador externo não
seja necessário e que e adição da habilidade de realização de operações de leitura e escrita
usando dispositivos de memória. Serão adicionados três novos tipos de instruções ao processador
conforme apresentado na tabela 1. A instrução ld(load) carrega no registrador RX o dado
encontrado na memória na posição encontrada no registrador RY. A instrução st(store) armazena
o dado contido no registrador RX na posição de memória cujo endereço está no registrador RY.
Finalmente, a instrução mvnz(move if not zero) permite que a operação mv seja executada
somente sob a condição de que o conteúdo do registrador G não seja igual à 0.

Operação Função Realizada


ld Rx, [Ry] RX ← [[RY]]
st Rx, [Ry] [Ry] ← [Rx]
mvnz Rx, Ry if G != 0, Rx ← [RY]
Tabela 1

Um diagrama esquemático do processador aprimorado é dado na figura 1. Os


registradores R0 a R6 são os mesmos da implementação do processador simples, mas o R7 foi
substituído por um contador. Este é usado para prover o endereço de memória em que o
processador busca sua instrução e será citado como o contador do programa (PC). Quando o
sinal reset do processador é ativado o PC é setado com o valor 0. No início de cada instrução (no
passo de tempo 0) o conteúdo do PC é usado como um endereço para a leitura de uma instrução
encontrada na memória. A instrução é então armazenada no IR e o PC é automaticamente
incrementado para o endereço da próxima instrução (no caso de um mvi o PC provê o endereço
do dado e então é incrementado novamente).
A unidade de controle implementa o PC através do uso de um sinal incr_PC que nada
mais é do que um enable para o próprio contador. Também é possível caregar diretamente o
endereço no PC (R7) fazendo com que o processador execute uma instrução mv ou mvi na qual o
registrador de destino seja especificado com R7. Neste caso a unidade de controle realiza um
carregamento paralelo no contador. Desta maneira o processador pode executar instruções de
qualquer endereço da memória. De maneira similar o conteúdo do PC pode ser copiado em
qualquer outro registrador através do uso da instrução mv. Um exemplo de código que utilize o
registrador PC para a implementação de um loop é apresentado abaixo, os textos depois do
caracter "%" são apenas comentários. A instrução mv R5, R7 coloca no R5 o endereço de
memória da instrução sub R4, R2. Então a instrução mvnz R7, R5 provoca a execução da
instrução sub até que o valor em R4 seja 0.
mvi R2,#1
mvi R4,#10000000 % binary delay value
mv R5,R7 % save address of next instruction
sub R4,R2 % decrement delay count
mvnz R7,R5 % continue subtracting until delay count gets to 0

A figura 1 mostra dois registradores no processador que são usados para transferência de
dados. O registrador ADDR é usado para enviar o endereço à um dispositivo externo como um
módulo de memória, por exemplo, e o registrador DOUT é usado pelo processador para prover
os dados que serão armazenados fora do processador. Um dos usos do registrador ADDR é para
a leitura ou busca de instruções da memória; quando o processador precisa buscar uma instrução,
o conteúdo do PC (R7) é transferido no barramento e carrehado em ADDR. Este endereço é
então provido à memória. Além da busca de instruções, o processador pode ler dados de
qualquer posição de memória através da utilização deste mesmo registrador ADDR. Tanto dados
quanto instruções são recebidos no processador pela entrada DIN. O processador pode escrever
dados em um dispositivo externo através do armazenamento do endereço no registrador ADDR,
do armazenamento dos dados no registrador DOUT e da habilitação do sinal W (write).
A figura 2 ilustra como este processador aprimorado é conectado à memória e a outros
dispositivos. A unidade de memória da figura suporta operações de leitura e escrita, possui
entrada de dados e de endereço e também uma entrada que ative a escrita. Além destes sinais, a
memória possui uma entrada de clock porque os dados são carregados quando há uma borda
ativa do sinal de clock. Este tipo de memória é geralmente chamada de synchronous random
access memory (synchronous RAM). A figura 2 inclui também um registrador de 16-bits que
pode ser usado para armazenar dados vindos do processador e que por sua vez é conectado à um
conjunto de leds que permitem a apresentação dos dados na placa DE2. Para que seja possivel a
seleção da unidade de memória ou do registrador quando ocorre uma operação de escrita, este
circuito inclui algumas portas lógicas que realizam a decodificação do endereço; se as linhas
A15A14A13A12 = 0000 então será escrito na posição de memória dado pelo endereço nas linhas de
indíce mais baixos. A figura 2 apresenta n linhas de endereço conectadas à memória; para este
trabalho uma memória com 128 palavras é suficiente, o que implica que n=7 e que a porta de
endereço da memória é ligada às linhas A6 ... A0. Quando o endereço começado por
A15A14A13A12 = 0001, então os dados escritos no processador serão carregados no registrador
que tem sua saída ligada nos leds.

Você também pode gostar