Antes de falar de processadores, vamos resolver uma espécie de enigma, apresentado em uma aula de Arquiteturas de Computadores, pelo professor Vinod endereços dados controle (r/w) memória .  .  . .  .  . .  .  . processador O interior da CPU
Dado o esquema do slide anterior, deseja-se que os dados lidos da memória passem por todos os nove pontos do processador, utilizando o mínimo possível de fios Os fios são todos retos, ou seja, a solução para o problema será o mínimo de linhas retas que passem por todos os pontos .  .  . .  .  . .  .  .
Dado o esquema do slide anterior, deseja-se que os dados lidos da memória passem por todos os nove pontos do processador, utilizando o mínimo possível de fios Os fios são todos retos, ou seja, a solução para o problema será o mínimo de linhas retas que passem por todos os pontos .  .  . .  .  . .  .  . Uma configuração óbvia seria:
Com essa solução, temos 5 retas Será que 5 é realmente o número mínimo de retas? Pense mais um pouco e clique para ver a resposta... .  .  . .  .  . .  .  .
Com essa solução, temos 5 retas Será que 5 é realmente o número mínimo de retas? Pense mais um pouco e clique para ver a resposta... .  .  . .  .  . .  .  . Começando de uma forma diferente
Com essa solução, temos 5 retas Será que 5 é realmente o número mínimo de retas? Pense mais um pouco e clique para ver a resposta... .  .  . .  .  . .  .  . Começando de uma forma diferente Seguindo por mais 2 pontos... Podemos usar apenas mais 2 retas!
Com essa solução, temos 5 retas Será que 5 é realmente o número mínimo de retas? Pense mais um pouco e clique para ver a resposta... .  .  . .  .  . .  .  . Começando de uma forma diferente Seguindo por mais 2 pontos... Podemos usar apenas mais 2 retas! Por que não fazer isso...
Com essa solução, temos 5 retas Será que 5 é realmente o número mínimo de retas? Pense mais um pouco e clique para ver a resposta... .  .  . .  .  . .  .  . Começando de uma forma diferente Seguindo por mais 2 pontos... Podemos usar apenas mais 2 retas! Por que não fazer isso... ...para depois fazer isso?
Com essa solução, temos 5 retas Será que 5 é realmente o número mínimo de retas? Pense mais um pouco e clique para ver a resposta... .  .  . .  .  . .  .  . Começando de uma forma diferente Seguindo por mais 2 pontos... Podemos usar apenas mais 2 retas! Por que não fazer isso... ...para depois fazer isso? E finalmente isso. 4 retas!
Curiosidades Por que esta última solução não é tão óbvia quanto a primeira, se não havia nenhuma restrição de que as retas não podiam ultrapassar a caixa? Não estamos acostumados a pensar além do que temos de concreto. Em países como os EUA, por exemplo, os alunos são estimulados desde o primário a “pensar fora da caixa” Não é à toa que a maioria das descobertas e invenções vem de países desenvolvidos Então, lembre-se:  “Think outside the box”
Processadores e Microprogramação Vamos agora analisar mais a fundo o Modelo de Von Neumann Vamos definir conceitos como  registradores ,  barramentos ,  Unidade Lógica Aritmética (ULA) , entre outros Em seguida, construiremos nosso processador utilizando todas as componentes apresentadas
Registradores Locais onde são armazenadas informações A diferença dos registradores para as células da memória principal é que os primeiros estão localizados dentro do processador. Isso faz com que informações contidas nos registradores sejam buscadas bem mais rapidamente para processamento Representação*: Registrador * ATENÇÃO:   tanto esta como as outras representações feitas aqui  não  fazem parte de nenhum tipo de convenção – são meras ilustrações!
Barramentos Conjuntos de fios por onde passam bits de dados ou de controle Em outras palavras, artifícios utilizados para transmitir sinais de um dispositivo para outro Representação: ou n Onde n é o número de fios do barramento, lembrando que por cada fio passa um bit por vez
Multiplexadores (MUX) Circuitos que recebem entradas, selecionam uma delas através de sinais de controle e as liberam como saída Representação: MUX
Unidade Lógica Aritmética (ULA) Dispositivo que recebe dois dados de entrada A e B, opera-os sobre uma função pré-determinada e libera um dado de saída Recebe bits de controle que especificam a operação a ser realizada A ULA poderá fazer 4 operações em nossa abordagem, portanto são necessários 2 bits de controle (00, 01, 10 e 11 = 4 possibilidades) Por ora, a única operação relevante é a soma (00) Representação: ULA A B
Deslocador Dispositivo que recebe um número binário e multiplica ou divide por 2, se desejado for, através do deslocamento à direita ou à esquerda Deslocar à direita significa “apagar” o bit mais à direita e adicionar um 0 à esquerda, e o procedimento é exatamente o oposto no deslocamento à esquerda Exemplo: 0010 (=2) Deslocando à direita (divisão):  0 001 (=1) Deslocando à esquerda (multiplicação): 010 0  (=4) Representação: DES
Vamos falar mais detalhadamente sobre registradores Sabemos que registradores contém dados que tanto podem ser lidos quanto sobrescritos Por isso, cada registrador precisa receber um bit que controla sua entrada, que chamaremos de HE, e outro que controla sua saída, HS Registradores possuem na sua estrutura interna um circuito  flip-flop  para cada bit que armazena,  cada um deles conectado a um fio tanto do barramento de entrada como do barramento de saída
Abaixo, esquematizada a estrutura interna de um registrador de 8 bits: E N T R A D A HS (habilita saída) S A Í D A Tri-state buffer HE (habilita entrada)
Tri-state buffers  são circuitos que evitam conflitos entre as saídas para o barramento, fazendo um tipo de “desconexão virtual” entre registradores e barramentos Esses conflitos seriam possíveis porque várias saídas de registradores estarão conectadas a um mesmo barramento Nossa arquitetura terá 16 registradores para armazenar dados, dentre os quais alguns tem funções especiais:  PC (Program Counter) ,  IR (Instruction Register)  e  AC (Accumulator)
O Program Counter contém o endereço da próxima instrução a ser buscada na memória principal O Instruction Register armazena a instrução buscada na memória. Ou seja, IR = MP[pc], sendo IR o conteúdo do registrador e pc um endereço da memória principal MP Accumulator é um registrador que armazena valores intermediários, que não seriam úteis ao final da operação Haverá em nossa arquitetura, além dos 16, outros registradores espalhados no processador: dois  latches , A e B, o  Memory Adress Register (MAR)  e o  Memory Buffer Register (MBR)
Os latches servem para “segurar” dados no barramento e evitar que sejam sobrescritos Precisamos sempre lembrar que os fios do barramento apenas conduzem eletricidade, que já é instável por si mesma Latches serão importantes então para captar dados do barramento que estão prontos para serem processados, isto é, estão estáveis É como tirar uma foto: é necessário esperar até que todos estejam parados
O MAR é ligado ao barramento de endereços, que controla exclusivamente o fluxo de endereços que o processador envia para serem consultados na memória O MBR é ligado ao barramento de dados do sistema, e guarda os dados buscados na memória que serão processados na CPU ou os dados resultantes de algum processamento e que serão escritos na memória, ou até mesmo processados novamente
Podemos agora começar a “montar” o nosso processador Já foi dito que, para começar, vamos pensar apenas em somar dados. Para isso, precisamos simplesmente ler dois deles e somá-los Dois registradores e uma ULA são necessários PC IR AC R1 R2 . . . . Escolheremos então, dentre nossos 16 registradores, um registrador R1 e outro R2 para ler e somar seus dados ULA
Intuitivamente, ligamos tudo através de barramentos Vamos guardar o resultado da soma no registrador R3 Barramento A Barramento B Barramento C ULA PC IR AC R1 R2 . . . R3
Ainda não é o caso, mas se quiséssemos multiplicar ou dividir um número por 2, precisaríamos adicionar um deslocador Posicionando os 2 dispositivos separadamente, teríamos a vantagem de fazer operações simultâneas. Colocando ambos juntos, podemos usá-los consecutivamente, isto é, multiplicar ou dividir direto o resultado de uma soma, sem precisar armazená-lo antes
Mesmo que ainda não seja necessário, vamos adiantar um deslocador para a nossa máquina, colocando o mesmo logo após a ULA: DES Barramento A Barramento B Barramento C ULA PC IR AC R1 R2 . . . R3
Agora, precisamos pensar fisicamente Imagine se nossa soma fosse R1 ← R1 + R2, isto é, o registrador R1 receberia o resultado da soma de seu valor atual com o valor de R2 Enquanto a ULA processa os primeiros bits de cada dado, o barramento de saída está sendo modificado e, portanto, os novos valores já estão sendo salvos em R1, o que poderia causar um erro na soma Uma das soluções para esse impasse é adicionar latches antes da ULA, que guardarão os valores originais de R1 e R2 enquanto são processados
DES LA LB Barramento A Barramento B Barramento C ULA PC IR AC R1 R2 . . . R3
Ok, mas temos que pensar também na interação processador-memória É preciso adicionar, então, MAR e MBR. O MAR controla apenas informações (endereços) que vão do processador para a memória, mas o MBR controla o fluxo de dados de toda a interação, incluindo os dados de saída do deslocador, dados de entrada para a ULA e dados que serão lidos ou escritos na memória MAR MBR
Em nossa arquitetura, o MAR poderá ser carregado a partir do latch B É interessante possibilitar o processamento de dados direto do MBR para a ULA, poupando assim o tempo de selecionar o registrador (entre 16 deles!) desejado para armazenar o resultado da operação, e depois selecionar o mesmo novamente para buscar os bits e processá-los
Porém, repare que o MBR estará conectado à ULA, junto com o latch A. Há um conflito visível nessa configuração Lembre-se de que a ULA é apenas um circuito combinatório. Os bits de controle que recebe são apenas para especificar a operação a ser feita, o que significa que está sempre recebendo dados MBR ULA Latch A
DES LA LB MAR MBR Barramento A Barramento B Barramento C conflito PC IR AC R1 R2 . . . R3 ULA
DES LA LB MAR MBR Barramento A Barramento B Barramento C conflito Sem pânico! A solução é simples! PC IR AC R1 R2 . . . R3 ULA
DES LA LB MAR MBR AMUX Barramento A Barramento B Barramento C Basta adicionar um multiplexador, que chamaremos de AMUX (multiplexador A): ULA PC IR AC R1 R2 . . . R3
O multiplexador controlará qual dos dados deve ser enviado para a ULA Mas e se a instrução a ser executada fosse  R1 ← R1 + R2 + R3 + R4 ? Intuitivamente, a solução seria uma ULA com 4 entradas, com a vantagem de resolver essa soma sem precisar guardar nenhum resultado intermediário ULA A B C D
Sendo assim, uma ULA com 4 entradas é mais vantajosa para os casos de soma com 4 parcelas. O problema é que isto não será econômico se essa soma não ocorrer com frequência E pensando bem, de fato ela não é tão comum quanto uma soma com apenas 2 operandos, para a qual basta uma ULA com 2 entradas Unindo o útil ao agradável, por que não pensar em uma solução alternativa para realizar esta soma, ainda sem precisar salvar valores intermediários?
Eis a solução: ULA 1 ULA 2 ULA 3 A B C D E F ULA 4 A B C D
Curiosidades Fabricar 3 ULA’s com 2 entradas é ainda mais econômico do que projetar uma única ULA com 4 Além disso, outra vantagem em reduzir o tamanho das ULA’s pode ser explicada fazendo uma analogia com a forma como são fabricados os próprios processadores
Curiosidades Processadores são obtidos através de fatias redondas de silício, que podem ser divididas em partes pequenas ou nem tanto:
Curiosidades Podemos pensar em cada um desses pedaços como uma componente do processador As fatias, porém, sempre tem impurezas Imagine, por exemplo, a fatia abaixo, onde as manchas vermelhas são suas impurezas
Curiosidades Cada parte atingida por uma impureza está inutilizada Pensando nas partes como componentes, aquelas que foram atingidas não irão funcionar Na partição em componentes menores, repare que bem mais delas saíram ilesas
Curiosidades Cada parte atingida por uma impureza está inutilizada Pensando nas partes como componentes, aquelas que foram atingidas não irão funcionar Na partição em componentes menores, repare que bem mais delas saíram ilesas O que restou:
Recapitulando, temos então um processador que realiza a soma que queríamos Dentro do Processador Fora do Processador (memória) ULA PC IR AC R1 R2 . . . R3 DES LA LB MAR MBR AMUX Barramento A Barramento B Barramento C
É importante ressaltar que as linhas que ilustram os barramentos estão sendo mostradas apenas nos caminhos que queríamos para a soma Na verdade, todos os registradores estão conectados aos barramentos A, B e C, e uma estrutura de controle é que determina de onde são lidos os dados e onde eles são gravados Falando em controle, já vimos que não são só os registradores que precisam de bits de controle para que o processador possa funcionar A seguir, vamos quantificar os bits de controle de todas as componentes e descrever para que eles servem em cada uma delas
Temos 16  registradores  para leitura e escrita A intenção é ler sempre 2 dados (um vai para o barramento A e o outro para o barramento B), realizar uma operação na ULA e/ou no deslocador e,  quando necessário , armazenar o resultado em outro registrador Isso faz com que precisemos de 16 bits de controle para cada uma dessas operações. Entenderemos o motivo logo a seguir
A posição do registrador-alvo seria dada pela posição do bit 1 em meio aos 16 bits de controle Por exemplo, na operação de leitura cujo controle é:  0000000000001000   seria lido o dado do quarto registrador 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 PC IR AC R1 R2 . . . R3 R13
A posição do registrador-alvo seria dada pela posição do bit 1 em meio aos 16 bits de controle Por exemplo, na operação de leitura cujo controle é:  0000000000001000   seria lido o dado do quarto registrador 0 0 0 1 0 0 0 PC IR AC R1 R2 . . . R3 R13
Mas não é por mágica que a informação do registrador é lida quando ele recebe o bit 1 Na estrutura interna dos registradores, vimos que eles recebem um bit HE para habilitar sua entrada e outro, HS, para habilitar sua saída No exemplo anterior, a operação a ser feita era de leitura. Então, é a saída do registrador que precisa ser habilitada, para que a informação seja jogada em um dos dois barramentos (A ou B) Bits de controle especificam qual dos dois barramentos será o destino dos dados, mas isso por ora não tem importância
Caso a operação fosse de escrita no registrador, o bit que iria para cada registrador corresponderia ao HE, e aquele que recebesse 1 seria sobrescrito Mas, e se quisermos simplesmente gravar o resultado no MBR, e não gravar em nenhum registrador? Para isso, precisamos de um 17º bit de controle (EnC,  Enable C ), ao barramento C, que impeça escrita em qualquer um dos 16  registradores caso isso não seja desejado
Os outros registradores ( latches  A e B,  MAR  e  MBR ) recebem, separadamente, também 2 bits de controle (HE e HS), exceto pelo MBR que recebe 4 Os outros 2 bits do MBR são comandos de leitura e escrita na memória (chamaremos RD, leitura, e WR, escrita) Nossa  ULA  recebe 2 bits de controle para as 4 operações que pode executar a partir de dados de entrada A e B: 00 para A + B, 01 para a operação lógica A  AND  B, 10 para simplesmente retornar A, e 11 para retornar o inverso de A
O  deslocador  também precisa receber 2 bits de controle (00 para não deslocar, 01 para deslocar à esquerda, 10 para deslocar à direita e 11 nada faz) Finalmente, o  multiplexador  recebe apenas um bit para controlar qual dos dois dados que ele recebe deve seguir (0 para seguir o valor de latch A e 1 para seguir o valor que veio de MBR) Na ordem, temos então 16 + 16 + 17 + 2 + 2 +2 + 4 + 2 + 2 + 1 = 64 À primeira vista, precisamos apenas de um registrador especial para controle, de 64 bits, com um bit para cada sinal Mas serão todos esses 64 bits realmente necessários?
A verdade é que muito desses bits podem ser dispensados Fazendo uma análise mais cuidadosa dos controles de cada componente, veremos por que muitos desses sinais são desnecessários Mas, antes disso, vamos introduzir uma nova componente que será necessária para nos livrarmos de alguns bits
Decodificador Dispositivo que, para a nossa abordagem, receberá um número binário de 4 bits e, com ele, liberará 16 bits onde o bit na posição i será 1 e os outros, 0 OBS: i é o valor na base 10 do binário original. Note que i está entre 0 e 15 Exemplo: se o decodificador recebe o binário 0011 (=3), a saída será 0000000000001000 Representação: 3  2  1  0 DEC
Afinal, qual a grande utilidade do decodificador? Pense: se com apenas 4 bits, podemos representar até o número 15, então é possível especificar em 4 bits qual o registrador a ser selecionado Adicionando decodificadores para A, B e C, passamos a conta de 16 + 16 + 17 bits para 4 + 4 + 5, já que o bit EnC permanece Pois é, já economizamos 36 bits de controle
Os latches A e B são registradores que não precisam de controle na saída. Precisam apenas controlar os dados que entram, que vão sobrescrever as informações que eles guardavam até então A saída dos latches pode ficar sempre liberada, já que a função deles é simplesmente salvar valores e não deixar que outras informações de um barramento passem por cima deles HS HE
Os latches A e B são registradores que não precisam de controle na saída. Precisam apenas controlar os dados que entram, que vão sobrescrever as informações que eles guardavam até então A saída dos latches pode ficar sempre liberada, já que a função deles é simplesmente salvar valores e não deixar que outras informações de um barramento passem por cima deles HS HE
Para a nossa abordagem, o MAR também precisa de controle apenas na entrada, para controlar os endereços que nele entram e que serão então enviados para a memória automaticamente O mesmo serve para o MBR. Apenas um bit de controle é necessário, que é enviado para a saída do MBR, controlando se a informação nele contida irá ou não para a memória As operações de leitura e escrita na memória continuam sendo comandadas pelos bits RD e WR descritos anteriormente
Ótimo, precisávamos de um registrador de 64 bits para controle, e agora conseguimos reduzir este tamanho para 24 Superficialmente, o que nós temos até então é: Memória principal Processador Controle (24 bits) N2 N0 N1 MAR MBR endereços dados controle (leit/esc)
Podemos imaginar N0 como um pobre estagiário, que trabalha e executa ordens O controle, N1, seria o chefe, quem dá as ordens, através da busca das instruções e dos recursos presentes na memória principal Aos poucos, iremos desvendar o que está por trás da nuvem no slide anterior
E nosso proces- sador ficou assim: DES LA LB MAR MBR AMUX Barramento A Barramento B Barramento C 16 registradores 4 4 4 1 16 16 17 1 1 1 2 2 1 1 2 01234 . . . . . . . . . . 23 bits RD/WR ULA A B C Controle
Vamos dessa vez utilizar como exemplo a instrução R1 ← R1 + R2, para ilustrar como ficam os bits de controle durante o processo A B C EnC AMUX ULA RD WR MAR MBR DES LA LB
Chamaremos o momento inicial de t₀ Os registradores R1 e R2 ficam nas posições 3 e 4, respectivamente, lembrando que o primeiro registrador, PC, fica na posição 0. O valor em R1 será jogado no barramento A, e o valor de R2 no barramento B; logo, A = 0011 e B = 0100 O resultado será armazenado em R1, então o controle do barramento C deve também ser 0011
Obviamente, no início do processo ainda não podemos gravar nada no destino, então EnC tem de estar “desativado” Neste momento, não há problemas em especificar qual dos 2 dados (vindos do MBR ou do latch A) o AMUX irá direcionar para a ULA. Sabemos que serão dados vindos de latch A, então o bit de controle para AMUX será 0 Já vimos que a combinação do controle para que a ULA opere uma soma é 00
Nada está sendo lido ou escrito na memória (RD = 0 e WR = 0) MAR não receberá nenhum endereço de memória MBR também não está realizando nenhuma atividade em t₀ Também já vimos que a combinação que faz com que o deslocador retorne a própria entrada é 00 As entradas dos latches A e B devem estar desabilitadas, pois as informações ainda não foram transferidas para os barramentos A e B
Temos então, no momento t₀: A B C EnC AMUX ULA RD WR MAR MBR DES LA LB t₀ 0011 0100 0011 0 0 00 0 0 0 000 00 0 0
Após um tempo para busca dos dados, t ь , os únicos controles que se modificam são aqueles dos latches Isso porque, agora que os dados já foram jogados aos barramentos, os latches precisam recebê-los, quando estáveis, para que sejam transferidos à ULA Vamos considerar t₁ = t₀ + t ь
Temos então, no momento t₁ : A B C EnC AMUX ULA RD WR MAR MBR DES LA LB t₀  0011 0100 0011 0 0 00 0 0 0 000 00 0 0 t₁  0011 0100 0011 0 0 00 0 0 0 000 00 1 1
Após um tempo de execução, t є , os latches precisam voltar a ser 0, para que nada presente nos barramentos A e B sobrescreva os dados armazenados nos latches, já que não sabemos se eles virão a ser ainda necessários para a ULA futuramente Além disso, se queremos gravar o resultado de volta em R1, EnC precisa agora passar a ser 1 O resto permanece inalterado Agora consideremos t₂ = t₀ + t ь  + t є
Temos então, no momento t₂ : A B C EnC AMUX ULA RD WR MAR MBR DES LA LB t₀ 0011 0100 0011 0 0 00 0 0 0 000 00 0 0 t₁ 0011 0100 0011 0 0 00 0 0 0 000 00 1 1 t₂ 0011 0100 0011 1 0 00 0 0 0 000 00 0 0
Mas então, é necessário ler toda a sequência de bits de controle 3 vezes para uma simples operação de soma? Vimos pela tabela que pouca coisa se altera durante o tempo que decorre desde a leitura dos dados nos registradores até o armazenamento do resultado em um deles Então, deve haver uma maneira mais inteligente e menos custosa de executar instruções. Afinal, tempo é sempre precioso
Relógio (clock) Este é outro dispositivo importante, que emite uma sequência de pulsos periódicos que controlam alguns circuitos da máquina Se os pulsos são periódicos, quer dizer que possuem uma determinada  frequência O período de cada pulsação define o  ciclo  da máquina A máquina realiza um conjunto de atividades durante um ciclo Representação: Marcador de frequência Ciclo Pulsos
Agora, podemos conservar todos os bits que se mantiveram inalterados na tabela, deixando por conta do relógio as alterações necessárias Por exemplo, sabemos que o bit EnC está diretamente relacionado ao bit HE dos registradores Os pulsos enviados pelo clock definem então o momento exato em que a entrada do registrador deve ser habilitada, caso se deseje armazenar o resultado de algum cálculo em um registrador Isto pode ser feito através de um circuito bastante simples: CK EnC HE
Com isso, já temos tudo de que precisamos para começar a ver o que está por dentro da nuvem que havia em N1 Em outras palavras, vamos agora entender como funciona toda a máquina de controle do processador e como ela executa o  microprograma Microprogramas são sequências de instruções (em binário, evidentemente) que controlam o funcionamento de cada componente em N0 Cada instrução de um microprograma é executada em um ciclo
O processamento de uma microinstrução se resume a: Busca da instrução Identificação da instrução “ Execução”, entre aspas porque engloba na verdade: Busca dos operandos Operação Armazenamento do resultado Temos então 5 atividades que são realizadas pelo processador durante um ciclo
Dentre as 5 atividades listadas, o tempo necessário para a segunda (identificação de uma instrução) será quase nulo na nossa abordagem Isto porque teremos na nossa arquitetura de controle (N1) um registrador especial chamado MIR ( MicroInstruction Register ), para onde cada microinstrução será carregada O MIR já “entende” o significado dos bits de uma instrução de acordo com a posição de cada um MIR
Visto isso, o relógio que utilizaremos poderá ser dividido em 4  subciclos : O relógio terá 4 saídas, das quais 3 possuem atrasos. Isso faz com que sejam gerados pulsos em momentos diferentes para cada saída Cada uma dessas saídas consiste em um subciclo, como vemos na representação acima 1 ciclo 1 subciclo Atraso Atraso Atraso
Teremos também em N1 uma memória, chamada  memória de controle , onde são armazenadas e de onde serão lidas as microinstruções Nossa memória de controle poderá armazenar, no máximo, 256 instruções, cada uma com 32 bits Se é no MIR onde cada instrução será carregada, concluímos que a largura do MIR será de 32 bits MIR Memória de Controle Carrega instrução
Toda memória precisa estar ligada a um MAR e um MBR, e com a memória de controle não é diferente Portanto, vamos adicionar um registrador MAR, que chamaremos de MPC ( MicroProgram Counter ), cuja função é encontrar a próxima instrução do microprograma a ir para o MIR MIR Memória de Controle MPC Recebe  endereço da próxima instrução Envia endereço da próxima instrução
O MBR da memória de controle já está em N1... ...é o próprio MIR! Mas precisamos voltar a falar do MPC. De onde ele recebe a próxima microinstrução? Podemos supor que as instruções são executadas sequencialmente. Neste caso, basta incrementar o endereço atual, e teremos o endereço da próxima Precisamos então de uma componente simples, mas que ainda não tínhamos visto
Incrementador Circuito relativamente simples de poucas portas lógicas que, como o nome já diz, recebe um número binário como entrada e retorna o seu sucessor O número binário de entrada, no incrementador que usaremos no nosso exemplo, será composto por 8 bits Representação: INC
Temos até agora: Visivelmente, temos um problema MPC precisa ser controlado para não ficar o tempo todo selecio- nando endereços na memória! MIR Memória de Controle MPC INC
Vamos inserir agora o relógio, que será uma componente fundamental para todo o processador, tanto em N0 quanto em N1 Por enquanto, não falaremos da atuação do relógio em N0, e já podemos ligá-lo a duas das componentes de N1 que temos até agora: MIR Memória de Controle MPC INC Atraso Atraso Atraso 1 2 3 4
Fazendo isso, permitimos que uma instrução seja carregada da memória para o MIR apenas no início do ciclo (subciclo 1), que é quando a instrução começará a ser processada Além disso, permitimos que a próxima instrução seja selecionada na memória pelo MPC apenas ao final de um ciclo (subciclo 4), para que seja recebida pelo MIR no início do ciclo seguinte Note que o MIR estará desabilitado e não irá mudar durante os subciclos 2, 3 e 4. O mesmo vale para o MPC durante os subciclos 1, 2 e 3
Nosso nível N1 está quase concluído, mas precisamos estudar o interior do MIR antes de continuar Você certamente achou estranho quando dissemos que o MIR entende a função de cada bit de uma instrução apenas pela posição. Observe: MIR U L A D E S M B R M A R R D W R E n C C A M U X B A
No MIR, os bits da instrução que ele recebe se encaixam em cada uma das partes da figura Cada divisão do MIR serve para especificar o destino em N0 de cada bit. Por exemplo: o bit mais à esquerda será o controle de AMUX; do bloco DES saem os dois bits de controle para o deslocador; e assim por diante Não são mais necessários bits de controle para os latches. Já que eles possuem um momento certo para serem ativados e este é o mesmo em todos os ciclos, podemos deixar os latches por conta do relógio Para continuar a montagem do interpretador de microinstruções, precisamos primeiramente do que está por trás de
Alguns slides atrás, fizemos uma suposição de que as instruções do microprograma seriam processadas sequencialmente. Porém, nem sempre isso acontece É comum que ocorram desvios de endereços durante o processamento, e por isso precisamos reservar bits em uma instrução que especifiquem o endereço da próxima, para quando for necessário que esse desvio ocorra Já podemos substituir  por ADDR, conjunto de bits que representam cada endereço da memória de controle Se nossa memória de controle armazena até 256 instruções (= 2⁸), ADDR deve ser composto por 8 bits para poder representar todos os endereços
A D D R Ops, o problema do conflito de novo Ainda se lembra da solução? .  .  .  . Memória de Controle MPC INC Atraso Atraso Atraso 1 2 3 4
A D D R Basta adicionar um multiplexador Chamaremos este de MMUX MMUX .  .  .  . Memória de Controle MPC INC Atraso Atraso Atraso 1 2 3 4
É bastante comum que esses desvios de endereços sejam  condicionais Por exemplo, voltar ao primeiro endereço da memória de controle se uma condição X for satisfeita. Senão, selecionar o endereço seguinte Isto nos leva a revelar o que há por trás de  no nosso MIR: um par de bits, o qual chamaremos de COND, que determina se ocorrerá desvio ou se o endereço da próxima instrução será simplesmente o endereço atual + 1 Se você entendeu isso, então você pode concluir que COND será o controle de MMUX. Ou pelo menos parte dele, como veremos mais adiante
Lógica de microssequenciamento Diferente de todos os circuitos que apresentamos até aqui, este foi projetado para uma única situação, bem específica Ele recebe da ULA informações sobre o resultado de uma operação: um sinal N que diz se foi negativo e um sinal Z que diz se foi igual a 0 Recebe também o par de bits COND do MIR Enfim, sabendo se o resultado da operação foi positivo, nulo ou negativo e sabendo a condição de desvio da microinstrução atual, podemos indicar se o endereço da próxima microinstrução será simplesmente o atual + 1 ou algum outro
Lógica de microssequenciamento Talvez seja uma explicação confusa. Podemos clareá-la com um exemplo prático: Por que o trecho de programa acima é válido? Temos todas as informações necessárias para decidir se x será ou não retornado: sabemos qual a condição para retornar x, e sabemos se x satisfaz a condição (se x é 5, então x é maior que 0) A saída será o bit de controle para o nosso MMUX Representação: x = 5; if (x > 0) return x; LMS
MUX AMU X C O N D N1 N0 LMS N Z Controle Controle Temos enfim: U L A .  .  .  .  . A D D R Memória de Controle MPC INC Atraso Atraso Atraso 1 2 3 4 ULA
Agora, convencionando os significados dos bits COND: 00 = não desviar; a próxima instrução estará no endereço seguinte na sequência de instruções 01 = desviar para o endereço em ADDR se N = 1, isto é, se o resultado da operação realizada pela ULA for negativo 10 = desviar para o endereço em ADDR se Z = 1, isto é, se o resultado for 0 11 = desviar independente do resultado da ULA O sinal de controle de MMUX é resultado de  R.N + L.Z + L.R (L é o bit à esquerda, e R é o bit à direita no par COND) Relembrando: ‘+’ é o operador lógico OR e ‘ . ’ é AND
Nosso processador completo, incluindo N0 e N1, fica assim: Figura retirada e adaptada do livro  Organização Estruturada de Computadores,  de Andrew S. Tanenbaum (p. 140)
Para concluir, falta apenas falar sobre as ligações do relógio com as componentes de N0, que ainda não havíamos visto Para isto, vamos supor um microprograma qualquer que interpreta a soma de x + y, que foi executada com x recebendo o valor 3 e y recebendo o valor 5 Para simplificar o exemplo, escolheremos o ciclo em que a soma será efetuada. Isto significa que as constantes 3 e 5 já foram buscadas na memória e armazenadas nos registradores (suponhamos R1 e R2), e está pré-determinado que o resultado será armazenado em R3 Assim, a microinstrução deste ciclo será  r3 := r1 + r2  (o símbolo “:=“ denota  atribuição )
Para conseguir passar esta microinstrução para sua forma real (binária), vamos relembrar as divisões do MIR: Depois, vamos analisar quais os bits de controle necessários para cada um desses campos e, dessa forma, teremos nossa instrução em bits U L A D E S M B R M A R R D W R E n C C C O N D A M U X B A A D D R
Sabemos que ambos os operandos virão dos latches, já que não buscamos nada do MBR. Para que AMUX direcione à ULA a informação contida no latch A, o controle deve ser 0 Não há desvios nesta instrução, então COND = 00 A operação é de soma. Esta operação é realizada pela ULA quando o controle é igual a 00 0 00 00 U L A D E S M B R M A R R D W R E n C C C O N D A M U X B A A D D R
Nada será feito além da soma, então o controle do deslocador precisa ser 00 para que sua saída seja igual à entrada Nada sairá de MBR para a memória ou vice-versa O campo MAR também será 0 já que não enviará nenhum endereço para a memória principal 0 00 00 00 0 0 U L A D E S M B R M A R R D W R E n C C C O N D A M U X B A A D D R
Nada será lido da memória neste ciclo (RD = 0)... ...nem escrito (WR = 0) O bit EnC deve ser 1 porque neste ciclo haverá armazenamento de um valor (o resultado da soma está sendo atribuído a R3 na microinstrução). Evidentemente, o relógio irá ditar o momento certo do armazenamento 0 00 00 00 0 0 0 0 1 U L A D E S M B R M A R R D W R E n C C C O N D A M U X B A A D D R
Lembra-se dos nossos registradores? Começando da posição 0, R1, que contém o primeiro operando, está na  posição 3. Logo, A = 0011 (3 na base 2) R2, que contém o segundo operando, está na posição 4. Logo, B = 0100 0 00 00 00 0 0 0 0 1 PC IR AC . . . . . . . R1 R2 R3 Enfim, R3, destino do resultado, está na posição 5. Logo, C = 0101 0101 0100 0011 0 1 2 3 4 5 U L A D E S M B R M A R R D W R E n C C C O N D A M U X B A A D D R
Agora só nos resta o campo ADDR. Nossa microinstrução contém uma simples soma, sem desvio de endereços. Então, podemos atribuir qualquer valor para ADDR, já que ele será ignorado. Sendo assim, vamos optar por todos os bits sendo 0 0 00 00 00 0 0 0 0 1 0101 0100 0011 00000000 Enfim, nossa microinstrução na forma binária é:  00000000000101010100001100000000 U L A D E S M B R M A R R D W R E n C C C O N D A M U X B A A D D R
Agora, podemos começar a processar a instrução No  subciclo 1 , o relógio ativa apenas o MIR, porque estamos ainda na etapa da busca da instrução Vimos que a instrução é automaticamente identificada no MIR e não leva praticamente tempo algum. Consideramos então que a identificação também ocorre no subciclo 1 Memória de Controle MIR . . . . . 0 00 00 00 0 0 0 0 1 0101 0100 0011 00000000
Agora, podemos começar a processar a instrução No  subciclo 1 , o relógio ativa apenas o MIR, porque estamos ainda na etapa da busca da instrução Vimos que a instrução é automaticamente identificada no MIR e não leva praticamente tempo algum. Consideramos então que a identificação também ocorre no subciclo 1 Memória de Controle MIR . . . . . 0 00 00 00 0 0 0 0 1 0101 0100 0011 00000000
No  subciclo 2 , os bits dos campos A e B do MIR serão enviados aos decodificadores, para habilitar as saídas dos registradores R1 e R2 Com isso, os valores 3 e 5 são jogados aos barramentos A e B, respectivamente Neste subciclo, o relógio ativa os latches, para que possam receber esses valores Retomaremos a figura do livro  Organização Estruturada de Computadores  para mostrar o caminho dos dados durante este subciclo
3 5
O  subciclo 3  é o intervalo em que ULA e deslocador irão operar sobre os dados recebidos Aqui seria também o momento certo para que o MAR fosse carregado, se fosse necessário. Mas a microinstrução deste ciclo não envolve essa necessidade, e por isso tivemos o bit 0 na parte do MIR destinada ao MAR 5 + 3 --- 8 8 00 (soma) 00 (saída = entrada)
E finalmente, é no  subciclo 4  em que ocorre o armazenamento do resultado em um dos nossos 16 registradores, quando a instrução assim determina Nossa microinstrução  r3 := r1 + r2  atribui o resultado da soma a R3, o que significa que temos, sim, que armazenar dados em um dos 16 durante este ciclo O valor 8, neste instante, está no barramento C Já vimos que EnC é 1 durante todo o ciclo, pois é um dos sinais de controle fornecidos pelo MIR. Cabe ao relógio habilitar a entrada de R3 no momento certo, que é o subciclo 4 para qualquer microinstrução Agora que 8 está em R3, podemos começar um novo ciclo com uma nova microinstrução, caso ela exista
Podemos dividir o nosso MIR em 2 conceitos: ADDR é formado por 8 bits, e A, B e C por mais 4 cada. Ou seja, 20 bits compõem os operandos Os outros 12 do MIR compõem então o código da operação. Isto quer dizer que temos 2¹² (= 4096) possíveis instruções diferentes OPCODE (determina a operação da microinstrução) Operandos U L A D E S M B R M A R R D W R E n C C C O N D A M U X B A A D D R
Porém, queremos economizar novamente. Será que é possível? Com uma análise mais cuidadosa, veremos que podemos reduzir de 4096 para 2048 possibilidades Para iniciar nossa “eco- nomia”, precisamos ter em mente que alguns pares de bits do MIR não admitem todas as 4 combinações (00, 01, 10 e 11)
Mais especificamente, o par de bits RD e WR não admite a combinação 11, já que é impossível que aconteçam simultaneamente operações de leitura e escrita na memória Vamos raciocinar: tínhamos 2¹² possibilidades Quantas possibilidades teríamos se o par RD/WR  apenas admitisse  a combinação 11, isto é, se RD fosse sempre 1 e WR fosse sempre 1? 2 2 2 2 2 2 2 2 2 2 2 2 0 ou 1 = 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 = 2¹² 2 2 2 2 2 2 2 2 2 1 1 2 = 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 1 x 1 x 2 = 2¹⁰
Daí, temos que o nosso total de possibilidades agora é 2¹² - 2¹⁰, isto é, 4096 - 1024 = 3072 Podemos usar um raciocínio análogo para o deslocador, que nunca receberá a combinação 11 Teremos 3072 - 1024 = 2048 microinstruções Assim, já reduzimos as possibilidades de instruções pela metade. Poderíamos levar em conta outras restrições, mas chega de ser pão duro e vamos voltar ao que interessa

Microprogramacao

  • 1.
    Antes de falarde processadores, vamos resolver uma espécie de enigma, apresentado em uma aula de Arquiteturas de Computadores, pelo professor Vinod endereços dados controle (r/w) memória . . . . . . . . . processador O interior da CPU
  • 2.
    Dado o esquemado slide anterior, deseja-se que os dados lidos da memória passem por todos os nove pontos do processador, utilizando o mínimo possível de fios Os fios são todos retos, ou seja, a solução para o problema será o mínimo de linhas retas que passem por todos os pontos . . . . . . . . .
  • 3.
    Dado o esquemado slide anterior, deseja-se que os dados lidos da memória passem por todos os nove pontos do processador, utilizando o mínimo possível de fios Os fios são todos retos, ou seja, a solução para o problema será o mínimo de linhas retas que passem por todos os pontos . . . . . . . . . Uma configuração óbvia seria:
  • 4.
    Com essa solução,temos 5 retas Será que 5 é realmente o número mínimo de retas? Pense mais um pouco e clique para ver a resposta... . . . . . . . . .
  • 5.
    Com essa solução,temos 5 retas Será que 5 é realmente o número mínimo de retas? Pense mais um pouco e clique para ver a resposta... . . . . . . . . . Começando de uma forma diferente
  • 6.
    Com essa solução,temos 5 retas Será que 5 é realmente o número mínimo de retas? Pense mais um pouco e clique para ver a resposta... . . . . . . . . . Começando de uma forma diferente Seguindo por mais 2 pontos... Podemos usar apenas mais 2 retas!
  • 7.
    Com essa solução,temos 5 retas Será que 5 é realmente o número mínimo de retas? Pense mais um pouco e clique para ver a resposta... . . . . . . . . . Começando de uma forma diferente Seguindo por mais 2 pontos... Podemos usar apenas mais 2 retas! Por que não fazer isso...
  • 8.
    Com essa solução,temos 5 retas Será que 5 é realmente o número mínimo de retas? Pense mais um pouco e clique para ver a resposta... . . . . . . . . . Começando de uma forma diferente Seguindo por mais 2 pontos... Podemos usar apenas mais 2 retas! Por que não fazer isso... ...para depois fazer isso?
  • 9.
    Com essa solução,temos 5 retas Será que 5 é realmente o número mínimo de retas? Pense mais um pouco e clique para ver a resposta... . . . . . . . . . Começando de uma forma diferente Seguindo por mais 2 pontos... Podemos usar apenas mais 2 retas! Por que não fazer isso... ...para depois fazer isso? E finalmente isso. 4 retas!
  • 10.
    Curiosidades Por queesta última solução não é tão óbvia quanto a primeira, se não havia nenhuma restrição de que as retas não podiam ultrapassar a caixa? Não estamos acostumados a pensar além do que temos de concreto. Em países como os EUA, por exemplo, os alunos são estimulados desde o primário a “pensar fora da caixa” Não é à toa que a maioria das descobertas e invenções vem de países desenvolvidos Então, lembre-se: “Think outside the box”
  • 11.
    Processadores e MicroprogramaçãoVamos agora analisar mais a fundo o Modelo de Von Neumann Vamos definir conceitos como registradores , barramentos , Unidade Lógica Aritmética (ULA) , entre outros Em seguida, construiremos nosso processador utilizando todas as componentes apresentadas
  • 12.
    Registradores Locais ondesão armazenadas informações A diferença dos registradores para as células da memória principal é que os primeiros estão localizados dentro do processador. Isso faz com que informações contidas nos registradores sejam buscadas bem mais rapidamente para processamento Representação*: Registrador * ATENÇÃO: tanto esta como as outras representações feitas aqui não fazem parte de nenhum tipo de convenção – são meras ilustrações!
  • 13.
    Barramentos Conjuntos defios por onde passam bits de dados ou de controle Em outras palavras, artifícios utilizados para transmitir sinais de um dispositivo para outro Representação: ou n Onde n é o número de fios do barramento, lembrando que por cada fio passa um bit por vez
  • 14.
    Multiplexadores (MUX) Circuitosque recebem entradas, selecionam uma delas através de sinais de controle e as liberam como saída Representação: MUX
  • 15.
    Unidade Lógica Aritmética(ULA) Dispositivo que recebe dois dados de entrada A e B, opera-os sobre uma função pré-determinada e libera um dado de saída Recebe bits de controle que especificam a operação a ser realizada A ULA poderá fazer 4 operações em nossa abordagem, portanto são necessários 2 bits de controle (00, 01, 10 e 11 = 4 possibilidades) Por ora, a única operação relevante é a soma (00) Representação: ULA A B
  • 16.
    Deslocador Dispositivo querecebe um número binário e multiplica ou divide por 2, se desejado for, através do deslocamento à direita ou à esquerda Deslocar à direita significa “apagar” o bit mais à direita e adicionar um 0 à esquerda, e o procedimento é exatamente o oposto no deslocamento à esquerda Exemplo: 0010 (=2) Deslocando à direita (divisão): 0 001 (=1) Deslocando à esquerda (multiplicação): 010 0 (=4) Representação: DES
  • 17.
    Vamos falar maisdetalhadamente sobre registradores Sabemos que registradores contém dados que tanto podem ser lidos quanto sobrescritos Por isso, cada registrador precisa receber um bit que controla sua entrada, que chamaremos de HE, e outro que controla sua saída, HS Registradores possuem na sua estrutura interna um circuito flip-flop para cada bit que armazena, cada um deles conectado a um fio tanto do barramento de entrada como do barramento de saída
  • 18.
    Abaixo, esquematizada aestrutura interna de um registrador de 8 bits: E N T R A D A HS (habilita saída) S A Í D A Tri-state buffer HE (habilita entrada)
  • 19.
    Tri-state buffers são circuitos que evitam conflitos entre as saídas para o barramento, fazendo um tipo de “desconexão virtual” entre registradores e barramentos Esses conflitos seriam possíveis porque várias saídas de registradores estarão conectadas a um mesmo barramento Nossa arquitetura terá 16 registradores para armazenar dados, dentre os quais alguns tem funções especiais: PC (Program Counter) , IR (Instruction Register) e AC (Accumulator)
  • 20.
    O Program Countercontém o endereço da próxima instrução a ser buscada na memória principal O Instruction Register armazena a instrução buscada na memória. Ou seja, IR = MP[pc], sendo IR o conteúdo do registrador e pc um endereço da memória principal MP Accumulator é um registrador que armazena valores intermediários, que não seriam úteis ao final da operação Haverá em nossa arquitetura, além dos 16, outros registradores espalhados no processador: dois latches , A e B, o Memory Adress Register (MAR) e o Memory Buffer Register (MBR)
  • 21.
    Os latches servempara “segurar” dados no barramento e evitar que sejam sobrescritos Precisamos sempre lembrar que os fios do barramento apenas conduzem eletricidade, que já é instável por si mesma Latches serão importantes então para captar dados do barramento que estão prontos para serem processados, isto é, estão estáveis É como tirar uma foto: é necessário esperar até que todos estejam parados
  • 22.
    O MAR éligado ao barramento de endereços, que controla exclusivamente o fluxo de endereços que o processador envia para serem consultados na memória O MBR é ligado ao barramento de dados do sistema, e guarda os dados buscados na memória que serão processados na CPU ou os dados resultantes de algum processamento e que serão escritos na memória, ou até mesmo processados novamente
  • 23.
    Podemos agora começara “montar” o nosso processador Já foi dito que, para começar, vamos pensar apenas em somar dados. Para isso, precisamos simplesmente ler dois deles e somá-los Dois registradores e uma ULA são necessários PC IR AC R1 R2 . . . . Escolheremos então, dentre nossos 16 registradores, um registrador R1 e outro R2 para ler e somar seus dados ULA
  • 24.
    Intuitivamente, ligamos tudoatravés de barramentos Vamos guardar o resultado da soma no registrador R3 Barramento A Barramento B Barramento C ULA PC IR AC R1 R2 . . . R3
  • 25.
    Ainda não éo caso, mas se quiséssemos multiplicar ou dividir um número por 2, precisaríamos adicionar um deslocador Posicionando os 2 dispositivos separadamente, teríamos a vantagem de fazer operações simultâneas. Colocando ambos juntos, podemos usá-los consecutivamente, isto é, multiplicar ou dividir direto o resultado de uma soma, sem precisar armazená-lo antes
  • 26.
    Mesmo que aindanão seja necessário, vamos adiantar um deslocador para a nossa máquina, colocando o mesmo logo após a ULA: DES Barramento A Barramento B Barramento C ULA PC IR AC R1 R2 . . . R3
  • 27.
    Agora, precisamos pensarfisicamente Imagine se nossa soma fosse R1 ← R1 + R2, isto é, o registrador R1 receberia o resultado da soma de seu valor atual com o valor de R2 Enquanto a ULA processa os primeiros bits de cada dado, o barramento de saída está sendo modificado e, portanto, os novos valores já estão sendo salvos em R1, o que poderia causar um erro na soma Uma das soluções para esse impasse é adicionar latches antes da ULA, que guardarão os valores originais de R1 e R2 enquanto são processados
  • 28.
    DES LA LBBarramento A Barramento B Barramento C ULA PC IR AC R1 R2 . . . R3
  • 29.
    Ok, mas temosque pensar também na interação processador-memória É preciso adicionar, então, MAR e MBR. O MAR controla apenas informações (endereços) que vão do processador para a memória, mas o MBR controla o fluxo de dados de toda a interação, incluindo os dados de saída do deslocador, dados de entrada para a ULA e dados que serão lidos ou escritos na memória MAR MBR
  • 30.
    Em nossa arquitetura,o MAR poderá ser carregado a partir do latch B É interessante possibilitar o processamento de dados direto do MBR para a ULA, poupando assim o tempo de selecionar o registrador (entre 16 deles!) desejado para armazenar o resultado da operação, e depois selecionar o mesmo novamente para buscar os bits e processá-los
  • 31.
    Porém, repare queo MBR estará conectado à ULA, junto com o latch A. Há um conflito visível nessa configuração Lembre-se de que a ULA é apenas um circuito combinatório. Os bits de controle que recebe são apenas para especificar a operação a ser feita, o que significa que está sempre recebendo dados MBR ULA Latch A
  • 32.
    DES LA LBMAR MBR Barramento A Barramento B Barramento C conflito PC IR AC R1 R2 . . . R3 ULA
  • 33.
    DES LA LBMAR MBR Barramento A Barramento B Barramento C conflito Sem pânico! A solução é simples! PC IR AC R1 R2 . . . R3 ULA
  • 34.
    DES LA LBMAR MBR AMUX Barramento A Barramento B Barramento C Basta adicionar um multiplexador, que chamaremos de AMUX (multiplexador A): ULA PC IR AC R1 R2 . . . R3
  • 35.
    O multiplexador controlaráqual dos dados deve ser enviado para a ULA Mas e se a instrução a ser executada fosse R1 ← R1 + R2 + R3 + R4 ? Intuitivamente, a solução seria uma ULA com 4 entradas, com a vantagem de resolver essa soma sem precisar guardar nenhum resultado intermediário ULA A B C D
  • 36.
    Sendo assim, umaULA com 4 entradas é mais vantajosa para os casos de soma com 4 parcelas. O problema é que isto não será econômico se essa soma não ocorrer com frequência E pensando bem, de fato ela não é tão comum quanto uma soma com apenas 2 operandos, para a qual basta uma ULA com 2 entradas Unindo o útil ao agradável, por que não pensar em uma solução alternativa para realizar esta soma, ainda sem precisar salvar valores intermediários?
  • 37.
    Eis a solução:ULA 1 ULA 2 ULA 3 A B C D E F ULA 4 A B C D
  • 38.
    Curiosidades Fabricar 3ULA’s com 2 entradas é ainda mais econômico do que projetar uma única ULA com 4 Além disso, outra vantagem em reduzir o tamanho das ULA’s pode ser explicada fazendo uma analogia com a forma como são fabricados os próprios processadores
  • 39.
    Curiosidades Processadores sãoobtidos através de fatias redondas de silício, que podem ser divididas em partes pequenas ou nem tanto:
  • 40.
    Curiosidades Podemos pensarem cada um desses pedaços como uma componente do processador As fatias, porém, sempre tem impurezas Imagine, por exemplo, a fatia abaixo, onde as manchas vermelhas são suas impurezas
  • 41.
    Curiosidades Cada parteatingida por uma impureza está inutilizada Pensando nas partes como componentes, aquelas que foram atingidas não irão funcionar Na partição em componentes menores, repare que bem mais delas saíram ilesas
  • 42.
    Curiosidades Cada parteatingida por uma impureza está inutilizada Pensando nas partes como componentes, aquelas que foram atingidas não irão funcionar Na partição em componentes menores, repare que bem mais delas saíram ilesas O que restou:
  • 43.
    Recapitulando, temos entãoum processador que realiza a soma que queríamos Dentro do Processador Fora do Processador (memória) ULA PC IR AC R1 R2 . . . R3 DES LA LB MAR MBR AMUX Barramento A Barramento B Barramento C
  • 44.
    É importante ressaltarque as linhas que ilustram os barramentos estão sendo mostradas apenas nos caminhos que queríamos para a soma Na verdade, todos os registradores estão conectados aos barramentos A, B e C, e uma estrutura de controle é que determina de onde são lidos os dados e onde eles são gravados Falando em controle, já vimos que não são só os registradores que precisam de bits de controle para que o processador possa funcionar A seguir, vamos quantificar os bits de controle de todas as componentes e descrever para que eles servem em cada uma delas
  • 45.
    Temos 16 registradores para leitura e escrita A intenção é ler sempre 2 dados (um vai para o barramento A e o outro para o barramento B), realizar uma operação na ULA e/ou no deslocador e, quando necessário , armazenar o resultado em outro registrador Isso faz com que precisemos de 16 bits de controle para cada uma dessas operações. Entenderemos o motivo logo a seguir
  • 46.
    A posição doregistrador-alvo seria dada pela posição do bit 1 em meio aos 16 bits de controle Por exemplo, na operação de leitura cujo controle é: 0000000000001000 seria lido o dado do quarto registrador 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 PC IR AC R1 R2 . . . R3 R13
  • 47.
    A posição doregistrador-alvo seria dada pela posição do bit 1 em meio aos 16 bits de controle Por exemplo, na operação de leitura cujo controle é: 0000000000001000 seria lido o dado do quarto registrador 0 0 0 1 0 0 0 PC IR AC R1 R2 . . . R3 R13
  • 48.
    Mas não épor mágica que a informação do registrador é lida quando ele recebe o bit 1 Na estrutura interna dos registradores, vimos que eles recebem um bit HE para habilitar sua entrada e outro, HS, para habilitar sua saída No exemplo anterior, a operação a ser feita era de leitura. Então, é a saída do registrador que precisa ser habilitada, para que a informação seja jogada em um dos dois barramentos (A ou B) Bits de controle especificam qual dos dois barramentos será o destino dos dados, mas isso por ora não tem importância
  • 49.
    Caso a operaçãofosse de escrita no registrador, o bit que iria para cada registrador corresponderia ao HE, e aquele que recebesse 1 seria sobrescrito Mas, e se quisermos simplesmente gravar o resultado no MBR, e não gravar em nenhum registrador? Para isso, precisamos de um 17º bit de controle (EnC, Enable C ), ao barramento C, que impeça escrita em qualquer um dos 16 registradores caso isso não seja desejado
  • 50.
    Os outros registradores( latches A e B, MAR e MBR ) recebem, separadamente, também 2 bits de controle (HE e HS), exceto pelo MBR que recebe 4 Os outros 2 bits do MBR são comandos de leitura e escrita na memória (chamaremos RD, leitura, e WR, escrita) Nossa ULA recebe 2 bits de controle para as 4 operações que pode executar a partir de dados de entrada A e B: 00 para A + B, 01 para a operação lógica A AND B, 10 para simplesmente retornar A, e 11 para retornar o inverso de A
  • 51.
    O deslocador também precisa receber 2 bits de controle (00 para não deslocar, 01 para deslocar à esquerda, 10 para deslocar à direita e 11 nada faz) Finalmente, o multiplexador recebe apenas um bit para controlar qual dos dois dados que ele recebe deve seguir (0 para seguir o valor de latch A e 1 para seguir o valor que veio de MBR) Na ordem, temos então 16 + 16 + 17 + 2 + 2 +2 + 4 + 2 + 2 + 1 = 64 À primeira vista, precisamos apenas de um registrador especial para controle, de 64 bits, com um bit para cada sinal Mas serão todos esses 64 bits realmente necessários?
  • 52.
    A verdade éque muito desses bits podem ser dispensados Fazendo uma análise mais cuidadosa dos controles de cada componente, veremos por que muitos desses sinais são desnecessários Mas, antes disso, vamos introduzir uma nova componente que será necessária para nos livrarmos de alguns bits
  • 53.
    Decodificador Dispositivo que,para a nossa abordagem, receberá um número binário de 4 bits e, com ele, liberará 16 bits onde o bit na posição i será 1 e os outros, 0 OBS: i é o valor na base 10 do binário original. Note que i está entre 0 e 15 Exemplo: se o decodificador recebe o binário 0011 (=3), a saída será 0000000000001000 Representação: 3 2 1 0 DEC
  • 54.
    Afinal, qual agrande utilidade do decodificador? Pense: se com apenas 4 bits, podemos representar até o número 15, então é possível especificar em 4 bits qual o registrador a ser selecionado Adicionando decodificadores para A, B e C, passamos a conta de 16 + 16 + 17 bits para 4 + 4 + 5, já que o bit EnC permanece Pois é, já economizamos 36 bits de controle
  • 55.
    Os latches Ae B são registradores que não precisam de controle na saída. Precisam apenas controlar os dados que entram, que vão sobrescrever as informações que eles guardavam até então A saída dos latches pode ficar sempre liberada, já que a função deles é simplesmente salvar valores e não deixar que outras informações de um barramento passem por cima deles HS HE
  • 56.
    Os latches Ae B são registradores que não precisam de controle na saída. Precisam apenas controlar os dados que entram, que vão sobrescrever as informações que eles guardavam até então A saída dos latches pode ficar sempre liberada, já que a função deles é simplesmente salvar valores e não deixar que outras informações de um barramento passem por cima deles HS HE
  • 57.
    Para a nossaabordagem, o MAR também precisa de controle apenas na entrada, para controlar os endereços que nele entram e que serão então enviados para a memória automaticamente O mesmo serve para o MBR. Apenas um bit de controle é necessário, que é enviado para a saída do MBR, controlando se a informação nele contida irá ou não para a memória As operações de leitura e escrita na memória continuam sendo comandadas pelos bits RD e WR descritos anteriormente
  • 58.
    Ótimo, precisávamos deum registrador de 64 bits para controle, e agora conseguimos reduzir este tamanho para 24 Superficialmente, o que nós temos até então é: Memória principal Processador Controle (24 bits) N2 N0 N1 MAR MBR endereços dados controle (leit/esc)
  • 59.
    Podemos imaginar N0como um pobre estagiário, que trabalha e executa ordens O controle, N1, seria o chefe, quem dá as ordens, através da busca das instruções e dos recursos presentes na memória principal Aos poucos, iremos desvendar o que está por trás da nuvem no slide anterior
  • 60.
    E nosso proces-sador ficou assim: DES LA LB MAR MBR AMUX Barramento A Barramento B Barramento C 16 registradores 4 4 4 1 16 16 17 1 1 1 2 2 1 1 2 01234 . . . . . . . . . . 23 bits RD/WR ULA A B C Controle
  • 61.
    Vamos dessa vezutilizar como exemplo a instrução R1 ← R1 + R2, para ilustrar como ficam os bits de controle durante o processo A B C EnC AMUX ULA RD WR MAR MBR DES LA LB
  • 62.
    Chamaremos o momentoinicial de t₀ Os registradores R1 e R2 ficam nas posições 3 e 4, respectivamente, lembrando que o primeiro registrador, PC, fica na posição 0. O valor em R1 será jogado no barramento A, e o valor de R2 no barramento B; logo, A = 0011 e B = 0100 O resultado será armazenado em R1, então o controle do barramento C deve também ser 0011
  • 63.
    Obviamente, no iníciodo processo ainda não podemos gravar nada no destino, então EnC tem de estar “desativado” Neste momento, não há problemas em especificar qual dos 2 dados (vindos do MBR ou do latch A) o AMUX irá direcionar para a ULA. Sabemos que serão dados vindos de latch A, então o bit de controle para AMUX será 0 Já vimos que a combinação do controle para que a ULA opere uma soma é 00
  • 64.
    Nada está sendolido ou escrito na memória (RD = 0 e WR = 0) MAR não receberá nenhum endereço de memória MBR também não está realizando nenhuma atividade em t₀ Também já vimos que a combinação que faz com que o deslocador retorne a própria entrada é 00 As entradas dos latches A e B devem estar desabilitadas, pois as informações ainda não foram transferidas para os barramentos A e B
  • 65.
    Temos então, nomomento t₀: A B C EnC AMUX ULA RD WR MAR MBR DES LA LB t₀ 0011 0100 0011 0 0 00 0 0 0 000 00 0 0
  • 66.
    Após um tempopara busca dos dados, t ь , os únicos controles que se modificam são aqueles dos latches Isso porque, agora que os dados já foram jogados aos barramentos, os latches precisam recebê-los, quando estáveis, para que sejam transferidos à ULA Vamos considerar t₁ = t₀ + t ь
  • 67.
    Temos então, nomomento t₁ : A B C EnC AMUX ULA RD WR MAR MBR DES LA LB t₀ 0011 0100 0011 0 0 00 0 0 0 000 00 0 0 t₁ 0011 0100 0011 0 0 00 0 0 0 000 00 1 1
  • 68.
    Após um tempode execução, t є , os latches precisam voltar a ser 0, para que nada presente nos barramentos A e B sobrescreva os dados armazenados nos latches, já que não sabemos se eles virão a ser ainda necessários para a ULA futuramente Além disso, se queremos gravar o resultado de volta em R1, EnC precisa agora passar a ser 1 O resto permanece inalterado Agora consideremos t₂ = t₀ + t ь + t є
  • 69.
    Temos então, nomomento t₂ : A B C EnC AMUX ULA RD WR MAR MBR DES LA LB t₀ 0011 0100 0011 0 0 00 0 0 0 000 00 0 0 t₁ 0011 0100 0011 0 0 00 0 0 0 000 00 1 1 t₂ 0011 0100 0011 1 0 00 0 0 0 000 00 0 0
  • 70.
    Mas então, énecessário ler toda a sequência de bits de controle 3 vezes para uma simples operação de soma? Vimos pela tabela que pouca coisa se altera durante o tempo que decorre desde a leitura dos dados nos registradores até o armazenamento do resultado em um deles Então, deve haver uma maneira mais inteligente e menos custosa de executar instruções. Afinal, tempo é sempre precioso
  • 71.
    Relógio (clock) Esteé outro dispositivo importante, que emite uma sequência de pulsos periódicos que controlam alguns circuitos da máquina Se os pulsos são periódicos, quer dizer que possuem uma determinada frequência O período de cada pulsação define o ciclo da máquina A máquina realiza um conjunto de atividades durante um ciclo Representação: Marcador de frequência Ciclo Pulsos
  • 72.
    Agora, podemos conservartodos os bits que se mantiveram inalterados na tabela, deixando por conta do relógio as alterações necessárias Por exemplo, sabemos que o bit EnC está diretamente relacionado ao bit HE dos registradores Os pulsos enviados pelo clock definem então o momento exato em que a entrada do registrador deve ser habilitada, caso se deseje armazenar o resultado de algum cálculo em um registrador Isto pode ser feito através de um circuito bastante simples: CK EnC HE
  • 73.
    Com isso, játemos tudo de que precisamos para começar a ver o que está por dentro da nuvem que havia em N1 Em outras palavras, vamos agora entender como funciona toda a máquina de controle do processador e como ela executa o microprograma Microprogramas são sequências de instruções (em binário, evidentemente) que controlam o funcionamento de cada componente em N0 Cada instrução de um microprograma é executada em um ciclo
  • 74.
    O processamento deuma microinstrução se resume a: Busca da instrução Identificação da instrução “ Execução”, entre aspas porque engloba na verdade: Busca dos operandos Operação Armazenamento do resultado Temos então 5 atividades que são realizadas pelo processador durante um ciclo
  • 75.
    Dentre as 5atividades listadas, o tempo necessário para a segunda (identificação de uma instrução) será quase nulo na nossa abordagem Isto porque teremos na nossa arquitetura de controle (N1) um registrador especial chamado MIR ( MicroInstruction Register ), para onde cada microinstrução será carregada O MIR já “entende” o significado dos bits de uma instrução de acordo com a posição de cada um MIR
  • 76.
    Visto isso, orelógio que utilizaremos poderá ser dividido em 4 subciclos : O relógio terá 4 saídas, das quais 3 possuem atrasos. Isso faz com que sejam gerados pulsos em momentos diferentes para cada saída Cada uma dessas saídas consiste em um subciclo, como vemos na representação acima 1 ciclo 1 subciclo Atraso Atraso Atraso
  • 77.
    Teremos também emN1 uma memória, chamada memória de controle , onde são armazenadas e de onde serão lidas as microinstruções Nossa memória de controle poderá armazenar, no máximo, 256 instruções, cada uma com 32 bits Se é no MIR onde cada instrução será carregada, concluímos que a largura do MIR será de 32 bits MIR Memória de Controle Carrega instrução
  • 78.
    Toda memória precisaestar ligada a um MAR e um MBR, e com a memória de controle não é diferente Portanto, vamos adicionar um registrador MAR, que chamaremos de MPC ( MicroProgram Counter ), cuja função é encontrar a próxima instrução do microprograma a ir para o MIR MIR Memória de Controle MPC Recebe endereço da próxima instrução Envia endereço da próxima instrução
  • 79.
    O MBR damemória de controle já está em N1... ...é o próprio MIR! Mas precisamos voltar a falar do MPC. De onde ele recebe a próxima microinstrução? Podemos supor que as instruções são executadas sequencialmente. Neste caso, basta incrementar o endereço atual, e teremos o endereço da próxima Precisamos então de uma componente simples, mas que ainda não tínhamos visto
  • 80.
    Incrementador Circuito relativamentesimples de poucas portas lógicas que, como o nome já diz, recebe um número binário como entrada e retorna o seu sucessor O número binário de entrada, no incrementador que usaremos no nosso exemplo, será composto por 8 bits Representação: INC
  • 81.
    Temos até agora:Visivelmente, temos um problema MPC precisa ser controlado para não ficar o tempo todo selecio- nando endereços na memória! MIR Memória de Controle MPC INC
  • 82.
    Vamos inserir agorao relógio, que será uma componente fundamental para todo o processador, tanto em N0 quanto em N1 Por enquanto, não falaremos da atuação do relógio em N0, e já podemos ligá-lo a duas das componentes de N1 que temos até agora: MIR Memória de Controle MPC INC Atraso Atraso Atraso 1 2 3 4
  • 83.
    Fazendo isso, permitimosque uma instrução seja carregada da memória para o MIR apenas no início do ciclo (subciclo 1), que é quando a instrução começará a ser processada Além disso, permitimos que a próxima instrução seja selecionada na memória pelo MPC apenas ao final de um ciclo (subciclo 4), para que seja recebida pelo MIR no início do ciclo seguinte Note que o MIR estará desabilitado e não irá mudar durante os subciclos 2, 3 e 4. O mesmo vale para o MPC durante os subciclos 1, 2 e 3
  • 84.
    Nosso nível N1está quase concluído, mas precisamos estudar o interior do MIR antes de continuar Você certamente achou estranho quando dissemos que o MIR entende a função de cada bit de uma instrução apenas pela posição. Observe: MIR U L A D E S M B R M A R R D W R E n C C A M U X B A
  • 85.
    No MIR, osbits da instrução que ele recebe se encaixam em cada uma das partes da figura Cada divisão do MIR serve para especificar o destino em N0 de cada bit. Por exemplo: o bit mais à esquerda será o controle de AMUX; do bloco DES saem os dois bits de controle para o deslocador; e assim por diante Não são mais necessários bits de controle para os latches. Já que eles possuem um momento certo para serem ativados e este é o mesmo em todos os ciclos, podemos deixar os latches por conta do relógio Para continuar a montagem do interpretador de microinstruções, precisamos primeiramente do que está por trás de
  • 86.
    Alguns slides atrás,fizemos uma suposição de que as instruções do microprograma seriam processadas sequencialmente. Porém, nem sempre isso acontece É comum que ocorram desvios de endereços durante o processamento, e por isso precisamos reservar bits em uma instrução que especifiquem o endereço da próxima, para quando for necessário que esse desvio ocorra Já podemos substituir por ADDR, conjunto de bits que representam cada endereço da memória de controle Se nossa memória de controle armazena até 256 instruções (= 2⁸), ADDR deve ser composto por 8 bits para poder representar todos os endereços
  • 87.
    A D DR Ops, o problema do conflito de novo Ainda se lembra da solução? . . . . Memória de Controle MPC INC Atraso Atraso Atraso 1 2 3 4
  • 88.
    A D DR Basta adicionar um multiplexador Chamaremos este de MMUX MMUX . . . . Memória de Controle MPC INC Atraso Atraso Atraso 1 2 3 4
  • 89.
    É bastante comumque esses desvios de endereços sejam condicionais Por exemplo, voltar ao primeiro endereço da memória de controle se uma condição X for satisfeita. Senão, selecionar o endereço seguinte Isto nos leva a revelar o que há por trás de no nosso MIR: um par de bits, o qual chamaremos de COND, que determina se ocorrerá desvio ou se o endereço da próxima instrução será simplesmente o endereço atual + 1 Se você entendeu isso, então você pode concluir que COND será o controle de MMUX. Ou pelo menos parte dele, como veremos mais adiante
  • 90.
    Lógica de microssequenciamentoDiferente de todos os circuitos que apresentamos até aqui, este foi projetado para uma única situação, bem específica Ele recebe da ULA informações sobre o resultado de uma operação: um sinal N que diz se foi negativo e um sinal Z que diz se foi igual a 0 Recebe também o par de bits COND do MIR Enfim, sabendo se o resultado da operação foi positivo, nulo ou negativo e sabendo a condição de desvio da microinstrução atual, podemos indicar se o endereço da próxima microinstrução será simplesmente o atual + 1 ou algum outro
  • 91.
    Lógica de microssequenciamentoTalvez seja uma explicação confusa. Podemos clareá-la com um exemplo prático: Por que o trecho de programa acima é válido? Temos todas as informações necessárias para decidir se x será ou não retornado: sabemos qual a condição para retornar x, e sabemos se x satisfaz a condição (se x é 5, então x é maior que 0) A saída será o bit de controle para o nosso MMUX Representação: x = 5; if (x > 0) return x; LMS
  • 92.
    MUX AMU XC O N D N1 N0 LMS N Z Controle Controle Temos enfim: U L A . . . . . A D D R Memória de Controle MPC INC Atraso Atraso Atraso 1 2 3 4 ULA
  • 93.
    Agora, convencionando ossignificados dos bits COND: 00 = não desviar; a próxima instrução estará no endereço seguinte na sequência de instruções 01 = desviar para o endereço em ADDR se N = 1, isto é, se o resultado da operação realizada pela ULA for negativo 10 = desviar para o endereço em ADDR se Z = 1, isto é, se o resultado for 0 11 = desviar independente do resultado da ULA O sinal de controle de MMUX é resultado de R.N + L.Z + L.R (L é o bit à esquerda, e R é o bit à direita no par COND) Relembrando: ‘+’ é o operador lógico OR e ‘ . ’ é AND
  • 94.
    Nosso processador completo,incluindo N0 e N1, fica assim: Figura retirada e adaptada do livro Organização Estruturada de Computadores, de Andrew S. Tanenbaum (p. 140)
  • 95.
    Para concluir, faltaapenas falar sobre as ligações do relógio com as componentes de N0, que ainda não havíamos visto Para isto, vamos supor um microprograma qualquer que interpreta a soma de x + y, que foi executada com x recebendo o valor 3 e y recebendo o valor 5 Para simplificar o exemplo, escolheremos o ciclo em que a soma será efetuada. Isto significa que as constantes 3 e 5 já foram buscadas na memória e armazenadas nos registradores (suponhamos R1 e R2), e está pré-determinado que o resultado será armazenado em R3 Assim, a microinstrução deste ciclo será r3 := r1 + r2 (o símbolo “:=“ denota atribuição )
  • 96.
    Para conseguir passaresta microinstrução para sua forma real (binária), vamos relembrar as divisões do MIR: Depois, vamos analisar quais os bits de controle necessários para cada um desses campos e, dessa forma, teremos nossa instrução em bits U L A D E S M B R M A R R D W R E n C C C O N D A M U X B A A D D R
  • 97.
    Sabemos que ambosos operandos virão dos latches, já que não buscamos nada do MBR. Para que AMUX direcione à ULA a informação contida no latch A, o controle deve ser 0 Não há desvios nesta instrução, então COND = 00 A operação é de soma. Esta operação é realizada pela ULA quando o controle é igual a 00 0 00 00 U L A D E S M B R M A R R D W R E n C C C O N D A M U X B A A D D R
  • 98.
    Nada será feitoalém da soma, então o controle do deslocador precisa ser 00 para que sua saída seja igual à entrada Nada sairá de MBR para a memória ou vice-versa O campo MAR também será 0 já que não enviará nenhum endereço para a memória principal 0 00 00 00 0 0 U L A D E S M B R M A R R D W R E n C C C O N D A M U X B A A D D R
  • 99.
    Nada será lidoda memória neste ciclo (RD = 0)... ...nem escrito (WR = 0) O bit EnC deve ser 1 porque neste ciclo haverá armazenamento de um valor (o resultado da soma está sendo atribuído a R3 na microinstrução). Evidentemente, o relógio irá ditar o momento certo do armazenamento 0 00 00 00 0 0 0 0 1 U L A D E S M B R M A R R D W R E n C C C O N D A M U X B A A D D R
  • 100.
    Lembra-se dos nossosregistradores? Começando da posição 0, R1, que contém o primeiro operando, está na posição 3. Logo, A = 0011 (3 na base 2) R2, que contém o segundo operando, está na posição 4. Logo, B = 0100 0 00 00 00 0 0 0 0 1 PC IR AC . . . . . . . R1 R2 R3 Enfim, R3, destino do resultado, está na posição 5. Logo, C = 0101 0101 0100 0011 0 1 2 3 4 5 U L A D E S M B R M A R R D W R E n C C C O N D A M U X B A A D D R
  • 101.
    Agora só nosresta o campo ADDR. Nossa microinstrução contém uma simples soma, sem desvio de endereços. Então, podemos atribuir qualquer valor para ADDR, já que ele será ignorado. Sendo assim, vamos optar por todos os bits sendo 0 0 00 00 00 0 0 0 0 1 0101 0100 0011 00000000 Enfim, nossa microinstrução na forma binária é: 00000000000101010100001100000000 U L A D E S M B R M A R R D W R E n C C C O N D A M U X B A A D D R
  • 102.
    Agora, podemos começara processar a instrução No subciclo 1 , o relógio ativa apenas o MIR, porque estamos ainda na etapa da busca da instrução Vimos que a instrução é automaticamente identificada no MIR e não leva praticamente tempo algum. Consideramos então que a identificação também ocorre no subciclo 1 Memória de Controle MIR . . . . . 0 00 00 00 0 0 0 0 1 0101 0100 0011 00000000
  • 103.
    Agora, podemos começara processar a instrução No subciclo 1 , o relógio ativa apenas o MIR, porque estamos ainda na etapa da busca da instrução Vimos que a instrução é automaticamente identificada no MIR e não leva praticamente tempo algum. Consideramos então que a identificação também ocorre no subciclo 1 Memória de Controle MIR . . . . . 0 00 00 00 0 0 0 0 1 0101 0100 0011 00000000
  • 104.
    No subciclo2 , os bits dos campos A e B do MIR serão enviados aos decodificadores, para habilitar as saídas dos registradores R1 e R2 Com isso, os valores 3 e 5 são jogados aos barramentos A e B, respectivamente Neste subciclo, o relógio ativa os latches, para que possam receber esses valores Retomaremos a figura do livro Organização Estruturada de Computadores para mostrar o caminho dos dados durante este subciclo
  • 105.
  • 106.
    O subciclo3 é o intervalo em que ULA e deslocador irão operar sobre os dados recebidos Aqui seria também o momento certo para que o MAR fosse carregado, se fosse necessário. Mas a microinstrução deste ciclo não envolve essa necessidade, e por isso tivemos o bit 0 na parte do MIR destinada ao MAR 5 + 3 --- 8 8 00 (soma) 00 (saída = entrada)
  • 107.
    E finalmente, éno subciclo 4 em que ocorre o armazenamento do resultado em um dos nossos 16 registradores, quando a instrução assim determina Nossa microinstrução r3 := r1 + r2 atribui o resultado da soma a R3, o que significa que temos, sim, que armazenar dados em um dos 16 durante este ciclo O valor 8, neste instante, está no barramento C Já vimos que EnC é 1 durante todo o ciclo, pois é um dos sinais de controle fornecidos pelo MIR. Cabe ao relógio habilitar a entrada de R3 no momento certo, que é o subciclo 4 para qualquer microinstrução Agora que 8 está em R3, podemos começar um novo ciclo com uma nova microinstrução, caso ela exista
  • 108.
    Podemos dividir onosso MIR em 2 conceitos: ADDR é formado por 8 bits, e A, B e C por mais 4 cada. Ou seja, 20 bits compõem os operandos Os outros 12 do MIR compõem então o código da operação. Isto quer dizer que temos 2¹² (= 4096) possíveis instruções diferentes OPCODE (determina a operação da microinstrução) Operandos U L A D E S M B R M A R R D W R E n C C C O N D A M U X B A A D D R
  • 109.
    Porém, queremos economizarnovamente. Será que é possível? Com uma análise mais cuidadosa, veremos que podemos reduzir de 4096 para 2048 possibilidades Para iniciar nossa “eco- nomia”, precisamos ter em mente que alguns pares de bits do MIR não admitem todas as 4 combinações (00, 01, 10 e 11)
  • 110.
    Mais especificamente, opar de bits RD e WR não admite a combinação 11, já que é impossível que aconteçam simultaneamente operações de leitura e escrita na memória Vamos raciocinar: tínhamos 2¹² possibilidades Quantas possibilidades teríamos se o par RD/WR apenas admitisse a combinação 11, isto é, se RD fosse sempre 1 e WR fosse sempre 1? 2 2 2 2 2 2 2 2 2 2 2 2 0 ou 1 = 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 = 2¹² 2 2 2 2 2 2 2 2 2 1 1 2 = 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 1 x 1 x 2 = 2¹⁰
  • 111.
    Daí, temos queo nosso total de possibilidades agora é 2¹² - 2¹⁰, isto é, 4096 - 1024 = 3072 Podemos usar um raciocínio análogo para o deslocador, que nunca receberá a combinação 11 Teremos 3072 - 1024 = 2048 microinstruções Assim, já reduzimos as possibilidades de instruções pela metade. Poderíamos levar em conta outras restrições, mas chega de ser pão duro e vamos voltar ao que interessa