Baixe o app para aproveitar ainda mais
Prévia do material em texto
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES GUILHERME DAL PIZZOL 2ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES SUMÁRIO CENTRO UNIVERSITÁRIO UNIFTEC Rua Gustavo Ramos Sehbe n.º 107. Caxias do Sul/ RS REITOR Claudino José Meneguzzi Júnior PRÓ-REITORA ACADÊMICA Débora Frizzo PRÓ-REITOR ADMINISTRATIVO Altair Ruzzarin DIRETORA DE EDUCAÇÃO A DISTÂNCIA (NEAD) Lígia Futterleib Desenvolvido pelo Núcleo de Educação a Distância (NEAD) Designer Instrucional Sabrina Maciel Diagramação, Ilustração e Alteração de Imagem Igor Zattera Revisora Ana Clara Garcia INTRODUÇÃO 3 PROJETO DE CIRCUITOS DIGITAIS 4 Álgebra Booleana 6 Portas Lógicas e Circuitos Lógicos 10 Derivação de Expressões Booleanas 18 Simplificação de Expressões 20 Circuitos combinacionais 29 Circuitos sequenciais 33 ESTRUTURA INTERNA DE UM COMPUTADOR – MODELO DE VON NEUMANN 42 Blocos funcionais 45 COMPUTADOR HIPOTÉTICO NEANDER 60 ARQUITETURAS DE ALTO DESEMPENHO 69 3ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES INTRODUÇÃO O estudo da arquitetura e da organização de computa- dores está presente em todos os cursos superiores de ciência da computação, engenharia da computação e afins. Em alguns cursos o seu conteúdo é ministrado em até quatro disciplinas distintas, dado a grande gama de arquiteturas e diferentes formas de organização dos computadores (e também de dispositivos computacionais) atuais. Além disso, estamos diante de uma disciplina fundamental para os cursos superiores tecnológicos, como o presente caso. Dessa forma, podemos pensar: como você pode tornar-se um exímio programador sem conhecer alguns detalhes de onde o seu programa será executado? É muito pertinente conhecer os detalhes de funcionamento do computador, pois levará você a entender quais os limites que seu programa poderá alcançar, ou até mesmo como deixá-lo mais eficiente. Assim como, pro- porcionará importantes critérios que facilitarão o seu estudo de sistemas operacionais. Para tanto, nosso estudo iniciará por uma visão de alto nível do que seria um sistema computacional atual (você verá que o modelo que usamos hoje é bastante antigo). Logo, passare- mos a imergir nos elementos que somados formam um modelo, desde as mais simples portas lógicas até os atuais dispositivos periféricos e os grandes computadores espalhados mundo afora. No primeiro capítulo, teremos uma rápida revisão de ál- gebra booleana, para depois fazermos o estudo da lógica digital mediante o uso de portas lógicas. Com o conhecimento obtido do estudo das portas lógicas passaremos a estudar circuitos combinacionais e sequenciais, que nada mais são que a junção de portas lógicas formando elementos de maior complexidade e diferentes finalidades. Ao final do capítulo, você deverá ser capaz de distinguir circuitos lógicos simples, simplificar expressões booleanas e até mesmo projetar um pequeno circuito lógico. No segundo capítulo, estudaremos o modelo de Von Neumann e seus componentes principais: unidade central de processamento (CPU), a hierarquia de memória e alguns bar- ramentos em conjunto com uma rápida abordagem sobre um dos principais dispositivos periféricos de entrada e saída, os discos rígidos. No terceiro capítulo, estudaremos o funcionamento de um computador hipotético, chamado NEANDER (WEBER, XXXX). Através do simulador desse computador, você irá compreender de forma simples como um programa é executado no seu computador. Finalmente, no último capítulo, abordaremos um pouco sobre as grandes máquinas disponíveis ao redor do mundo e no que elas diferem de nossos computadores do dia a dia. 4ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES PROJETO DE CIRCUITOS DIGITAIS Você sabia que todos os computadores utilizam aritmética binária para realizar suas operações? Desde os mais remotos tempos, o homem sempre buscou formas de resolver cálculos matemáticos o mais rapidamente possível. Como você já deve ter estudado em outras disci- plinas, evoluímos do ábaco chinês, passamos pelo ENIAC e hoje estamos na era da IoT (Internet of Things). Aprendemos e vivemos usando o sistema numérico decimal, e é com este que estamos acostumados em nosso dia a dia. Contudo, quando trabalhamos com dispositivos com- putacionais este sistema não é tão simples de ser utilizado diretamente. Precisamos armazenar ou guardar tal informação de alguma forma nos nossos dispositivos. Então, para cada dígito numérico precisaríamos ter 10 posições possíveis (0-9). Mesmo com a atual tecnologia digital disponível essa não seria uma tarefa simples, motivo pelo qual, em 1952, o matemático húngaro, radicado nos Estados Unidos, John Von Neumann, 5ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES d. dispositivos de entrada e saída, de forma a permitir a entrada de dados e sua respectiva saída. Como mencionado anteriormente, o sistema binário faz parte do coração do modelo de Von Neumann e está presente, praticamente, em todos os sistemas computacionais modernos. Por esse motivo, nosso estudo terá início por uma breve abordagem da álgebra booleana, a qual nos permitirá avançar ao estudo das portas lógicas e posteriormente à formação dos elementos básicos da estrutura de Von Neu- mann, a ULA e a UCP. sugeriu que o sistema binário (0 – 1) fosse utilizado em sistemas digitais, devido a facilidade de identificação dos níveis de eletricidade (0 – ausência e 1 – presença de eletricidade). Além disso, esse mesmo matemático propôs os elementos básicos de um sistema computacional “moderno”: a. uma memória para armazenar dados e programas (os computadores até então não eram capazes de armaze- nar programas); b. uma unidade de cálculos, chamada de ULA – Unidade Lógico Arit- mética, responsável por realizar as operações solicitadas pelo programa. Para tanto, utiliza registradores (ou acumuladores) para armazenar os dados; c. uma unidade de controle, chamada de UCP – Unidade Central de Pro- cessamento, cuja função primordial é comandar o f luxo entre as ins- truções do programa e os dados na memória; 6ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES Álgebra Booleana A álgebra dos números reais (do nosso dia a dia) utiliza infinitos valores para uma determinada variável. A álgebra booleana, por sua vez, utiliza apenas dois valores: • F (Falso) e V (Verdadeiro); • L (Low) e H (High); • 0 e 1 (eletrônica digital). O estudo da álgebra booleana foi iniciado ainda no século XIX e seu nome é uma homenagem a George Boole, ma- temático inglês, introdutor do sistema al- gébrico. Existe uma grande quantidade de teoria matemática desenvolvida na álgebra booleana, porém não é desta disciplina e não será tratada neste capítulo. O aluno que se interessar pode buscar esse conteúdo em diversos livros disponíveis gratuita- mente na internet. Na álgebra booleana existem três operações básicas, sendo que todas as de- mais podem ser derivadas formalmente daquelas: • Operação “OU” (“OR”), também conhecida por soma lógica; • Operação “E” (“AND”), também conhecida por multiplicação lógica, e • Operação “Complementação” (“NOT”), também conhecida por inversão ou negação. Assim, como cada variável na álge- bra booleana sempre irá assumir um dos dois possíveis valores (0 ou 1), para cada função ou equação algébrica também é possível montar uma tabela que decompõe a função em termos de suas variáveis (va- riáveis de entrada). Além disso, demonstra os possíveis resultados (variável de saída), tendo por base cada uma dessas combina- ções de variáveis. Dessa forma, tal tabela é chamada de “Tabela Verdade”. Logo, para a montagem da “Tabela Verdade” de operações simples, teremos tantas colunas quantas variáveis de en- trada, além de uma coluna extra com o resultado da operação. As linhas, por sua vez, serão geradas de acordo com o número de diferentes combinações das variáveis de entrada. Por exemplo, se a expressão envolver duas variáveis de entrada teremos quatro linhas na tabela verdade. Com três variáveis de entrada teremos oito linhas e assimpor diante. Lembre-se que estamos trabalhando com álgebra booleana, assim, o número de linhas sempre seguirá a exponenciação em base 2: 2 nº linhas = nº linhas na tabela verdade Operação “OU” - (“OR”) A operação “Ou” pode ser resumi- da da seguinte forma: “A operação OU resulta 1 (verdadeiro) se pelo menos uma das entradas da operação tiver o valor 1 (verdadeiro)”. Ou ainda, “a operação OU resulta 0 (falso) quando todas as suas en- 7ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES tradas tiverem o valor 0 (falso) ”. O símbolo comumente utiliza- do para representar a operação “ou” em equações/expressões algébricas é “+” ou ainda “v”. A operação deve ser realizada no mínimo com duas entradas (podem ser iguais). Sua tabela verdade para duas va- riáveis, A e B (lê-se A “ou” B), pode ser visualizada a seguir: Ou ainda com três variáveis, A, B e C (lê-se A “ou” B “ou” C): A operação “ou” também é conhe- cida por “soma lógica”. Operação “E” - (“AND”) A operação “E” pode ser resumida da seguinte forma: “A operação E resulta 0 (falso) se pelo menos uma das entradas da operação tiver o valor 0 (falso) ”. Ou ainda, “a operação E resulta 1 (verdadeiro) quando todas suas entradas tiverem o valor 1 (verdadeiro). O símbolo comumente utilizado para representar a operação “e” em equa- ções/expressões algébricas é “.” , ou ainda “^”. A operação deve ser realizada no míni- mo com duas entradas (podem ser iguais). Assim, sua tabela verdade para duas variáveis, A e B (lê-se A “e” B), pode ser logo visualizada: A B A . B 0 0 0 0 1 0 1 0 0 1 1 1 Ou ainda com três variáveis, A, B e C (lê-se A “e” B “e” C): A B C A . B . C 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 A B A + B 0 0 0 0 1 1 1 0 1 1 1 1 A B C A + B + C 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 8ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES A operação “e” também é conhecida por “multiplicação lógica”. Operação “Negação” - (“NOT”) A operação “Negação”, complemen- tação (complemento) ou ainda inversão (inverso), nada mais é que a troca do valor “0” pelo valor “1” e vice-versa. Assim, por receber apenas um único operando, cha- mam-na de operação unária. Também, diversos símbolos podem ser usados para representar tal operação, a depender do campo de atuação (progra- mação, eletrônica digital, lógica, etc.). Os mais comuns são: “~”, “ ´ ”, “!” ou “¯”. Sua tabela verdade pode ser expressa de maneira muito simples: A A’ (~A) 0 1 1 0 Leis e propriedades Para que possamos desenvolver nos- so estudo de álgebra booleana temos que conhecer algumas leis e propriedades bási- cas, muitas delas já conhecidas da álgebra dos números reais. Para a operação “ou”: • A + 0 = A • A + 1 = 1 • A + A = A • A + A’ = 1 Para a operação “e”: • A . 0 = 0 • A . 1 = A • A . A = A • A . A’ = 0 Para a operação “negação”: • A’’ = A (dupla negação) Todas as propriedades anteriores são facilmente verificadas por meio das tabelas verdade das respectivas opera- ções. Contudo, é importante que você as memorize, pois serão necessárias mais a frente, quando tratarmos de simplificação de expressões booleanas. Além dessas propriedades básicas, temos ainda a associatividade e a comuta- tividade. A primeira diz respeito à forma de agrupar as variáveis em uma equação com mais de uma operação, enquanto a segunda nos diz que a ordem dos fatores não altera o resultado da equação. Ambas podem ser facilmente compreendidas, pois também existem na álgebra dos números reais. Para auxiliar seguem seus exemplos com as operações “ou e “e”: • A + (B + C) = (A + B) + C (asso- ciatividade) • A . (B . C) = (A . B) . C (associa- 9ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES tividade) • A + B = B + A (comutatividade) • A . B = B . A (comutatividade) Outra propriedade existente na ál- gebra dos números reais decimais e que também está presente na álgebra booleana é a distributividade da multiplicação (lógi- ca) com relação à adição (lógica). Ou seja: A . (B + C) = (A . B) + (A . C) Para o estudo da álgebra booleana, duas outras regras são de suma importân- cia, são as leis ou teoremas de De Morgan, criadas ainda no século XIX. Esses teore- mas não são utilizados apenas na álgebra booleana, mas também em proposições de raciocínio lógico, na programação, na matemática e na filosofia. No que tange à algebra booleana, tais teoremas dizem o seguinte: a negação de um produto lógico (“E”) de variáveis é igual à soma lógica (“OU”) das negações das variáveis. Por outro lado, a negação de uma soma lógica (“OU”) de variáveis é igual ao produto lógico (“E”) de negações das variáveis. Ou seja, tais teoremas permi- tem converter operações “E” em operações “OU” e vice-versa, utilizando operações de negação. Ou seja, em termos de equações com duas variáveis teríamos: (A . B)’ = A’ + B’ (A + B)’ = A’ . B’ Com três variáveis teríamos: (A . B . C)’ = A’ + B’ + C’ (A + B + C)’ = A’ . B’ . C’ Avaliando expressões Avaliar uma expressão booleana nada mais é que determinar o valor daque- la expressão para cada uma das possíveis combinações de valores das suas variáveis de entrada. Nas seções anteriores já vimos como fazer isso! Basta montarmos a tabela verdade da equação sob análise. Fizemos o mesmo para as operações básicas e faremos o mesmo procedimento para as equações/ expressões. Contudo, antes de montarmos a ta- bela verdade, precisamos ter em mente a precedência das operações. As expressões são sempre avaliadas a partir do parêntesis mais interno. Além disso, a multiplicação lógica tem precedência sobre a adição, ou seja, sempre que não há um parêntesis determinando a ordem da operação, de- vemos resolver as multiplicações lógicas (“E”), para depois avaliarmos as adições lógicas (“OU”). Com relação à negação, ela deve ser resolvida o mais rápido possível. Ela tem precedência sobre as demais operações. É claro que se a negação for aplicada a uma sub-expressão entre parêntesis, essa deverá ser resolvida antes da aplicação da negação. Tendo por base o que já foi exposto, a montagem da tabela verdade é feita de modo semelhante ao que foi feito anterior- 10ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES mente. O número de linhas na tabela será dado pelo número de variáveis de entrada, usando a exponenciação de base 2, ou seja, 2n, onde n é o número de variáveis. O número de colunas da tabela ver- dade dependerá do número de variáveis, sub-expressões e complementos existentes na função algébrica. À esquerda, criaremos uma coluna para cada variável de entrada e à direita deixaremos uma coluna para o resultado final da função (variável de saída). Entre as colunas da entrada e da saída, criaremos tantas colunas quantas sub-expressões encontrarmos, além de eventuais variáveis negadas. Por exemplo, suponha a equação W = X + Y . Z’. A variável “W” nada mais é que o resultado da função, ou seja, nossa variável de saída. Para ela, deixaremos a coluna mais à direita em nossa tabela verdade. As demais variáveis, “X”, “Y” e “Z” são as nossas variáveis de entrada e deixaremos as três primeiras colunas reservadas a elas. Como não temos parên- tesis podemos partir para a avaliação dos complementos, multiplicações e adições, assim, nessa ordem. Como temos a variável Z’ (complemento de Z), deixamos uma coluna para esse resultado. Após, temos que avaliar a multiplicação Y . Z’ (Y “E” Z’). Finalmente, com o resultado da mul- tiplicação, faremos a soma lógica com X. O número de linhas desta tabela verdade será igual a oito, pois temos 3 variáveis de entrada (23 = 8). Note que poderíamos ocultar a colu- na com o rótulo X+ (Y.Z’), pois é equiva- lente à variável de saída “W”. Nas próximas tabelas não mais colocaremos essa coluna. Portas Lógicas e Circuitos Lógicos Nas seções anteriores, vimos que uma expressão booleana pode ser detalha- da e resolvida através da montagem de sua respectiva tabela verdade. Uma expressãobooleana também pode ser representa- da de forma gráfica, através de símbolos que representam as operações básicas e linhas (“fios”) que conectam as variáveis e resultados às operações. À esquerda dos símbolos temos as entradas (fio de entra- da) e à direita temos a(s) saídas, ou seja, o resultado lógico daquela operação. Esses símbolos são conhecidos como portas lógi- cas. Essas mesmas portas lógicas também são utilizadas para representar circuitos eletrônicos, abstraindo detalhes de sua implementação física. Nesses circuitos, o valor lógico 1 é representado por uma voltagem positiva (geralmente 3,3V ou 5V) e o valor lógico 0 pela ausência de voltagem (0V). As portas lógicas das três operações básicas, “OU”, “E” e “Complemento” po- X Y Z Z’ Y.Z’ X+(Y.Z’) W 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 1 1 1 0 1 1 0 0 0 0 1 0 0 1 0 1 1 1 0 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 0 0 1 1 11ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES dem ser visualizados nas figuras a seguir: Porta lógica OU de duas entradas Porta lógica E de duas entradas Porta lógica Inversor (“Complemento”) As portas lógicas com mais entradas (variáveis) têm o mesmo símbolo gráfico, apenas acrescentamos um novo fio do lado esquerdo da porta lógica, com o respectivo nome da entrada adicionada. De posse do conhecimento destas três portas lógicas, podemos iniciar a cons- trução de expressões de forma gráfica. Desse modo, do processo de construir tais expressões, surgem os circuitos lógi- cos, que nada mais são que um conjunto de portas lógicas e conexões entre elas, de forma a expressar uma determinada função booleana. A construção do circuito lógico ocorre da mesma forma que a avaliação da expressão booleana, ou seja, precisamos ter em mente a precedência das operações. As expressões são sempre avaliadas a partir do parêntesis mais interno. Além disso, a multiplicação lógica tem precedência sobre a adição, ou seja, sempre que não há um parêntesis determinando a ordem da ope- ração, devemos resolver as multiplicações lógicas (“E”), para depois avaliarmos as adições lógicas (“OU”). O primeiro passo nessa construção é verificar a quantidade de variáveis de entrada. Para cada uma delas, criamos 12ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES um rótulo com seu nome à esquerda do circuito e traçamos um fio para a direita (uma linha simples). Para cada variável negada, conectamos à entrada do inversor o fio da variável e seguimos com o fio para a direita, a partir da saída do inversor. Posteriormente, para cada sub-ex- pressão, na sua respectiva ordem, conec- tamos as entradas necessárias na porta lógica correspondente, mediante a utili- zação dos fios (linhas) disponíveis e, na saída da porta lógica, seguimos com fios para a direita. Para o exemplo da expressão da se- ção anterior W = X + Y . Z’ teríamos os seguintes passos: 1. Desenhamos os rótulos das três va- riáveis X, Y e Z à esquerda e traça- mos os seus fios para a direita; 2. Conectamos um inversor na variável Z e traçamos a continuidade do fio relativo a Z’ para a direita; 3. Como não temos parêntesis, resol- vemos as operações “E” e depois as operações “OU”; 4. Usamos uma porta E para a ex- pressão Y . Z’, conectando as duas entradas da porta E aos fios de Y e de Z’. Na saída dessa porta fazemos o prolongamento de um fio para a direita; 5. Finalmente, conectamos o fio criado em 4 a uma das entradas de uma porta OU e o fio relativo à variável X na outra entrada da porta OU. Com isso, temos o resultado final na saída dessa porta. Além das três portas lógicas já men- cionadas, outras duas são importantes na eletrônica digital, devido às questões de implementação física das portas em chips. A primeira delas é a porta NAND. Ela executa a negação da operação “E” (“AND”), ou seja, é equivalente à expressão (A . B)́ . Seu nome é a junção dos termos em inglês das duas operações: NOT + AND. Sua tabela verdade pode ser visu- alizada a seguir: A B (A . B)’ 0 0 1 0 1 1 1 0 1 1 1 0 Graficamente, é semelhante à jun- ção de uma porta “E” (“AND”) e um in- versor em sua saída. Porta NAND de duas entradas 13ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES Para a porta OU temos também sua negação. É a porta NOR. Ela executa a negação da operação “OU” (“ORG”), ou seja, é equivalente à expressão (A + B)́ . Seu nome é a junção dos termos em inglês das duas operações: NOT + OR. Sua tabela verdade pode ser visualizada a seguir: A B (A + B)’ 0 0 1 0 1 0 1 0 0 1 1 0 Em gráfico, é semelhante à junção de uma porta “OU” (“OR”) e um inversor em sua saída. Porta NOR de duas entradas Por fim, temos mais uma porta lógi- ca de extrema importância na computação: a porta XOR, também conhecida pelo nome “ou-exclusivo”. Em termos de função booleana, com duas variáveis, ela equivale à seguinte ex- pressão: (A + B) . (A . B)’ O símbolo comumente utilizado para representar a operação “XOR” em equações/expressões algébricas é “⊕”. A operação deve ser realizada no mínimo com duas entradas (podem ser iguais). Sua tabela verdade para duas vari- áveis, A e B (lê-se A “XOR” B), pode ser visualizada abaixo: Porta XOR de duas entradas A porta XOR tem o mesmo com- portamento da operação de soma biná- ria na representação de complemento de dois, desprezando o “vai-um” ou “carry out”. Ou seja, ela pode ser utilizada para construir circuitos que realizam soma em computadores. Outra utilização muito comum da operação XOR é como geradora de pari- dade par. A título de curiosidade, a pari- dade é uma forma básica de tolerância com falhas, sendo capaz de detectar alterações de conteúdo armazenados ou transmitidos de forma binária. Mas, como isso é feito? Primeiramente, estabelecemos uma regra: qualquer informação a ser armazenada deverá ter um número PAR de “1”. Com essa regra, olhamos para a informação a ser armazenada buscando verificar a quan- tidade de “1” existente. Se for um núme- ro ímpar, armazenamos uma informação A B A ⊕ B 0 0 0 0 1 1 1 0 1 1 1 0 14ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES extra “1”. Se for um número par, então, armazenamos uma informação extra “0”. Note que este comportamento da paridade é exatamente o que faz a função XOR, conforme tabela verdade anterior. Pense em “A” e “B” como a informação que precisamos armazenar e a coluna de resul- tado sendo exatamente a paridade, a qual irá garantir que os dados estão íntegros. A função XOR também é de grande utilidade na área da criptografia, por ser um cifrador e decifrador rápido e de baixo custo. Tal decifrador permite criptografar (“embaralhar”) uma informação, tendo por base, por exemplo, uma senha, e descrip- tografar (“desembaralhar”) a informação criptografada com a mesma senha. Olhe para a tabela verdade e pense que “A” é a informação a ser criptografada, “B” é a senha e o resultado da operação é a informação (“A”) criptografada. Agora, olhe ao contrário, ou seja, o resultado da operação é a informação que você quer descriptografar e “B” é a senha. Note que o resultado dessa nova operação XOR é exatamente a informação original que es- tava em “A”. É claro que essa tabela verdade tra- balha com um único bit. Atualmente, as senhas utilizadas possuem 64 ou 128 bits (ou mais). Entretanto, a operação XOR funciona da mesma forma para 1, 64, 128 ou 1024 bits. Vamos exercitar o que estudamos até aqui? Então... Dicas importantes: para os exercícios de álgebra booleana e seguintes, você pode utilizar o software MMLogic, disponível para download em (http://www.softronix. com/logic.html). Você poderá desenhar os circuitos lógicos e testá-los para validar, inclusive, as tabelas verdade dos exercícios. 1. Desenvolva a tabela verdade para as seguintes expressões booleanas: b. A . B . C + (A . B . C)’ c. (A + B) (A + C)’ (A’ xor B)’ d. A + (B’ + A . C)’ xor D’ 5. Considerando os valores binários abaixo, calcule o valor de X em cada um dos casos: A = 1011 B = 1110 C = 0011 D = 1010 a. a) X =A . (B xor C) b. b) X = ( ( A + (B’ xor D)’ ) . (C’ + A) + B ) . (A + B)’ c. c) X = A xor B + C’ . B + A’ 3. Desenhe o diagrama lógico (circuito lógico) correspondente as expressões dos exercícios 1 e 2. 4. Construa a expressão lógica correspondente aos seguintes diagramas: 5. Um computador deve adicionar um bit de paridade a caracteres codificados em ASCII em 7 bits. Acrescente o bit de paridade para obter: a. paridade par, no caractere 1001101 b. paridade ímpar, no caractere 1101101 c. paridade ímpar, no caractere 1001101 d. paridade ímpar, no caractere 1101101 6. Indique duas utilidades da porta XOR. Cálculo da paridade, soma sem carry. 7. Monte a tabela verdade das seguintes equações booleanas. a. F = ab + cd + abc b. F = abc . (bc + ab)’ c. F = ( ab + ( ac + bc ) ’ ) ’ d. F = ( (a + ( bc )’ ) . ( ( ab + c )’ ) )’ 18ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES Derivação de Expressões Booleanas Nas seções anteriores aprendemos como devemos proceder para avaliar uma função booleana e como representá-la de forma gráfica. No entanto, devemos lem- brar que na vida real nem sempre teremos uma função booleana pronta para imple- mentar. Na maioria das vezes é exatamen- te o contrário! Ou seja, sabemos quantas entradas existirão em nosso circuito (ou em nossa equação) e sabemos, para cada uma das combinações das entradas, qual será o valor da saída. Esse é o nosso desafio agora! Como devemos escrever a expressão booleana que representa essa nossa entrada e saída? Como em uma função booleana ape- nas podemos ter duas saídas possíveis para cada uma das combinações da entrada, assim, podemos optar por verificar todas as combinações de entradas que geram uma saída igual a “1”, ou verificar todas as entradas que geram uma saída igual a “0”. No primeiro caso, temos o método da soma de produtos (SdP), onde somente estaremos interessados nas saídas de valor “1”. No segundo caso, temos o método do produto de somas (PdS), onde somente estaremos interessados nas saídas de valor “0”. Soma de Produtos Já vimos que numa montagem da tabela verdade de uma função booleana, teremos 2n diferentes combinações (n = número de variáveis de entrada), sendo as linhas na tabela. Para cada uma dessas linhas (combinações) podemos escrever um termo produto, no qual todas as variáveis estarão representadas. A representação desse termo produ- to deve ser construída da seguinte forma: se a variável correspondente na combina- ção tiver o valor “0” ela deverá ser gerada no termo produto de forma negada. Caso contrário, se o valor for “1” ela deverá ser gerada normalmente. Veja o exemplo a seguir, com uma função de três variáveis: Cada termo produto na tabela acima é chamado de mintermo. Para verificar se a construção do mintermo está correta, basta substituir o valor da variável na expressão e resolvê-la. Caso o valor encontrado seja 1, há grandes chances de estar correto. Por exemplo, em A’.B’.C’ teríamos 0’.0’.0’ ou 1.1.1 = 1. Tendo construídos os mintermos, basta verificar o valor de saída para cada uma das combinações. Aquelas que forem igual a 1, terão o seu mintermo levado para a expressão booleana final. Caso ocorra mais de uma combinação na expressão, A B C Termo Produto (Mintermo) 0 0 0 A’.B’.C’ 0 0 1 A’.B’.C 0 1 0 A’.B.C’ 0 1 1 A’.B.C 1 0 0 A.B’.C’ 1 0 1 A.B’.C 1 1 0 A.B.C’ 1 1 1 A.B.C 19ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES todas elas deverão ser unidas por opera- ções “OU”. Suponha então que para a função da tabela acima, tivéssemos as seguintes saídas: Os mintermos associados aos valores de W = 1 são apenas os 4 acima indica- dos em verde. Ou seja, são os mintermos A’.B.C’, A’.B.C, A.B’.C e A.B.C’. Basta, agora, unirmos estes min- termos com operações “OU” e teremos nossa função booleana. Os símbolos das operações “E” podem ser omitidos para facilitar a visualização. A’BC’ + A’BC + AB’C + ABC’ Produto de Somas A construção de uma expressão através do produto de somas funciona de maneira oposta àquilo que vimos na construção da soma de produtos. Não te- mos mais a representação das variáveis em termo produto, mas sim em termos soma. Sua construção ocorre da seguinte forma: se a variável correspondente na combinação tiver o valor “1” ela deverá ser gerada no termo produto de forma negada. Caso contrário, se o valor for “0” ela deverá ser gerada normalmente. Veja o exemplo abaixo, com uma função de três variáveis: Cada termo soma na tabela acima é chamado de maxtermo. Para verificar se a construção do maxtermo está cor- reta, basta substituir o valor da variável na expressão e resolvê-la. Caso o valor encontrado seja 0, há grandes chances de estar correto. Por exemplo, em A’.B’.C’ teríamos 1’+1’+1’ ou 0+0+0 = 0. Tendo construídos os maxtermos, basta então verificar o valor de saída para cada uma das combinações. Aquelas que forem igual a 0, terão o seu maxtermo levado para a expressão booleana final. Caso ocorra mais de uma combinação na expressão, todas elas deverão ser unidas por operações “E”. A B C Termo Produto (Mintermo) W 0 0 0 A’.B’.C’ 0 0 0 1 A’.B’.C 0 0 1 0 A’.B.C’ 1 0 1 1 A’.B.C 1 1 0 0 A.B’.C’ 0 1 0 1 A.B’.C 1 1 1 0 A.B.C’ 1 1 1 1 A.B.C 0 A B C TermoSoma(Maxtermo) 0 0 0 A+B+C 0 0 1 A+B+C’ 0 1 0 A+B’+C 0 1 1 A+B’+C’ 1 0 0 A’+B+C 1 0 1 A’+B+C’ 1 1 0 A’+B’+C 1 1 1 A’+B’+C’ 20ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES Então, suponha que para a função da tabela anterior, tivéssemos as seguintes saídas: Os maxtermos associados aos valo- res de W = 0 são apenas os 4 acima indica- dos em verde. Ou seja, são os mintermos A+B+C, A+B+C’, A’+B+C e A’+B’+C’. Basta agora unirmos estes maxter- mos com operações “E” e teremos nossa função booleana. (A+B+C).(A+B+C’).(A’+B+C).(A’+B’+C’) Note que no produto de somas, obri- gatoriamente, precisamos de parêntesis em cada uma das somas! (Por quê?) Simplificação de Expressões Você pode ter percebido que as ex- pressões geradas pelas somas de produto ou produto de somas sempre possuem em cada um de seus termos todas as variáveis da equação. Essas expressões, geralmente, não são as ideais para implementação com portas lógicas, pois consomem um grande número das mesmas. Dessa forma, temos sempre que ten- tar minimizar o número de sub-expressões ou o número de variáveis em cada uma das sub-expressões. Estudaremos duas aborda- gens: a fatoração e os mapas de Karnaugh. Fatoração A primeira abordagem que podemos optar é aplicar as leis e propriedades que estudamos nos capítulos anteriores, além de algumas outras que trataremos agora. Tal técnica é conhecida por fatoração. Apenas para relembrar, tínhamos: • Identidades – A + 0 = A – A + 1 = 1 – A + A = A – A + A’ = 1 – A . 0 = 0 – A . 1 = A – A . A = A – A . A’ = 0 – A’’ = A (dupla negação) • Comutatividade – A + B = B + A – A . B = B . A A B C Termo Produto (Mintermo) W 0 0 0 A+B+C 0 0 0 1 A+B+C’ 0 0 1 0 A+B’+C 1 0 1 1 A+B’+C’ 1 1 0 0 A’+B+C 0 1 0 1 A’+B+C’ 1 1 1 0 A’+B’+C 1 1 1 1 A’+B’+C’ 0 21ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES • Associatividade – A + (B + C) = (A + B) + C – A . (B . C) = (A . B) . C • Distributividade – A . (B + C) = (A . B) + (A . C) • Teoremas de De Morgan – (A . B . C)’ = A’ + B’ + C’ – (A + B + C)’ = A’ . B’ . C’ No que tange à distributividade, ainda temos uma outra propriedade não existente na álgebra convencional: é a dis- tributividade da soma lógica em relação à multiplicação lógica: A + (B . C) = (A + B) . (A + C) Além dessas temos a absorção: • A + (A.B) = A • A . (A+B) = A Apenas para fins didáticos, vamos demonstrar rapidamente como aplicar as leis e propriedades anteriores na simpli- ficação da expressão algébrica correspon- dente à absorção: 1. A + (A . B) a. A + (A . B) → Aplicamos a dis- tributividade (ou termo em co- mum) para chegarmos no passo b abaixo b. A . (1 + B) → Aplicamos a iden- tidade da adição lógica (X + 1 = 1) c. A . (1) → Aplicamos a identidadeda multiplicação lógica (X . 1 = 1) d. A 2. A . (A + B) c. A . (A + B) → Aplicamos a dis- tributividade (ou termo em co- mum) para chegarmos no passo b abaixo d. A.A + A.B → Aplicamos a iden- tidade da multiplicação lógica (A. A = A) e. A + A.B → Chegamos na mes- ma expressão do item 1 anterior (basta aplicar a mesma sequência de fatoração) f. A Temos mais duas importantes pro- priedades: A + A’.B = A + B (A+B). (A+C) = A + B.C Vamos fazer a fatoração destas duas identidades, apenas para fins didáticos: 1. A + A’.B a. A + A’.B → Termo em comum b. (A+A’) . (A+B) → Identidade da soma lógica 22ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES c. 1 . (A + B) → Identidade da mul- tiplicação lógica d. A + B 2. (A+B) . (A+C) a. (A+B) . (A+C) → Distributiva b. A.A + A.C + B.A + B.C → Co- mutativa c. A.A + A.C + A.B + B.C → Iden- tidade da multiplicação d. A + A.C + A.B + B.C → Termo em comum e. A + A . (C + B) + B.C → Termo em comum f. A . (1 + (C + B)) + B.C → Iden- tidade da adição g. A . (1) + B.C → Identidade da multiplicação h. A + B.C Como último exemplo, vamos fa- torar a seguinte equação (omitimos os símbolos da operação “E”): S = ABC + AC’ + AB’ 1. ABC + AC’ + AB’ a. A (BC + C’ + B’) → Fator co- mum b. A (BC + (C’ + B’) ) → Asso- ciativa c. A (BC + (CB)’ ) → De Morgan d. A (BC + (BC)’ ) → Comutativa e. A (1) → Identidade da adição (X + X’ = 1) f. A Pense agora na implementação em termos de circuito lógico. Como ficaria? Qual seria mais simples? Mapas de Karnaugh A segunda forma de simplificar- mos uma expressão algébrica é baseada em uma identificação tabular de mintermos, de acordo com uma ordem pré-definida em tabelas conhecidas por diagramas ou mapas de Karnaugh. Os mapas de Karnaugh nada mais são que tabelas verdade, agrupadas de forma a manter uma sequência tal das variáveis, a fim de que os respectivos va- lores sejam modificados em apenas um dos algarismos. Em uma expressão com apenas duas variáveis, a premissa anterior é facilmente obtida por meio do mapa a seguir: 23ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES Mapa de Karnaugh para duas va- riáveis. Fonte: GUNTZEL 2005. Note que os valores da variável “A” estão dispostos nas linhas da tabela e, entre as duas linhas dela apenas um algarismo é modificado. Na primeira linha temos “A=0” e na segunda linha “A=1”. O mesmo ocorre com a variável “B”, disposta nas colunas, onde apenas um algarismo é modificado entre as duas colunas. Na primeira coluna temos o valor “B=0” e na segunda coluna “B=1”. Por outro lado, com três variáveis a organização do mapa de Karnaugh é um pouco distinta, mas a premissa continua sendo respeitada: Mapa de Karnaugh para três variáveis. Fonte: GUNTZEL 2005. Nas linhas do mapa de Karnaugh, com três variáveis, continuamos com os valores da variável “A”. Nas colunas, por sua vez, precisamos acomodar as variáveis “B” e “C”. Dessa forma, precisaremos de 4 colunas para representar todos os valores possíveis. Nesse caso, note que a premissa anterior está assegurada: somente ocorre uma única mudança de algarismo entre dois valores adjacentes (00 01 11 10). Finalmente, em um mapa de Kar- naugh para quatro variáveis distintas, pre- cisaremos também de 4 linhas, de forma a acomodar os 4 valores distintos para as combinações possíveis de “A” e “B”. Note, pela figura a seguir, que nossa premissa de alteração de apenas um único algarismo continua válida, seja nas linhas, seja nas colunas. Mapa de Karnaugh para quatro variáveis. Fonte: GUNTZEL 2005. Já vimos como estruturar as linhas e colunas dos diagramas de Karnaugh. Mas, como preencher o conteúdo de cada uma das células? Como nas linhas e colu- nas temos os valores possíveis para cada uma das variáveis, basta agora olhar para a tabela verdade e preencher cada uma das células com o respectivo valor da função. Nas figuras anteriores já foi infor- mado previamente qual mintermo deve ser informado em cada uma das células, con- siderando que as linhas da tabela verdade 24ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES fossem numeradas a partir do número 0. Dessa forma, o mintermo m0, refere-se ao valor da primeira linha da tabela verdade, o mintermo m1 ao valor da segunda linha da tabela verdade, e assim por diante, con- forme a seguinte tabela verdade (apenas para três variáveis). Montando o diagrama da Karnaugh para essa tabela verdade teríamos: Finalizada a montagem do mapa/ diagrama de Karnaugh, podemos passar a etapa de simplificação da expressão bo- oleana. O que precisa ser feito nessa etapa é agrupar TODOS os mintermos com valor igual a 1, que sejam adjacentes, em quadras, pares e mintermos isolados. O agrupamento deve ser feito nessa ordem, para que a expressão possa ser simplificada ao máximo. Não devemos deixar nenhum mintermo 1 sem ser considerado. É impor- tante ressaltar que um mesmo mintermo 1 pode pertencer a mais de um agrupamento. A ideia básica por trás destes agru- pamentos é identificar variáveis que se mantenham constantes em mintermos de valor 1 adjacentes, já que elas são deter- minantes no resultado daquele mintermo. Ora, se o valor da função manteve-se em “1” nos mintermos adjacentes, mesmo com uma variável sendo alterada, esta variável não precisa estar na sub-expressão (ela não interfere no resultado). No exemplo anterior, podemos iden- tificar dois pares de mintermos 1 adjacente (não podemos considerar as diagonais) e um mintermo isolado. Não existem qua- dras (quatro mintermos 1 adjacente). A identificação das quadras pode ser feita levando em consideração as bordas. Ou seja, você pode juntar as bordas laterais e as bordas superior e inferior. Após a identificação das quadras, pares e mintermos 1 isolados, precisa- mos montar a expressão final, simplifi- cada pelo diagrama. A ordem aqui não tem importância, pela regra da comuta- tividade. Assim, começaremos pelo min- termo 1 isolado. Poderíamos verificar a qual mintermo ele se refere através das tabelas que montamos anteriormente, ou seja, chegaríamos à conclusão que ele se refere ao m5 que, por sua vez, refere-se à expressão A.B’.C. Para evitar a necessidade de decorar tais informações, vamos usar a seguinte regra: verifique nos rótulos das colunas e das linhas envolvidas quais va- riáveis não tiveram seus valores alterados. A B C Termo Produto Mintermo W 0 0 0 A’.B’.C’ m0 0 0 0 1 A’.B’.C m1 0 0 1 0 A’.B.C’ m2 1 0 1 1 A’.B.C m3 1 1 0 0 A.B’.C’ m4 0 1 0 1 A.B’.C m5 1 1 1 0 A.B.C’ m6 1 1 1 1 A.B.C m7 0 25ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES Para essas variáveis monte o produto entre elas, complementando aquelas cujo valor seja 0 e mantendo as demais na forma ori- ginal. Desse modo, também chegaríamos à mesma expressão, pois o valor de A é “1”, o valor de B é “0” e o valor de C também é “1”, resultando em A.B’.C. Seguimos a análise para os dois pares encontrados, iniciando pelo par na horizontal. Esse par está na linha em que o valor de A é “0”, o valor de B é “1” nas duas colunas e o valor de C varia de “1” para “0”. Pela regra acima, concluímos que apenas A e B não tiveram alteração de valor e são essas as variáveis determinantes para tal parte da expressão. Como o valor de A é “0” neste par, teríamos: A’.B. O próximo par, na vertical, está na coluna em que B tem o valor “1” e C tem o valor “0”. O valor de A, por sua vez, variou de “0” para “1”. Pela mesma regra, temos que apenas B e C comporão essa parte da expressão. Temos, então, B.C’. Finalmente, como estamos traba- lhando com soma de produtos, basta unir- mos todas as expressões encontradas pela operação “OU”. A.B’.C + A’B + B.C’ Perceba que a expressão simplifi- cada, gerada pelo mapa de Karnaugh é muito mais simples que aquela gerada pela simples soma de produtos (A’BC’ + A’BC + AB’C + ABC’). Como exercício, experimente fatorar (usando as leis e propriedades) a expressão A’BC’ + A’BC + AB’C + ABC’ e veja se você chega a mesma simplificação obtidapelo mapa de Karnaugh. Para expressões com quatro vari- áveis, o mecanismo de simplificação é o mesmo, porém temos que considerar antes das quadras a existência de oitavas, ou seja, oito mintermos 1 adjacentes. Sempre lembre que a adjacência pode ocorrer nas bordas do diagrama de Karnaugh. Por exemplo, suponha a tabela ver- dade que segue: 26ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES Transpondo a tabela verdade para o diagrama de karnaugh com 4 variáveis temos: O próximo passo é encontrar as oi- tavas, quadras, pares e termos isolados, de forma a não deixar nenhum mintermo 1 não coberto. Pelo diagrama anterior, temos uma oitava, uma quadra e um par. Por fim, temos que analisar em cada agrupamento quais variáveis não tem seu valor alterado para formar as sub-expressões. No caso, para a oitava temos que o valor de A, B e C são modificados ao longo da mesma e os valores de D são os únicos que se mantêm. No caso, o valor de D é “1” e a sub-expressão relativa à oitava é “D”. Temos uma quadra em que o valor de A é fixo em “1” e o valor de C fixo em “0”. Assim, a respectiva sub-expressão é A.C’. Por fim, temo um par, onde o valor de A e B são fixos em “0” e o valor de C fixo em “1”. Portanto, temos A .́B .́C. A expressão final simplificada é ob- tida pela junção das sub-expressões com a operação “OU”: D + AC’ + A´B´C. A B C D W 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 1 0 1 0 0 0 0 1 0 1 1 0 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 0 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 0 0 1 1 1 1 1 Vamos exercitar o que estudamos até aqui? Então... 1. Simplifique as seguintes expressões usando as leis da álgebra: a. a) Y = A . B . C + (A . B . C)’ b. b) Y = ((A.A)’.(B.B)’)’ c. c) Y = ((A.B)’.(A.B)’)’ d. d) Y = ABC . (BC+AB)’ e. e) S = (X’+X’.Y).(X+Y’).(X’.Y)’ f. f) Y = A.B.C.D + A.B.C.D’ 2. A partir das tabelas verdade, desenvolva e simplifique as expressões usando mapas de Karnaugh. 29ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES Circuitos combinacionais Até o presente momento, todas as expressões booleanas que trabalhamos geravam circuitos razoavelmente sim- ples. As saídas (ou saída) desses circuitos sempre eram determinadas tão somente pelos valores das respectivas variáveis de entrada. Tanto é verdade que as tabelas verdade continham apenas colunas com os valores das variáveis de entrada e uma coluna para a variável de saída. Tais cir- cuitos são ditos combinacionais, visto que são resultado direto da combinação das variáveis de entrada. Nesse modelo de circuito não existe nenhum tipo de memória ou de armaze- namento, pois são sempre construídos com portas lógicas simples, sem realimentação, ou seja, a saída de determinada porta ló- gica nunca é utilizada como entrada dela mesma. Dessa maneira, esse tipo de circuito combinacional gera os primeiros elementos de maior porte em um sistema compu- tacional, entre os quais podemos citar o multiplexador, o decodificador e a unida- de lógico aritmética. Sendo essa última responsável por todos os cálculos em um processador. São esses circuitos especiais que passaremos a analisar a partir de agora. Multiplexador O multiplexador nada mais é que um seletor. Ou seja, ele é capaz de selecio- nar um dos valores da entrada é copiá-lo para a saída. Logo, a seleção de qual dos valores será copiado na saída é feita atra- vés de uma entrada adicional, um sinal de controle chamado de seletor ou linha de seleção. Um multiplexador, em termos de circuito lógico e tabela verdade, possui m entradas e uma única saída. Por exemplo, 8 (m) entradas e uma saída. Esse multi- plexador é chamado 8-para-1. (8 entradas, 1 saída). De uma maneira geral, temos: Observe que sempre temos uma re- lação direta entre o número de entradas e o número de linhas de seleção ou sele- tores, obedecendo a relação de √m. Ou seja, para um multiplexador de 4 entradas precisamos de 2 seletores (22 = 4), para 8 entradas, 3 seletores (23 = 8) e assim por diante. Em termos de programação o mul- tiplexador é equivalente a estrutura “case” ou “switch/case”: case seleção of 0: saída := entrada0; 1: saída := entrada1 .. m: saída := entradam Multiplexador Num. Entradas Núm. Linhas Seleção 2-para-1 2 1 4-para-1 4 2 8-para-1 8 3 16-para-1 16 4 30ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES Para um multiplexador de duas en- tradas teríamos a tabela verdade adiante. Lembre que para duas entradas precisamos de um único seletor. Ou seja, serão três colunas da tabela verdade representando variáveis de entrada (duas entradas e o seletor) e uma coluna para a saída. Perceba, pela tabela verdade, que sempre que o seletor (sel) está em “0” a saída (s) é exatamente o valor da entrada0 (a). Sempre que o seletor está em “1” a saída (s) é igual ao valor da entrada1 (b). Construindo a expressão boolea- na através da soma de produtos (a’.b.sel + a.b’.sel’ + a.b.sel’ + a.b.sel) e realizando a simplificação chegamos a: a.sel’ + b.sel, cujo circuito lógico seria, então: Circuito lógico multiplexador 2-para-1 Contudo, como o multiplexador possui uma função própria bem estabe- lecida, conforme visto antes, utilizamos um símbolo específico para ele. Representação simbólica multiplexador 2-para-1 Decodificador Se o multiplexador funcionava como um seletor, podemos dizer que o decodifi- cador faz o papel inverso. É um elemento que possui mais saídas do que entradas. A cada instante de tempo, todas saídas terão o valor “0”, exceto uma, que terá o valor “1”. A saída que terá o valor “1” depende do valor das entradas, seguindo uma regra: “se o valor codificado nas entradas é “x”, a saída de índice “x” será igual a “1”. A relação entre o número de entra- das e saídas segue a exponenciação na base 2. Ou seja, se temos n entradas, teremos 2n saídas. Por exemplo, um decodificador de 2 entradas terá 4 saídas, de 3 entradas terá 8 saídas e assim por diante. Entrada0 (a) Entrada1 (b) Seletor (sel) Saída| (s) 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 1 1 0 1 0 1 1 0 1 1 1 1 1 Decodificador Num. Entradas Núm. Saídas 1-para-2 1 2 2-para-4 2 4 3-para-8 3 8 4-para-16 4 16 31ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES Para um decodificador 2-para-4 teríamos a tabela verdade posterior. Ao contrário de outras tabelas verdade agora teremos mais de uma saída. Entretanto, a forma de construir a mesma não muda, ou seja, entradas são representadas nas colunas à esquerda e as saídas nas colunas à direita. Note, pela tabela verdade, que as saídas sempre ficam zeradas, exceto uma. Quando as entradas correspondem ao va- lor “0”, saída0 é que está em “1”. Quando as entradas correspondem ao valor “1”, a saída1 está ativa. Quando as entradas correspondem ao valor “2”, a saída 2 está ativa, e assim por diante. A construção das equações boolea- nas e, consequentemente, do circuito ló- gico, funciona da mesma forma. A única diferença é que temos 4 equações envol- vidas: uma para s0, outra para s1, s2 e s3: • s0 = á .b´ • s1 = a’.b • s2 = a.b’ • s3 = a.b O circuito lógico é montado dei- xando as 4 equações juntas: Circuito lógico decodificador 2-para-4 Na representação simbólica do de- codificador não mantemos dois fios na entrada (um para cada entrada), mas sim um único fio e a representação de que 2 bits são utilizados, o que é equivalente a termos duas entradas de 1 bit (0 ou 1), como fizemos até o presente momento. Unidade Lógica e Aritmética Conhecidas as principais portas ló- gicas e alguns dos mais básicos circuitos combinacionais, vamos verificar como é formada a máquina motriz de um proces- sador, a unidade lógica e aritmética, ou ULA (em inglês, ALU). A ULA é responsável por todas as operações matemáticas (soma, subtração, multiplicação, divisão, exponenciação, etc..), lógicas (“E”, “OU”, “NOT”, etc.), comparações, deslocamentos, entre outras em um computador. A complexidade da ULA acompa- nha a complexidade do processador. Pro- cessadores simples possuemULAs com 4 Entrada0 (a) Entrada1 (b) Saída0 (s0) Saída1 (s1) Saída2 (s2) Saída3 (s3) 0 0 1 0 0 0 0 1 0 1 0 0 1 0 0 0 1 0 1 1 0 0 0 1 32ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES operações. Processadores mais complexos podem ter centenas de operações. Apenas para ilustrar vamos verificar como é formada uma ULA básica com 4 operações: soma, AND, OR e NOT. Essas três últimas operações booleanas são facilmente implementadas com suas respectivas portas lógicas, conforme visto anteriormente. Logo, a soma, assim como as demais operações aritméticas, não é tão facilmente implementada, visto que ao contrário das operações booleanas que são realizadas iso- ladamente bit a bit, aquela possui depen- dência entre os bits. Ou seja, para realizar a operação sobre um bit m+1, precisamos saber o resultado da operação no bit m. No caso da soma temos o somador binário mais simples, chamado de meio- -somador, que é capaz de somar dois ope- randos de 1 bit (A e B) e gerar o resultado (S), também de um bit, além de um bit de carry-out ou “vai-um” (C). A tabela verda- de do meio-somador pode ser visualizada a seguir. Como comentado anteriormente, o resultado S pode ser implementado com uma porta XOR e, se você analisar a tabela verdade verá que o vai-um é apenas uma operação AND. Como exercício, propo- mos que você monte o circuito lógico para o meio-somador. Entretanto, esse meio somador não pode ser utilizado para somar mais de um bit, pois prescinde da entrada para o “vai-um” gerado pela soma do bit anterior. Dessa forma, temos que adicionar mais uma entrada na tabela verdade, chamada de carry-in, ou “vem-um”. O circuito lógico desse somador completo pode ser logo visualizado: O circuito do somador completo, apresentado antes, é capaz de somar ape- nas um único bit. Para realizar a soma de mais bits, precisamos adicionar diversos A B S C 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 A B Cin S Cout 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 33ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES desses somadores em série, conectando a saída Cout de um somador que é ligado na entrada Cin do próximo somador. Agora que já temos as operações booleanas definidas e o somador completo, como podemos fazer para transformar es- sas quatro operações em uma ULA? Basta criarmos um circuito, unindo os quatro circuitos anteriores, conectando as saídas dos mesmos em um multiplexador. Nesse caso teríamos um multiplexador 4-para-1. Assim, com uma entrada A e B definida, a ULA realiza as 4 operações, mas em sua saída apenas uma delas será selecionada através do multiplexador, conforme a so- licitação da operação, sendo executada no processador. Anteriormente, no circuito da ULA, todas as entradas, saídas e conexões inter- nas seriam de n bits, com exceção de Ci (1 bit) e sel (2 bits). O símbolo da ULA pode ser visualizado por meio da figura que segue: Circuitos sequenciais Ao contrário dos circuitos combina- cionais, os quais não possuem realimen- tação, os circuitos sequenciais são todos aqueles que possuem alguma forma de realimentação. Esses produzem o efeito de “memória” ou a capacidade de armazenar alguma informação ao longo do tempo. As saídas de um circuito sequencial não são apenas função de suas entradas, como são os circuitos combinacionais, porém variam de acordo com o estado atual das próprias saídas. Ou seja, o va- lor de determinada saída em t+1, onde t representa o momento atual, dependendo do valor da saída em t. Os exemplos clássicos dos circuitos sequenciais são os registradores, contado- res, f lip-f lops ou latches (registradores de 1 bit). Flip-Flop RS Os f lip-f lops podem ser conside- rados a menor memória existente, sendo capazes de armazenar 1 bit. Eles são a base dos registradores, os quais são as menores unidades de memória existente dentro de um processador. O seu funcionamento é bastante simples e a sua construção é feita com pou- cas portas lógicas. Existem diversos tipos de f lip-flops, sendo que as variações entre eles ocorrem na forma de seu controle. 34ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES O mais simples de todos é o f lip-f lop RS, ele possui duas entradas R, de reset, ou desligar e S, de set, ou ligar. Quando a entrada R é acionada (valor em “1”) a saída é desligada, ou seja, assume o valor “0”. Por sua vez, quando a entrada S é acionada em “1”, a saída é ligada, ou seja, assume o valor “0”. O circuito lógico desse f lip-f lop é geralmente construído com portas lógicas NOR ou NAND, muito embora possa ser construído com portas OR, AND e NOT. Diferentemente dos circuitos combinacionais, onde apenas a entrada é de- terminante para o valor da saída, nos circuitos sequenciais não teremos uma tabela verdade convencional. Então, precisaremos de uma tabela de transição de estados, ou simplesmente tabela de transição, visto que tais circuitos possuem “memória” e o valor da saída depende, além das entradas, do estado intermediário mantido na memória. Geralmente, iniciamos (t0) a construção dessa tabela de transição a partir de valores para as entradas capazes de determinar ou alterar o valor das saídas, indepen- dentemente do valor atual da própria saída. No caso do f lip-f lop RS, seriam os casos onde S = 1 (ligar) ou R = 1 (desligar). Nos momentos posteriores (t1, t2, ..., tn), os valores das entradas vão sendo modifica- dos de forma a verificar o comportamento do circuito em cada um dos casos. Para o f lip-f lop RS teríamos a seguinte tabela com os valores de entrada e de saída ao longo do tempo. Analisando a tabela verdade da fun- ção NOR, percebemos que sempre que uma das entradas for igual a 1 a saída da função também será igual a “0”. Por esse motivo, ao colocar a entrada R em “1”, a saída Q , automaticamente, assume o valor “0”. Como a saída Q está conectada na mesma porta da entrada S e, considerando t R S Q Q’ 0 1 0 0 1 1 0 0 0 1 2 0 1 1 0 3 0 0 1 0 4 1 0 0 1 5 1 0 0 1 6 0 0 0 1 7 0 1 1 0 35ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES ainda, que a entrada S também está em “0”, temos que a saída Q’ terá o valor “1”. Tal valor “1” retroalimenta a porta NOR, mantendo o valor de Q inalterado. Continuando em t1, alteramos o valor de R para 0, e note que nada foi alterado, pois já tínhamos a outra entrada da porta NOR com o valor em “1” (Q’). Ou seja, mantendo as duas entradas R e S com o valor “0”, o f lip-f lop memoriza o valor de suas saídas. Assim, somente teremos uma alte- ração se colocarmos o valor de “S” em 1 (t2), pois aí o valor de Q’ passa a ser “0”, e esse valor de Q , consequentemente, passa a ser “1”. Temos, então, que S com valor “1” liga o f lip-f lop ou ainda faz a informação “1” ser armazenada. Já ao contrário de R, igual a “1”, desligando o f lip-f lop ou fazendo a informação “0” ser armazenada. Por fim, temos que os valores de R e S iguais a “1” não podem ser utilizados nesse f lip-f lop, pois tornaria os valores de Q e Q’ conflitantes. Em resumo, teríamos a seguinte tabela de transição de estados para este f lip-f lop RS. Assim como nos decodificadores e multiplexadores, não usamos o circuito lógico do f lip-f lop, mas sim um símbolo. Flip-Flop RS Controlado Como visto anteriormente, no f lip- -f lop RS temos um comportamento não desejado quando as entradas R e S tem o valor “1”, trazendo um problema de ordem prática. Nesse sentido, de que forma fazer a transição de valores de R e S sem que em determinado momento tivéssemos R e S valendo “1” ou sem passar por um estado temporário? Para isso foi criado um flip-flop que pudesse ser ativado/desativado apenas em determinados momentos. Para tanto, foi adicionado mais uma entrada, chama- da de controle, clock (relógio), ou carga. Enquanto essa entrada estiver desativada (C = 0) qualquer alteração nos valores de R e S não serão percebidas pelo f lip-f lop RS convencional. A ideia é sincronizar a mudança de estado, sendo permitidaapenas quando C = 1. O circuito lógico desse novo f lip- -flop é facilmente obtido através da adição de duas portas NAND ao circuito anterior. R S Qt+1 Ação/Estado 0 0 Qt Mantém o estado anterior 0 1 1 Estado Set (“1”) 1 0 0 Estado Reset (“0”) 1 1 ? Estado proibido / Erro 36ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES A tabela de transição de estados com esse novo controle passa a ser a seguinte: Observe que ainda temos o estado proibido, pois nada impede que enquanto o relógio esteja ativo (C = 1) as variáveis R e S sejam iguais a “1”. Outra novidade é que temos mais uma situação onde há memorização do valor; quando C = 0, ou seja, quando as entradas R e S estão desa- bilitadas pelo relógio. Na tabela anterior apresentamos essa situação pelo valor “X” nas entradas R e S. O valor “X” é conhe- cido por “don’t care”, ou seja, não importa seu valor. Visto que, embora não tenhamos utilizado anteriormente esse valor, também pode ser aplicado em tabelas verdade. Símbolo do flip-flop RS controlado. Flip-Flop D A necessidade de evitar o estado proibido do f lip-f lop RS fez com que os projetistas o evoluíssem para que não houvesse mais duas entradas e sim apenas uma. Isso foi facilmente construído atra- vés do uso de um inversor em uma das entradas, R ou S. Com isso eliminamos o estado proibido, mas também eliminamos a possibilidade de R e S terem o valor “0”, simultaneamente para manutenção do estado anterior. Contudo, como já temos uma outra entrada, não precisaríamos mais manter o relógio que habilita ou não as entradas do f lip-f lop de R e S em “0”, a fim de termos salvo o estado do f lip-f lop. O resultado prático dessa evolução é que temos agora um f lip-f lop que copia o valor de sua entrada para sua saída sempre que o relógio ficar ativo (C = 1). Esse f lip- -f lop é conhecido por f lip-f lop D. O “D” representa o dado que deverá ser copiado da entrada para a saída. O circuito lógico do f lip-f lop D, em termos do f lip-f lop RS controlado, e seu respectivo símbolo podem ser vistos a seguir: C R S Qt+1 Ação/Estado 0 X X Qt Mantém o estado anterior 1 0 1 1 Estado Set (“1”) 1 1 0 0 Estado Reset (“0”) 1 0 0 Qt Mantém o estado anterior 1 1 1 ? Estado proibido / Erro 37ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES Flip-Flop D A tabela de transição de estados pas- sa a ser mais simples, assim, quando C = 0 as saídas ficam estabilizadas no valor anterior (efeito memória). Já, quando C = 1, as saídas têm o mesmo valor da entrada D. Então, note que se D = 1, teríamos a mesma situação do f lip-f lop RS com S = 1 e R = 0 (set, ligar) e, ao contrário, se D = 0, teríamos o f lip-f lop RS com S = 0 e R = 1 (reset, desligar). Existem ainda outros tipos de f lip-f lops, como o tipo T (toggle), que a cada ativação do sinal de controle altera o valor armazenado (valor “0” → “1” e vice-versa) e o tipo JK, que é semelhante ao RS, mas elimina o estado proibido. Nesse último, quando as duas entradas J e K são iguais a “1”, ele funciona como o f lip-f lop T, ou seja, ele altera o valor armazenado anteriormente. Existem outros detalhes de eletrônica digital vinculados aos circuitos sequenciais, mas que não são foco dessa disciplina, como o atraso temporal das portas lógicas e questões relacionadas aos níveis de ativação dos dispositivos, se sensíveis às bordas de subida, descida ou ao nível. Todos esses detalhes podem ser aprofundados em livros e sites de circuitos digitais ou de eletrônica digital. Registradores Com o f lip-f lop D já temos a base para a construção de elementos capazes de armazenar um determinado valor, visto que o mesmo é capaz de armazenar 1 bit de informação. Assim, para armazenarmos mais bits precisamos de uma forma simplista, da seguinte forma: conectar diversos f lip-f lops em série, todos interconectados pelo mesmo sinal de controle (relógio). Assim, se conectarmos 4 f lip-f lops teremos um registrador de 4 bits. Já um registrador de 32 bits pode ser visto como um conjunto de 32 f lip-f lops em série, cada um com sua linha de dados distinta (entrada D do f lip-f lop D) e todos conectados por um mesmo sinal de controle (entrada C do f li- p-f lop D), conforme pode ser visto na figura abaixo. C D Qt+1 Ação/Estado 0 X Qt Mantém o estado anterior 1 1 1 Estado Set (“1”) 1 0 0 Estado Reset (“0”) 38ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES Utilizando estes mesmos f lip-f lops D e, adicionando alguns circuitos com- binacionais, também podemos construir registradores de deslocamento à esquerda e à direita (similares aos operadores << e >> em linguagens de programação de alto nível), bem como contadores (incremen- tadores e decrementadores). Memória Assim como um registrador de n bits pode ser visto como um array (vetor/ conjunto) de n flip-flops, uma memória de m posições pode ser vista como um array de m registradores. Caso os registradores dessa memória sejam, por exemplo, de 32 bits, dizemos que a memória trabalha com palavras de 32 bits. É claro que não basta juntarmos alguns registradores para termos uma memória como conhecemos em nossos computadores, precisamos de no mínimo alguns circuitos combinacionais capazes de: • na escrita de dados, selecionar qual palavra/registrador (endereço) irá receber a informação a ser gravada na memória; • na leitura de dados, selecionar a partir de qual palavra/registrador (endereço) a informação deve ser lida; • enviar a informação (dados) a ser escrita ou receber a informação (da- dos) lida da memória; • autorizar a escrita da informação ou a leitura da informação na memória (controle). Os fios que carregam essas informa- ções de endereços, de controle (leitura/es- crita) e as informações propriamente ditas (os dados a serem gravados ou lidos) são conhecidos por barramentos. De forma mais específica, barramento de endereços, de controle e de dados, respectivamente. A estrutura lógica de uma memó- ria de 4 posições pode ser vista a seguir. Novamente, é importante ressaltar que a implementação física de uma memória não é exatamente da mesma forma que esta estrutura lógica, pois temos que con- siderar atrasos das portas lógicas, tempo de carga e leitura dos componentes e a 39ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES própria tecnologia de implementação. Esses detalhes, obviamente, não são escopo dessa disciplina. Note a utilização do decodificador para a seleção de endereço de gravação dos dados e do multiplexador para a seleção do endereço de leitura dos dados. O ende- reço a ser gravado é enviado para o decodificador, o qual mantém ativa apenas uma das portas AND. E, essa porta AND, com uma das entradas ativa, somente terá sua saída ativa quando o sinal de controle (“write”), enviado através do barramento de controle, também for ativado (em caso de dúvida, veja a tabela verdade da operação AND). Com a saída da porta AND ativa o dado será, enfim, gravado no registrador correto. O procedimento é semelhante para a leitura do dado, através do multiplexa- dor. O endereço a ser lido é enviado para o multiplexador, o qual copiará apenas uma de suas entradas para a sua saída (de acordo com o endereço). A saída do mul- tiplexador, por sua vez, está conectada a uma porta AND, que somente liberará o dado lido quando o sinal de controle “leitura” for ativado. Para sintetizar!!!... Nesse capítulo abordamos desde as mais simples portas lógicas (OR, AND e NOT), passando por portas derivadas (NAND, NOR e XOR) até os componentes básicos de processador e memória (Decodificadores, Multiplexadores e Flip-Flops). É importante que você lembre que a resolução de uma expressão booleana começa pela montagem de uma tabela verdade, a qual irá expressar em suas co- lunas cada uma das variáveis de entrada e sub-expressões, bem como o resultado final da expressão. Dessa maneira, nas linhas das tabelas verdade você terá cada uma das possíveis combinações de valores das variáveis de entrada e suas conse- quentes valorações.Tão importante quanto a resolução da expressão é sua simplificação. É muito mais simples de trabalhar quando a expressão está em uma forma simplificada. Para tanto, você pode lançar mão das leis da álgebra, como comutatividade, asso- ciatividade, distributividade e os teoremas de De Morgan. Também é possível fazer a simplificação através dos mapas de Karnaugh, onde buscam-se os mintermos 1 em oitavas, quadras, duplas e isolados. Os mapas de Karnaugh são uma forma diferenciada de tabela verdade, onde as entradas e os valores da expressão estão dispostos de forma a permitir a simplificação. Finalmente, vimos como combinar as portas lógicas para formar circuitos muito importantes na organização de um computador, bem como eles podem ser utilizados para formar unidades funcionais de processadores e circuitos de memória. Vamos exercitar o que estudamos até aqui? Então... 1. Para os exercícios a seguir (de 1 a 5) utilize o software MMLogic. 2. Criar um circuito que demonstre a utilização de um MUX 4:1. 3. Criar um circuito que demonstre a utilização de um Decodificador 2:4. 4. Criar um circuito que demonstre a utilização de um FF do tipo RS. 5. Criar um circuito que demonstre a utilização de um FF do tipo RS controlado. 6. Criar um circuito que demonstre a utilização de um FF do tipo D. 7. Tendo por base o conhecimento do que é um f lip-f lop, como poderia ser representada uma memória de um computador hipotético? 42ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES ESTRUTURA INTERNA DE UM COMPUTADOR – MODELO DE VON NEUMANN Quais são as partes, que juntas, formam o seu computador? A grande maioria dos computadores atuais utiliza uma estrutura interna baseada no modelo de Von Neumann, con- forme já comentado no início do capítulo anterior. 43ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES Uma das grandes contribuições do modelo de Von Neumann, além da dis- tribuição de seus blocos funcionais, foi o armazenamento de programas e dados em uma memória única. Fator que abriu a possibilidade de um programa ser mo- dificado ao longo de sua própria execução. Uma vez que anteriormente a esse modelo, tínhamos um programa estático, geral- mente “gravado” no próprio hardware que acessa os dados em algum tipo de memória auxiliar. Portanto, para fazer um programa novo, seria necessária a construção de um novo computador. Entretanto, antes de falar em pro- grama, temos que saber o que significa um. O programa nada mais é que uma sequência de instruções necessárias para atingir o objetivo computacional. O pro- grama (suas instruções) e os dados sempre estarão armazenados na memória. E uma instrução? O que vem a ser uma instrução? A instrução é a operação que será realizada pelo processador, na forma de: OPERAÇÃO OPERANDOS A operação diz qual função será desempenhada pelo processador, por exemplo: soma, movimentação de dados na memória, comparação, etc. Os ope- randos fornecem a maneira de calcular a posição atual dos dados (na memória, registrador, etc.) com os quais a operação será realizada. Sabendo o que é um programa e uma instrução, então, como o computador “sabe” a forma de executar as instruções? A execução de um programa pelo proces- sador ocorre, como regra geral, dentro de um ciclo chamado de busca-decodifica- ção-execução. O referente ciclo, em todos os pro- cessadores modernos, ocorre como em uma montadora de automóveis, ou seja, em estágios, aqui chamados de pipeline. A cada ciclo de relógio do processador, um novo estágio do ciclo de busca-deco- dificação-execução tem início. Apenas a título de curiosidade, em um processador de 1,2 GHz, temos aproximadamente 1,2 bilhões de ciclos em um segundo. Ou seja, em tese, poderíamos ter 1,2 bilhões de instruções novas iniciando sua execução por segundo. Para que o ciclo funcione correta- mente, o processador possui um registra- dor especial chamado de “apontador de instruções” ou “contador de instruções” ou ainda “ contador de programa” (CP ou PC em inglês – Program Counter), o qual armazena o endereço na memória onde está a próxima instrução a ser executada. Portanto, o estágio de busca verifica o contador de programa (PC), acessa a me- mória e traz a instrução para o registrador de instrução (RI) dentro do processador. O registrador de instrução simplesmente armazena o conteúdo da instrução dentro do processador. Após essa busca, o PC já é atualizado para conter o endereço da próxima instrução a ser buscada. O estágio de decodificação lê o RI, e com base no campo da operação gera sinais de controle para o restante do hardware, utilizando, para tanto, “decodificadores” 44ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES (conforme estudamos no capítulo anterior). Por exemplo, se o campo da operação indi- ca que é necessário realizar uma soma, os decodificadores irão gerar um sinal para ativar a operação de soma na ULA. Realizada a decodificação da instru- ção, a execução pode ser iniciada no pró- ximo ciclo de relógio. Essa execução nada mais é que a aplicação da operação nos operandos, finalizando com o armazena- mento do resultado em algum registrador ou na memória (conforme regra específica da operação e dos operandos envolvidos). A forma como cada instrução é executa- da, ou seja, onde os operandos estarão e onde serão salvos sempre que consultada pelo programador no manual do respectivo processador. É claro, que um programador de linguagem de alto nível não precisa ter este conhecimento, contudo, sempre que for necessário realizar alguma operação de baixo nível (linguagem de máquina ou de símbolos) é recomendável conhecer tais detalhes. Além disso, é nessa etapa que os operandos são buscados na memória para serem carregados nos registradores, de forma a permitir que a operação seja executada com sucesso, tudo conforme as informações da operação e dos operandos (instrução). Caso a operação executada seja do tipo “desvio”, “salto” ou “transferência”, o contador de programa (PC) é atualizado para que a próxima instrução a ser executada seja buscada pelo ciclo de busca. Uma instrução de salto é gerada para o processador, por exemplo, sempre que o programador utilizar estruturas do tipo “IF-ELSE” ou laços em seus programas. Com o novo valor de PC carregado, ou com aquele atualizado ao final da busca da instrução, um novo ciclo busca-decodificação-execução, podendo ser iniciado. Como você pode ter percebido, diversas operações são realizadas durante a exe- cução. Por esse motivo, diferentes processadores dividem este estágio de execução em diversos micro estágios, permitindo uma melhor otimização dos recursos. Os demais estágios também podem ser subdivididos, de acordo com o projeto do processador. É importante ressaltar que quanto menores os estágios, maior pode ser a frequência de relógio de processador. A título de curiosidade, a frequência dos Intel Pentium 4 chegaram a ser superiores a 4 GHz. Conhecendo as frequências dos processadores atuais, você chegará à conclusão que nem sempre uma frequência mais alta significa que o processador seja mais rápido. 45ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES Blocos funcionais A execução de um programa através do ciclo de busca-decodificação-execução requer a existência de estruturas funcionais que forneçam o devido suporte a cada um dos ciclos. Elas podem ser vistas na figura seguinte e nada mais são que as próprias estruturas básicas do modelo de Von Neumann, as quais muitas já conhecemos. Processador – Unidade de Controle Internamente ao processador, além da ULA e dos registradores, os quais já co- mentamos rapidamente, temos a unidade de controle (UC), responsável pela geração dos sinais de controle para os restantes dos blocos funcionais. Esses sinais garantem o gerenciamento do f luxo interno de dados e do instante preciso em que ocorrem as transferências entre uma unidade/bloco e outra. Por exemplo, quando falamos da memória no capítulo anterior, vimos que existe um sinal de controle, chamado“write” que comanda o armazenamento dos dados na memória. O referido sinal é gerado pela UC no momento correto. Imagine se a UC gera esse sinal quando o dado a ser gravado ainda não está disponível. Teríamos uma potencial perda de informação! Cada sinal de controle é responsável por comandar uma micro-operação, aque- las que ocorrem em cada um dos estágios em que a operação é executada, como por exemplo, as cargas dos dados nos regis- tradores, a seleção de dado para leitura/ gravação na memória e a seleção de uma operação na ULA. Processador – Unidade lógica e aritmética – ULA A ULA, como já vimos anterior- mente, é responsável por todas as ope- rações matemáticas, booleanas, compa- rações, etc. Ela é formada por circuitos combinacionais que recebem como entrada as operações e geram em sua saída os re- sultados da operação selecionada, através da unidade de controle. Processadores mo- 46ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES dernos possuem diversas ULAs, com di- ferentes especialidades: ULA de números inteiros, ULA de números representados em ponto-flutuante, ULA para operações multimídia, etc. Além do resultado da operação, a ULA é responsável por gerar alguns có- digos de condição, os quais são utilizados pelas próprias instruções do programa para tomada de decisões, especialmente atra- vés das instruções de desvio (geradas por estruturas de controle do tipo IF-ELSE ou laço nos programas). A quantidade de códigos de con- dição varia muito de processador para processador, mas geralmente todos apre- sentam os seguintes códigos: • Overflow: indica se na última ope- ração ocorreu um estouro de campo. Um estouro ocorre quando a capa- cidade de representação em biná- rio para determinada informação é superada. Por exemplo, suponha que uma operação de soma em deci- mal 8+8 deva ser executada em um computador com ULA de 4 bits. Com 4 bits, podemos representar os números inteiros positivos de 0 a 15. Ou seja, a soma acima geraria um estouro de representação, pois esse computador não seria capaz de representar tal número adequada- mente. Dessa forma, é provável o resultado da soma, que em decimal, seria zero. A ULA em questão gera- ria o resultado da soma (0) e ligaria o sinal (ou condição) de overf low, para demonstrar que provavelmente um erro ocorreu. • Sinal: se o resultado da operação é negativo ou positivo, de acordo com a representação numérica utiliza- da pelo processador. Geralmente os processadores trabalham com a representação em complemento de 2. • Carry: representa o bit de “vai-um” e “vem-um” em operações aritméticas. • Zero: se da operação ocorreu um resultado zerado. As entradas e saídas da ULA ge- ralmente estão conectadas a registradores do processador e um destes tem um nome especial: o acumulador. O acumulador tem por função essencial armazenar os operan- dos e/ou o resultado fornecido pela ULA. Processadores simples possuem um único acumulador para cada ULA, enquanto processadores mais modernos possuem diversos acumuladores para cada ULA. Barramentos Todos os sinais de controle, bem como os dados e demais informações necessárias ao bom funcionamento dos sistemas computacionais transitam fisica- mente pelos blocos funcionais através do barramento do sistema (system bus). Na verdade, o barramento do sistema é dividi- do em barramento de dados, de controle e de endereço. Todos eles são caracterizados por sua largura, em bits. Por exemplo, um barramento de 32, aqui o barramento 4 bytes pode ser transferido simultaneamen- te. Quanto mais bits, mais informações podem ser transferidas simultaneamente. 47ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES Contudo, quanto maior a quantidade de bits, menor a distância em que o barra- mento pode operar, como também maior é a dificuldade dos projetistas de hardware para aumentar a frequência de seu funcio- namento (em Hz, MHz ou GHz). O barramento de dados é utilizado para transferência dos mesmos de/para o processador, de/para os periféricos (im- pressora, teclado, monitor, etc.) ou de/para a memória. O barramento de controle é por onde circulam os sinais de controle gerados pela UC. E, finalmente, o bar- ramento de endereços é por ondem circu- lam os endereços para acesso à memória e para acesso aos periféricos. Observe, como exemplo, que um barramento de endereço de 32 bits, tem a capacidade de endereçar até 4GB da memória (232 = 4.294.967.296 bits ou 4GB). Esse é um dos motivos pelo qual os processadores de 32 bits reconhe- cem apenas 4GB de memória RAM (sem considerar eventuais extensões). Memória A memória, conforme já foi discor- rido, é o local onde temos armazenado as instruções (programas) e os seus respec- tivos dados. Nenhum programa pode ser executado sem que esteja inserido (instru- ções e dados) na memória do computador. Mesmo que você saiba que o programa está gravado em alguma outra mídia (disco rígido, DVD, pendrive) ele precisará ser carregado na memória para que o pro- cessador possa iniciar a execução de suas instruções. A memória está dividida em pala- vras, cada uma com um respectivo ende- reço. A unidade de controle do processa- dor gera, além dos sinais de controle para leitura/gravação na memória (enviados através do barramento de controle), os endereços que a operação necessita ler ou gravar na memória. Um dos grandes problemas dos computadores atuais é a diferença de ve- locidade de operação do microprocessador e do sistema de memória. A frequência em que os processadores operam é muito mais alta que a frequência em que as me- mórias operam. Além disso, o crescimento da frequência dos processadores é muito maior que o crescimento da frequência das memórias. Uma das possíveis soluções para esse problema e a mais utilizada é o emprego de uma hierarquia de memória. O emprego dessa hierarquia só é possível devido à possibilidade de construção de memórias muito rápidas (trabalhando na mesma fre- quência do processador). Essas memórias são muito caras e por isso de tamanho muito reduzido. Assim, as memórias mais rápidas estão próximas do processador, contendo os dados e instruções que o processador precisa em certo momento. As memórias mais lentas (grande capa- cidade) são utilizadas para guardar dados e instruções que não estão sendo usadas no momento da operação. Além disso, a hierarquia de memória tem sua construção fortemente baseada no princípio de loca- lidade de referência (temporal e espacial), isto é, os programas têm a tendência de 48ORGANIZAÇÃO E ARQUITETURADE COMPUTADORES executar os mesmos trechos de código (ou trechos próximos uns dos outros) durante grande parte do tempo de execução. Logo, ao dividirmos o sistema de memória em níveis, esperamos obter um de- sempenho próximo ao da memória mais rápida e o custo por bit próximo da memória de menor custo. Geralmente, é utilizado um sistema de memória de 3 níveis. O primeiro nível é representado pelas memórias cache, usualmente integradas ao processador ou à placa-mãe, sendo inclusive hierarquizadas em outros dois ou três níveis (cache L1, L2 e L3). O segundo nível é representado pela memória RAM (memória principal) e por fim, o terceiro nível, é representado pelo disco rígido (memória secundária). Hierarquia de memória Grande parte de memória encontrada em um computador pessoal é memória RAM (Random Access Memory), a qual perde as informações quando desligada. A RAM pode ser dinâmica (DRAM), quando necessita de um refresh periódico para não perder a informação, ou estática (SRAM), quando retém a informação enquanto estiver ligada. A SRAM é utilizada geralmente em memórias cache, por ser mais rápida (e mais cara) e a DRAM é utilizada na memória principal (mais lenta, mas mais barata). A memória principal (ou primária) tem evoluído muito nesses últimos anos, tentando acompanhar a evolução dos mi- croprocessadores. As principais tecnologias disponíveis hoje em dia são as seguintes: • Synchronous DRAM (SDRAM):
Compartilhar