Um Computador Extremamente Simples ( CES )

Nelson Quilula Vasconcelos

Versão .doc deste texto

O CES é uma máquina esotérica, ou seja, seu uso não é prático: Esse computador foi concebido apenas para facilitar a compreensão de alguns aspectos básicos dos computadores em geral. Apesar de não ser prático, o CES é uma máquina de Turing completa e portanto pode ser usada para implementar qualquer algoritmo que possa ser implementado em qualquer outro computador. Porém, de um modo geral, o CES é difícil de programar, os seus programas são difíceis de depurar e precisam executar um número grande de instruções para efetuar operações que em computadores reais podem ser implementadas executando um número de instruções muito menor.

O barramento do CES é formado por uma via de dados de 16 bits, uma via de endereços de 14 bits e um único sinal de controle denominado EscM que controla a escrita na memória.

O espaço de endereçamento da memória do CES é formada por 16K palavras de 16 bits, ou seja, tem uma capacidade total de 32K bytes. Os endereços com valores hexadecimais de 0000 a 03FF ( 1K palavras ) são reservados para ROM e os endereços com valores hexadecimais de 0400 a 3FFF ( 15K palavras ) são reservados para RAM. Os dois últimos endereços do espaço reservado para RAM ( 3FFE e 3FFF ) não são efetivamente usados pela RAM porque servem para endereçar uma área de comunicação com interfaces de dispositivos de entrada e saída.

O processador do CES é formado pelos seguintes componentes:
1. Seis registradores:
1.1. Registrador de dados lidos da memória ( RD ): É um registrador invisível de 16 bits cuja entrada é ligada diretamente à via de dados do barramento da memória;
1.2. Registrador de endereçamento ( RE ) da memória: É um registrador invisível de 14 bits cuja saída é ligada diretamente à via de endereços do barramento da memória
1.3. Registrador de instrução ( RI ): É um registrador invisível de 2 bits que armazena o código da instrução que está sendo executada. A entrada deste registrador recebe diretamente o valor presente nos dois bits mais significativos da via de dados do barramento da memória e a saída deste registrador é ligada diretamente à unidade de controle do processador;
1.4. Registrador apontador de programa ( RP ): É um registrador visível de 14 bits que armazena o endereço da próxima instrução a ser executada;
1.5. Registrador de trabalho ( RT ): É um registrador visível de 16 bits que armazena um dado que está sendo operado
1.6. Registrador de condição ( RC ): É um registrador visível de apenas um bit que armazena um vai um ( ou o complemento do pede emprestado ) produzido pelo somador. A saída deste registrador é ligada diretamente à unidade de controle do processador;
2. Dois multiplexadores de duas entradas :
2.1. Multiplexador de dados ( MD ): É um multiplexador de 16 bits que seleciona o valor que será fornecido a uma das entradas do somador. Uma das entradas desse multiplexador é ligada à saída do RD e a outra entrada é ligada à saída do RP;
2.2. Multiplexador de endereços ( ME ): É um multiplexador de 14 bits que seleciona o valor que será colocado na entrada do RE. Uma das entradas deste multiplexador recebe o valor produzido pelo somador e a outra entrada recebe o valor presente nos 14 bits menos significativos da via de dados do barramento da memória;
3. Um "buffer" com saída de três estados de 16 bits ( BT ) que permite enviar um dado para a via de dados do barramento da memória. A entrada do BT recebe o valor presente na saída de RT e a saída do BT é ligada diretamente à via de dados do barramento da memória;
4. Um complementador de dados de 16 bits ( CD ) que pode ser implementado empregando 16 portas do tipo "NOR" de duas entradas. A entrada do CD é ligada à saída do RT e a saída do CD é ligada a uma das entradas do somador, permitindo que essa entrada do somador receba o complemento do valor armazenado em RT ou o valor zero;
5. Um somador de 16 bits ( SM ) que recebe em uma de suas entradas o valor produzido pelo MD e recebe na outra entrada o valor produzido pelo CD. O SM tem também uma entrada de "vem um" que recebe um sinal de controle produzido pela unidade de controle do processador e produz um "vai um" que pode ser armazenado no único bit do RC;
6. Uma unidade de controle ( UC ) que recebe os valores presentes nas saídas de RI e RC e gera os sete sinais de controle usados no CES. Como as instruções que podem ser executadas no processador do CES são geralmente executadas em dois ciclos de relógio, a UC precisa usar um "flip-flop" de estado.

Este processador pode ser implementado empregando menos que dois mil e quinhentos transistores.

A figura 1 apresenta um diagrama da interligação desses componentes. As vias de dados do processador aparecem em amarelo nessa figura.



Figura 1. Diagrama geral do processador do CES

O conjunto de instruções reconhecido pelo processador do CES é formado por apenas quatro instruções e todas essas instruções empregam um mesmo formato: Cada instrução é armazenada em uma palavra de 16 bits da memória, sendo que os dois bits mais significativos correspondem ao código da instrução e os outros 14 bits correspondem ao operando da instrução, que é sempre um endereço. A tabela apresentada a seguir mostra as quatro instruções reconhecidas pelo processador do CES:

Código
Binário
Nome Operando Ação
00Lê da memória Endereço
da palavra
da memória
Copia para o RT o conteúdo da palavra memória cujo endereço é igual ao valor do operando.
01Escreve na
memória
Armazena o conteúdo do RT na palavra da memória cujo endereço é igual ao valor do operando.
10Subtrai Coloca no RT o resultado da subtração do conteúdo da palavra da memória cujo endereço é igual ao valor do operando menos o valor anteriormente armazenado no RT.
O RC recebe o complemento do valor do pede emprestado gerado na subtração
11TestaAlvo do
desvio
Examina o conteúdo do único bit de RC e se esse bit estiver armazenando o valor zero, copia o operando para o RP

Neste processador em cada ciclo de relógio é realizada uma operação de acesso à memória e uma operação no somador.

As instruções L, E e S são sempre executadas em dois ciclos de relógio. No primeiro ciclo são efetuadas três seguintes ações:
- o conteúdo do RP é enviado para o SM onde é incrementado e enviado de volta para o RP e também para o RE;
- um dado é lido ( no caso das instruções L e S ) ou escrito ( no caso da instrução E ) da palavra da memória cujo endereço é igual ao valor do operando da instrução, que foi copiado para o RE no último ciclo de execução da instrução anterior;
- no final desse ciclo o dado lido ou escrito na memória é armazenado no RD.

No segundo ciclo da execução dessas instruções são realizadas as seguintes ações:
- a próxima instrução a ser executada é lida da palavra da memória cujo endereço está armazenado no RE;
- no final desse ciclo, a instrução lida é copiada para o RD, seu operando é copiado para o RE e o código da instrução é colocado no RI;
- nas instruções L e S, o valor produzido pelo somador é armazenado no RT no final desse ciclo;
- na instrução S, o vai um produzido pelo somador também é armazenado no RC no final desse ciclo.

No caso da instrução T, se o valor armazenando no RC for um, essa instrução também será executada em dois ciclos de relógio: No primeiro ciclo de relógio o conteúdo do RP é incrementado e enviado para o RE. No segundo ciclo é lida a próxima instrução a ser executada, da mesma forma que ocorre durante o segundo ciclo de execução das demais instruções.

Se o valor armazenado no RC for zero, a instrução T será executada em apenas um ciclo de relógio. Isto é possível porque nesse caso o endereço da próxima instrução a ser executada é igual ao operando da instrução que está sendo executada e esse operando já foi copiado para o RE no último ciclo da execução da instrução anterior. Como o endereço da próxima instrução já está no RE, ele pode ser empregado imediatamente para ler essa próxima instrução.

No final desse único ciclo de execução, o RP recebe através do somador o valor que está armazenado nos 14 bits menos significativos do RD. Esses 14 bits armazenam também o operando da instrução que está sendo executada. Consequentemente, essa última ação faz o RP receber o valor do operando da instrução que está sendo executada o que permite que as instruções subsequentes possam ser buscadas nos endereços corretos.