Montando o circuito do program counter (PC)
Ó eu aqui de novo! :D
No post de hoje trataremos do estudo e montagem do circuito do Program Counter (PC) do nosso computador de 8 bits. Esse circuito nada mais é do que um contador (no nosso caso, ele conta de 0 a 15).
Relembrando o que sabemos sobre arquitetura de computadores o PC, em conjunto com o Registrador de Instruções (IR), é o circuito responsável por armazenar o endereço de memória onde a instrução do programa em execução se encontra.
Na verdade, o PC pode ser comparado à um registrador de uso específico, como o A ou o B, mas com a diferença de que ele tem a capacidade de se auto-atualizar, devido à contagem que realiza; e armazena um determinado conteúdo que será utilizado posteriormente.
Este circuito tem algumas capacidades ou, mais especificamente, alguns sinais, muito interessantes, os quais vale a pena descrevermos aqui.
O primeiro deles é o PC_OUT. Esse sinal diz à nosso circuito PC que ele deve direcionar seu conteúdo (ou seja, seu valor de contagem) para suas saídas. Isso faz com que o conteúdo fique disponível no barramento para ser consumido por algum outro circuito do computador. Vale lembrar que, como estamos trabalhando com uma memória de 16 posições, seus endereços podem ser armazenados em 1 nibble (4 bits). Sendo assim, nosso PC conta de 0 a 15.
Após o "estouro" da contagem (aqui vale a pena citar o flag de carry), ele volta a 0 e conta novamente até 15, indefinidamente (ou até o sinal de HALT).
O barramento de nosso computador é composto por 8 bits (4 bits de endereços e 4 bits de dados - daí a designação do computador ser de "8 bits"). No caso do PC (e alguns outros circuitos), serão os 4 bits menos significativos do byte (LSB) à serem enviados ao barramento de endereços do circuito.
O segundo sinal é o sinal JUMP (JMP). Esse, quando habilitado, carrega o valor disponível nas entradas do PC (vindo do barramento) e seta a contagem com esse valor. Ou seja, ele fará com que o valor atual do PC seja sobrescrito pelo que estiver disponível em suas entradas.
A utilidade desse sinal é vista ao se executar uma sub-rotina, por exemplo, onde o computador deve salvar o endereço de programa atual (no stack pointer - veremos esse circuito posteriormente), executar um salto para determinada região da memória de programa (isso é feito alterando-se o PC), executar as instruções a partir desse novo endereço até o fim e, quando finalizar, restaurar o endereço anterior do PC para continuar a execução do programa do ponto anterior à chamada da sub-rotina.
O terceiro sinal é o PC_INC (ou PC_ENABLE). Esse sinal nada mais é do que o "interruptor" do nosso circuito PC. É esse sinal que comanda se nosso circuito inicia ou não a contagem, persistindo seu último valor nas saídas.
Ele é usado em conjunto com o sinal de JUMP para desabilitar a contagem do PC e, assim, podermos setar o novo valor (posição de memória) desejado.
O quarto e último sinal é o sinal de RESET (RST). Esse sinal, quando habilitado, zera o PC e reinicia a contagem.
Para implementar o circuito do PC (relembrando: Program Counter), foram utilizados dois CI's: um74LS161 (contador síncrono de 4 bits) e um 74LS245 (transceptor de barramento de oito bits, tri-state).
O contador síncrono, como todo estudante de eletrônica digital deve saber, é um dos CI's mais utilizados para se implementar contadores digitais. É quase que o feijão-com-arroz da eletrônica digital. Internamente, ele se utiliza de lógica combinacional (portas AND, NAND, NOR e NOT) e flip-flops do tipo JK e é dito síncrono, por possuir um pino de carry que pode servir de clock para implementar um contador com mais de 4 bits, por exemplo.
O outro componente, por sua vez, é um componente extremamente versátil. Ele implementa internamente a lógica de tri-state (terceiro estado). Ou seja, ele pode operar em cada pino de saída com os níveis alto, baixo e alta impedância.
Este componente possui também um controle de direção de dados. Como ele possui dois barramentos (barramentos A e B), setando o pino DIR com nível lógico alto, os dados trafegam do barramento A para o B, em nível lógico baixo, os dados trafegam do barramento B para o A. Isso facilita (e muito!) a disposição do CI na protoboard, no momento da prototipação.
Indico fortemente aos interessados a leitura do datasheet de ambos os componentes. Vale muito a pena!
Abaixo, algumas fotos da montagem:
O circuito do Program Counter em funcionamento (em cima, o circuito de clock)
Aqui, se pode ver os fios representando os sinais de controle
Uma montagem para simular o barramento (enquanto não temos o computador completo). Muito útil para os testes!
A montagem completa (CLK + PC + simulador de BUS) em perfeita harmonia!
Então, é isso. Espero que estejam gostando.
Até a próxima! :)
Comentários
Postar um comentário