O COMPUTADOR DE 1 BIT
Agosto/2006
Prof. Joel Augusto dos Santos Prof. Denny Daniel Collina denny@deii.cefetmg.br
O Computador de 1 bit
Histrico das revises
Verso Agosto 2006 Prof. Denny D. Collina (denny@deii.cefetmg.br) Correes e adequaes no texto; Sintoma: o computador no reinicializa aps a execuo de halt; o Correo no circuito: adio de lgica para reabilitar o CLK quando a entrada RSTin\ for ativada. Verso Janeiro 2006 Prof. Denny D. Collina Sintoma: a instruo RST no apresenta ciclo de execuo. o Correo no circuito: substituio do 74LS161 por 74Ls163; Adio de novos programas propostos. Verso Maio 2005 Prof. Denny D. Collina Nova diagramao do texto; Desenho das figuras; Sintoma: a instruo OUT no apresenta ciclo de execuo. o Correo no circuito: adio de uma porta OR (CI7A) entrada de CLK do registrador de sada; Verso Junho 1992 Prof. Joel Augusto dos Santos Implementao inicial do PD-01.
1.1 Introduo
O estudo da lgica e da eletrnica digital nos permite, atravs de tcnicas adequadas, obter um circuito lgico que corresponda a um raciocnio, a um pensamento. Isto o projeto lgico. Assim sabemos que, se temos uma determinada proposio, podemos exprimi-la sob a forma de variveis lgicas e a partir destas, montarmos uma tabela verdade que retratar todas as combinaes possveis das variveis de entrada, relacionando-as com a sada. Uma vez obtida a tabela verdade, podese ento definir a equao do circuito.
Utilizando tcnicas de simplificao, mtodo algbrico ou grfico, podemos reduzir esta equao a um mnimo de termos possveis a fim de simplificar o circuito final.
Pensamento Lgico
lgebra Booleana
Circuito Lgico
Desta forma, sempre que tivermos um problema lgico, poderemos lanar mo destes procedimentos e obter um circuito que o resolva. Se um novo problema se apresenta, novamente o processo dever ser repetido para se obter um novo circuito que satisfaa ento, as novas exigncias. 0 ideal seria que pudssemos ter um circuito lgico universal, pronto para resolver qualquer problema lgico. Este circuito teria que se adaptar a cada nova proposta com o objetivo de resolver problemas especficos e diferentes, ou seja, teria que ser PROGRAMVEL. O PROGRAMA ser constitudo, ento, por uma srie de tarefas, ordens, comandos ou INSTRUES, as quais este circuito ter que executar uma a uma, na seqncia estabelecida por ns. Esta seqncia de instrues ou simplesmente programa, obviamente ter que estar disponvel, previamente armazenada em algum tipo de dispositivo capaz de memoriz-las e t-las disponveis para uso do circuito programvel, toda vez que for necessrio executar o programa. Temos que dotar este circuito de um dispositivo de entrada que o permitir receber variveis ou DADOS e transferi-los para o circuito programvel.
O Computador de 1 bit.
De maneira semelhante, temos a necessidade de um circuito de sada que possibilitar acesso aos resultados. Utilizando diagrama de blocos para representar o exposto teremos a Figura 2: A partir desta configurao bsica, desenvolveremos o nosso primeiro modelo de processador digital, sistema programvel capaz de executar seqencialmente operaes lgicas, previamente ordenadas de forma a atender uma tarefa ou proposio lgica. 0 nosso sistema ter a capacidade de manipular 1 bit de informao ou dado.
Circuito Programvel
Entrada
Sada
Memria
Figura 2: Circuito Lgico Universal. Isto significa, por exemplo, que: Uma varivel de 1 bit pode ser colocada na entrada do sistema, depois transferida para o circuito programvel ou processador e depois de processada, esta informao poder ser transferida para o bloco de sada.
Tudo isto naturalmente acontecer, seguindo as instrues contidas no programa armazenado na memria do sistema. Vamos ento definir a funo exata de cada bloco do sistema para gerar os sinais de controle adequados a cada bloco.
Entrada de Dados
ao processador
OpInp
Sada de Dados
Output Data
OpOut
SET RESET
Independente de qual for o contedo do processador, ao receber um comando de SET podemos afirmar que logo aps comando, o contedo do mesmo ser nvel 1. Se receber um comando de RESET, o contedo do processador passar a ser nvel 0, independente do valor anterior.
Uma operao de complemento ao ser realizada, inverte o estado do processador, seCOMPLEMENTO ja ele qual for. A ltima operao possvel de se realizar com apenas 1 bit, exatamente nenhuma operao, ou seja, NO OPERAO ou simplesmente NOOP. Esta atividade aparentemente intil, ter grande aplicao quando ao executar programas, tivermos a necessidade de gerar constantes de tempo. Depois de sofrer uma operao NOOP, o contedo do processador deve manter-se inalterado. Tabela 1: Operaes realizadas com um bit.
O Computador de 1 bit. 3
NO OPERAO
De posse destas 4 operaes passveis, podemos concluir que o nosso bloco processador dever poder receber 4 tipos de comandos distintos: SET, RESET, CPL e NOOP. Para representar quatro situaes diferentes, sero necessrias duas linhas de controle para o bloco processador, chamaremos estas linhas de OpSet e OpClr. Se compararmos a tabela de operao obtida para o bloco processador com a tabela verdade de um Flip Flop do tipo JK, poderemos observar o seguinte:
Circuito Processador
J
para o bloco de sada
K 0 1 0 1
do bloco de entrada
0
J K Q _ Q
Qa
0 1
Qa
0 1 1
OpSet OpClr
Em um FF do tipo JK, quando as entradas de dados esto ambas em zero, ao acontecer uma transio ativa do sinal de clock, a sada permanece no estado anterior Qa , o que equivale funo no operao NOOP. Quando as entradas J e K estiverem em estadas lgicos diferentes entre si, 01 e 10, os contedos destas entradas sero transferidos para as sadas Q e Q respectivamente. Isto equivale s funes de RESET e SET do nosso circuito processador. Por ltimo, quando as entradas J e K forem iguais a 1, ao acontecer uma transio ativa do clock, a sada Q assumir a situao de Q anterior barrado que corresponde funo complemento CPL. Temos ento, j definido, o nosso circuito processador que ser simplesmente um Flip Flop JK, capaz de processar 1 bit de dado. Com o exposto at aqui, o circuito processador j ser capaz de realizar os seguintes comandos ou instrues:
Mnemnico Descrio
Leva o contedo do processador ao estado lgico 1. Leva o contedo interno do processador ao estado lgico 0. Inverte o estado lgico do contedo do processador. No altera o contedo interno do processador. Copia o valor da entrada de dados para dentro do processador. Copia o contedo do processador para a sada de dados. Tabela 2: Conjunto de instrues do processador (incompleto).
Para que estas e outras instrues sejam executadas pelo circuito processador, elas devero estar armazenadas no bloco de memria do sistema, organizadas sob a forma de programa. Um programa, como j foi definido, um conjunto de instrues ordenadas adequadamente a fim de executar uma tarefa. Como um circuito de memria digital s capaz de armazenar 1's e 0's, as nossas instrues tero que necessariamente estarem representadas sob a forma de nmeros, cdigos binrios denominado CDIGO OPERACIONAL da instruo ou simplesmente "OPCODE". Estes cdigos ento que sero lidos e executados pelo sistema de uma forma contnua e seqencial. Quanto codificao das instrues vamos deixar para mais tarde. Agora vamos resolver agora a questo de como fazer com que as instrues, uma vez armazenadas na memria, apaream uma a uma na sada de forma contnua e seqencial a fim de orientar o sistema. Uma memria para colocar um de seus dados em sua sada, (operao de leitura), dever receber o endereo da localidade desejada em seu barramento de endereos. Conclui-se ento que deveremos desenvolver um circuito capaz de gerar endereos de forma contnua e seqencial. Um contador binrio realiza faO Computador de 1 bit. 4
cilmente esta tarefa. Gera nmeros binrios seqencialmente em suas sadas Q3, Q2, Q1, e Q0, toda vez que perceber uma transio ativa de clock em sua entrada de mesmo nome. Como este contador ser o responsvel por gerar endereos para possibilitar a execuo de programas, vamos denomin-lo CONTADOR DE PROGRAMA.
Figura 7: Incluindo suporte para as instrues HALT e RESTART. Se criarmos a possibilidade de exercer algum tipo de controle sobre as entradas de clock e clear do contador de programa, poderemos criar mais 2 instrues: HALT e RESTART. HALT Ao executar a instruo HALT, o sinal OpHLT\ deve ser gerado com o propsito de interromper o acesso da freqncia de clock ao contador de programa. Para tanto, ser necessrio lev-lo a nvel lgico 0 (ativo em 0). Com o sinal OpHLT\ em zero, a sada do gate do tipo AND permanecer em zero independentemente do sinal de clock. Isto quer dizer que: sem clock, o contador de programa no ser incrementado para acessar a prxima instruo da memria e sendo assim o sistema processador para. Depois de executar uma instruo deste tipo, o processador cessa o processamento e s ter condio de retornar se for dado um reset no contador de programa. RESTART 0 gate tipo AND na entrada de clear do contador de programa, gera duas vias ou possibilidades de reset no sistema. Uma delas, atravs da entrada de RSTin\. Basta levar esta entrada a nvel 0 para que a entrada clear do contador de programa tambm v a nvel 0, o que fora o contador a levar suas sadas de Q3 a Q0 a nvel 0. Sendo estas sadas o barramento de endereo da memria que contm o programa, equivale dizer que um RESET, fora o processador a recomear a execuo do programa a partir do endereo 0h. A segunda maneira possvel de se reiniciar a execuo do programa tambm a partir do endereo inicial 0h, atravs do sinal de controle OpRST\. Uma instruo criada ento com esta finalidade, assim que for executada, levar o sinal OpRST\ a 0 o que tambm resultar em um 0 na entrada MR (master reset) do contador de programa, levando o mesmo a enderear a posio 0h de memria. Conclui-se que o sistema possui agora, dois modos de ser reinicializado: POR HARDWARE via entrada de RESET, ou POR SOFTWARE via instruo RST.
O Computador de 1 bit.
Desta forma, observa-se que para que uma instruo de INPUT seja realizada, quando o cdigo binrio que a representa for selecionado pelo contador de programa, algum circuito dever receber e interpretar este cdigo gerando em sua sada o sinal de controle IN. De maneira semelhante, ao ser executada uma instruo SET, por exemplo, o cdigo 10 binrio dever ser gerado para as linhas de controle OpSet e OClr do bloco processador. Este comportamento ser vlido para todas as instrues que o sistema for projetado para suportar. O cdigo operacional destas instrues dever ser enviado a um circuito que seja capaz de entender ou DECODIFICAR estes cdigos, gerando ento em sua sada o sinal de controle adequado. Chamaremos ento este novo bloco de DECODIFICADOR DE INSTRUES e a sua sada ser composta por um conjunto de sinais de controle que iremos denominar PALAVRA DE CONTROLE ou CONTROL WORD. A funo do DECODIFICADOR DE INSTRUO ser ento a de receber em suas entradas o cdigo operacional da instruo que vai ser executada, e gerar em sua sada uma CONTROL WORD adequada, que ative as partes corretas do sistema a fim de que a instruo seja executada.
Este valor binrio colocado nas entradas de D3 a D0 corresponde, ento, ao novo endereo para onde queremos desviar o programa, e o sinal OpJp\ ser mais um sinal de controle gerado pelo decodificador de instrues toda vez que o mesmo perceber o cdigo operacional da instruo de JUMP em sua entrada. O endereo de desvio da execuo do programa dever ser uma informao a ser fornecida pela prpria instruo de JUMP, j que e a mesma que est causando o desvio.
O Computador de 1 bit. 6
Figura 9: Implementando instrues de desvio incondicional. Este fato cria uma nova modalidade de instruo com um novo formato. Toda instruo at agora, composta apenas de um cdigo operacional de 4 bits que alimenta diretamente o decodificador de instrues. Agora, 4 bits sero necessrios para representar o cdigo da instruo, mais 4 bits para representar o endereo de desvio.Sendo assim, esta nova instruo ter o comprimento de 1 byte (8 bits), sendo 4 bits de cdigo e 4 de endereo.
Estes novos 4 bits, sadas O7 a O4 da memria de programa, iro diretamente s entradas de D3 a D0 do contador de programa. Ao ser gerada a palavra de controle correspondente instruo JUMP, o sinal OpJp\ ser gerado pelo decodificador de instrues. Na prxima borda de subida do sinal de clock este novo endereo ser carregado no contador de programa, o que corresponde ao salto desejado. JUMP CONDICIONAL A instruo de JUMP que acabamos de implementar, executada toda vez que for encontrada na seqncia do programa. Se a mesma estiver contida no programa, sempre ser executada, incondicionalmente. Vamos desenvolver agora um novo tipo de JUMP. Este JUMP ter a mesma caracterstica do outro, ou seja, salta para a posio desejada da memria, mas s se uma determinada condio for satisfeita. A condio que vai ser testada por esta nova instruo ser o estado interno do bloco processador. Sabemos que este bloco tem a capacidade de executar instrues lgicas com 1 bit de dado. Vamos, ento, verificar se depois de uma determinada operao, o contedo do processador nvel 0 ou 1. Para isto, necessrio gerar um novo sinal de controle que ser acionado quando O jump condicional for executado. Chamaremos de JUMP ZERO, e o sinal gerado na control word, denominaremos OpJz. Toda vez que uma instruo do tipo JZ for executada, o sinal OpJz ser gerado pelo decodificador de instrues. Este sinal ser ento comparado com o contedo interno do processador. Para isto, basta realizar uma funo NAND com o sinal de controle OpJz e a sada complementada do bloco processador (Dado\). Quando o contedo do processador for 0, equivale dizer que a sada Q do FF JK ser 1. Ao executar uma instruo JPZ, o sinal OpJz ser ativado tambm em 1 o que leva a sada da NAND a 0. Este 0 levar o sinal PE a 0, carregando o endereo de jump contido na prpria instruo, no contador de programa. Mas se por outro lado, o contedo do processador for 1, a sada Q ser 0 e ativao do sinal OpJz, no afetar o sinal PE , no alterando o contedo do contador de programa que seguir a seqncia normal de endereamento que estava realizando. Concluindo, o JUMP ZERO (JZ) s ser executado se o contedo do processador for zero. A funo da porta NAND sinalizar o estado interno do processador. O circuito que desempenha esta funo conhecido por "FLAG" (sinalizador). No nosso sistema, toda vez que o FLAG ZERO for 1 indicar que o contedo do processador zero e vice versa.
bit 7......4 Endereo 3......0
OpCode
O Computador de 1 bit.
Contador de Programa
D0 D1 D2 D3
Memria de Programa
A0 A1 A2 A3 A4
Decodificador de Instrues
A0 A1 A2 A3 A4
OpHLT\
CLKin
5V
CP CET CEP
Q0 Q1 Q2 Q3 TC
Seleo
MR PE
CS
O0 O1 O2 O3 O4 O5 O6 O7
O0 O1 O2 O3 O4 O5 O6 O7
CS
74LS161 CI1
PROM32 CI2
PROM32 CI3
OpJz
OpRST\
Dado\
CI8A
CI5D
CI5A
RSTin\
OpJp\
Control Word
OpInp OpSet OpClr OpJz OpJp 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 0 1 1 1 1 1
OpOut OpHLT OpRST
Hexa
1 1 1 1 1 1 1 1 0 1
1 1 1 1 1 1 1 1 1 0
1 1 1 1 1 1 0 1 1 1
0F 4F 2F 6F 07 1F OE 8F 0B 0D
O Computador de 1 bit.
De posse desta tabela, temos condies de implementar um circuito lgico capaz de entregar na sada um byte diferente, correspondente a cada instruo. Este byte representar a control word especfica para a execuo da instruo. Um circuito que se presta muito bem a esta aplicao, uma memria do tipo ROM. Se assumirmos que, na Tabela 5, a coluna correspondente instruo (Hexa) como sendo endereo uma ROM, e a coluna control word como sendo os dados contidos nestes endereos, podemos concluir facilmente que o decodificador de instrues pode ser implementado a partir de uma ROM. Para isto, basta gravar em cada um dos 10 primeiros endereos o byte correspondente control word. Desta forma, o cdigo operacional de cada instruo vinda da memria selecionar a control word adequada para a realizao de cada instruo. Veja a Figura 11.
Busca Se acompanharmos no diagrama lgico do sistema, vereExecuo mos que o ciclo de busca, tambm conhecido por CICLO DE Figura 12: Temporizao dos ciclos FETCH, comea a partir da transio positiva do sinal de clock. de busca execuo. Ao sentir uma transio de subida de CLK, o contador de programa incrementado de 1, o que corresponde gerao de um novo endereo de memria. Estamos, ento, executando a busca de um cdigo operacional para execuo. O ciclo de fetch termina quando o OpCode se encontra na sada do decodificador de instrues, pronto para ser executado.
CICLO DE EXECUO 0 processo de decodificao da instruo e a gerao dos sinais de controle adequados fazem parte do ciclo de execuo da mesma. Este ciclo termina quando todas as tarefas necessrias realizao da instruo, j foram realizadas. 0 ciclo de execuo comea a partir da transio negativa do sinal CLK e termina quando comea um novo ciclo de fetch.
O Computador de 1 bit.
Instruo
Control Word
Contador de Programa
D0 D1 D2 D3 PE CP CET CEP
Q0 Q1 Q2 Q3 TC
4 3 21
Memria de Programa
A0 A1 A2 A3 A4
O0 O1 O2 O3 O4 O5 O6 O7
4 32 1
43 2 1
Decodificador de Instrues
A0 A1 A2 A3 A4
O0 O1 O2 O3 O4 O5 O6 O7
43 2 1
4 32 1
Seleo
MR
CS
CLK
5V
74LS163 CI1
CS
PROM32 CI2
PROM32 CI3
CI7B
CI5B
CLK
U4A
CI5A
OpHLT\
RSTin\
CI8A
OpJp\
CI4A
OpJz
OpRST\
RSTin\
Automtico
CP1 Q1 CP2 Q2
Clock
5V Manual
Dado\
0V
Dado
5V
Led
Input
CI4B
CI6B
OpSet
CLK
J CP K
R
S
Q _ Q
CI7A
S
J CP K
R
Q _ Q
OpInp
OpOut\
CLK
CI4C
CI4D
OpClr
CI6A
Dado\
5V
Buzzer
-
Registrador de Dados
RSTin\
Reset\
RSTin COM
270R
Incio
1.10.2 Fluxograma
Nesta etapa nos preocupamos apenas em ordenar a idia geral do programa em um fluxo contnuo e simblico. Vamos conhecendo os smbolos bsicos utilizados em fluxogramas, medida que eles forem sendo necessrios. No fluxograma, percebe-se que a primeira atividade que o programa dever realizar ser a de garantir que o LED esteja apagado. Sendo o circuito de sada e constitudo por um flip flop D, ao ligarmos o sistema no temos como garantir se o mesmo estar em nvel 1 ou em nvel 0. Da a necessidade de se levar a sada Output ao nvel 0. Em seguida, deve-se saber qual o estado da chave sensora, o que conseguido lendo o estado da entrada, utilizando a instruo INP.
Output = 0
Ler Chave
Chave =0? No
Sim
Output = 1
De posse do estado da chave, carregado no registrador de dados do processaFim dor, resta saber agora se este estado 0 ou 1, ou seja, se a chave esta fechada ou aberta respectivamente. Para isto necessrio introduzir um bloco de deciso nesta etapa do programa. Este bloco dever pesquisar se o valor agora contido no Figura 15: Fluxobloco processador 0 ou 1. Caso seja 0, porque a chave no foi aberta. O flugrama para o xo do programa dever voltar a ler chave, ficando ai amarrado neste loop at que o PGM-01. estado lido seja diferente de 0. Quando isto acontecer, porqu a chave ento foi aberta e o fluxo do programa dever seguir a opo N (no). Se a chave foi aberta, o programa dever sinalizar o evento, acendendo o LED de sada. Para isto basta fazer com que a sada Output v a nvel 1.
endereo real. Em JZ,LERCH, LERCH foi o label escolhido para onde dever ir o programa caso a condio seja satisfeita. Se JZ,LERCH no for realizado, o contador de programa no ser alterado e a seqncia do programa seguir normalmente. Neste caso o contedo do processador ser diferente de 0 ou seja, a chave sensora foi aberta. 0 LED de sada ento, dever ser aceso e o programa finalizado Isto conseguido estabelecendo o contedo do processador em 1 atravs da instruo SET e logo em seguida, transferindo este contedo para a sada atravs de um OUT. Em seguida, basta uma instruo HLT que fora o sistema PD-01 a parar o processamento. 0 sistema s sair da situao de HALT, quando ocorrer um RESET. Ordenando todos estes comandos a partir do endereo 0h, obteremos uma listagem que constituir no nosso programa. END. 0h 1h 2h 3h 4h 5h 6h OPCODE 02h 08h 07h 25h 01h 08h 09h LABEL INSTR. clr out LERCH: inp jz,lerch set out hlt COMENT. ;inicio ;inicializa saida ;testa chave de entrada ;atvia a sada ;para processamento
Figura 16: Programa fonte para o PGM-01. A coluna OPCODE corresponde seqncia de cdigos que efetivamente dever ser gravado na memria do sistema a partir do endereo 0h. Toda vez que o sistema receber um RESET, o contador de programa apontar para o endereo 0h de memria iniciando um ciclo de fetch, buscando a primeira instruo do programa, depois a segunda, a terceira, etc. A esta seqncia de cdigos executveis, se d o nome de PROGRAMA OBJETO ou simplesmente PROGRAMA EXECUTVEL.
PGM-03 Em um sistema de alarme, gerar um tom na sada (freqncia de udio), toda vez que a chave sensora da entrada for aberta. 0 tom dever permanecer mesmo se a chave for novamente fechada.
PGM-04 Elabore um programa que transforme o PD-01 em um oscilador monoestvel. Toda vez que ocorrer uma transio positiva na entrada sensora, a sada dever ser levada ao nvel alto durante 3 ciclos de clock.
PGM-05 Altere o programa PGM-04 para que a sada apresente um pulso de nvel baixo durante o maior intervalo de tempo que for possvel implementar.
O Computador de 1 bit.
12