Princípios da Microprogramação Horizontal X Vertical <ul><li>Passaremos agora a discutir sobre dois conceitos relacionados...
<ul><li>Isto significa que as microinstruções em uma arquitetura assim teriam largura equivalente ao total de sinais de co...
<ul><li>Usaremos um exemplo da máquina que projetamos anteriormente. Lembra-se do nosso MIR? </li></ul><ul><li>Os campos A...
<ul><li>Os campos ULA e DES também ficariam maiores. Os pares 00, 01, 10 e 11 também são codificações, as quais geram um c...
<ul><li>É fácil perceber que seguir à risca </li></ul><ul><li>o conceito de microprogramação </li></ul><ul><li>horizontal ...
<ul><li>A microprogramação vertical carrega uma ideia rigorosamente oposta à horizontal: encurtar ao máximo a largura das ...
<ul><li>Com apenas 4 bits para OPCODE e 8 para operandos (4 para cada), é possível escrever um microprograma equivalente a...
<ul><li>Antes, podíamos fazer R3 ← R1 + R2. Agora, se queremos de fato guardar em R3 o resultado da soma dos valores de R1...
<ul><li>Recordando: os dados de entrada são sempre carregados dos registradores no subciclo 2, e o resultado é salvo em um...
<ul><li>Para começo de conversa, já podemos com isso adiantar que não é possível testar se o resultado de uma operação da ...
<ul><li>Para cada combinação de OPCODE (16 possíveis, já que são 4 bits), são gerados 13 bits que controlam a lógica de mi...
<ul><li>Exemplificando: suponha que as combinações OPCODE para as instruções que iniciam as operações de leitura e escrita...
<ul><li>A, B, C e D seguem a ordem do bit mais significativo para o menos significativo, e S é a saída </li></ul><ul><li>A...
<ul><li>Da tabela, obtemos (A.B.C.D) + (A.B.C.D), que pode ser simplificado em A.B.C </li></ul><ul><li>Com isso, já temos ...
<ul><li>Para efeitos de comparação, vamos supor que fosse ser executado em nossa máquina original um microprograma de 80 i...
<ul><li>Como já foi dito, as restrições causadas pela fixação da largura de OPCODE em 4 fazem com que uma função desempenh...
<ul><li>Por “volume”, entende-se a largura de cada microinstrução multiplicada pelo total de microinstruções </li></ul><ul...
<ul><li>Então, toda máquina deve ser projetada seguindo à risca o princípio da microprogramação vertical? </li></ul><ul><l...
Nanoprogramação <ul><li>Falando em economia, existe ainda outra forma de ocupar menos memória no armazenamento dos micropr...
<ul><li>Consideremos um microprograma que ocupa completamente esta memória de controle, isto é, possui  h  instruções de l...
<ul><li>À esquerda, temos uma memória que armazena números binários que identificam cada instrução </li></ul><ul><li>As in...
<ul><li>Novamente, a melhor maneira de clarear tudo é ilustrando com um pequeno exemplo </li></ul><ul><li>Imagine o seguin...
<ul><li>Neste exemplo,  w  = 20 e  h  = 16, isto é, um total de 16 microinstruções onde a largura de cada uma é de 20 bits...
00 01 00 00 00 10 11 11 01 11 10 00 00 10 11 01 h = 16 w = 20 01100101100101101001 10110110001000011011 111010001101001100...
<ul><li>Vimos que cada linha da memória de controle passou a ter 2 bits apenas. Isto porque o microprograma tem, no total,...
<ul><li>De uma forma geral, temos: </li></ul><ul><ul><li>o microprograma original ocupa  h.w  bits </li></ul></ul><ul><ul>...
<ul><li>Observe que  n  aparece nos dois produtos à direita, sendo determinante na economia dos bits </li></ul><ul><li>Iss...
Próximos SlideShares
Carregando em…5
×

Principios da microprogramacao

821 visualizações

Publicada em

0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
821
No SlideShare
0
A partir de incorporações
0
Número de incorporações
10
Ações
Compartilhamentos
0
Downloads
6
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Principios da microprogramacao

  1. 1. Princípios da Microprogramação Horizontal X Vertical <ul><li>Passaremos agora a discutir sobre dois conceitos relacionados à microprogramação </li></ul><ul><li>Na microprogramação horizontal , a preocupação é exclusivamente com as portas lógicas </li></ul><ul><li>Nada de sinais codificados para economia de bits: cada conjunto de sinais que sai do MIR controla de forma direta sua respectiva componente </li></ul>
  2. 2. <ul><li>Isto significa que as microinstruções em uma arquitetura assim teriam largura equivalente ao total de sinais de controle recebidos pelas componentes </li></ul><ul><li>...mas é claro que esta </li></ul><ul><li>explicação não deixou </li></ul><ul><li>nada muito claro </li></ul>
  3. 3. <ul><li>Usaremos um exemplo da máquina que projetamos anteriormente. Lembra-se do nosso MIR? </li></ul><ul><li>Os campos A, B e C possuíam 4 bits cada, que passavam por decodificadores onde eram “transformados” em 16 </li></ul><ul><li>Se tivéssemos usado, exclusivamente, microprogramação horizontal na arquitetura, cada um desses campos teria 16 bits. Isto aumentaria drasticamente a largura do MIR </li></ul>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
  4. 4. <ul><li>Os campos ULA e DES também ficariam maiores. Os pares 00, 01, 10 e 11 também são codificações, as quais geram um conjunto de 4 bits que identificam qual a operação a ser realizada pela ULA ou pelo deslocador </li></ul><ul><li>No caso do deslocador, pode ser gerado um conjunto de 3 bits, já que o deslocador possui apenas 3 funções e o par 11 nunca ocorre </li></ul><ul><li>Assim, concluímos que o campo ULA passaria a ter 4 bits e o campo DES, 3 bits </li></ul>
  5. 5. <ul><li>É fácil perceber que seguir à risca </li></ul><ul><li>o conceito de microprogramação </li></ul><ul><li>horizontal não teria sido a opção </li></ul><ul><li>mais inteligente para a nossa máquina, </li></ul><ul><li>já que sempre optamos por tentar diminuir o tamanho da memória de controle e, assim, do MIR </li></ul><ul><li>Mas se quiséssemos ser ainda mais econômicos na largura das microinstruções (e do MIR, consequentemente) da arquitetura que projetamos, poderíamos aplicar o conceito de microprogramação vertical </li></ul>
  6. 6. <ul><li>A microprogramação vertical carrega uma ideia rigorosamente oposta à horizontal: encurtar ao máximo a largura das microinstruções, criando o máximo possível de codificações nos sinais </li></ul><ul><li>Diminuir o número de bits das microinstruções é geralmente uma ideia interessante. Vamos mostrar como ficaria nossa máquina se seguíssemos este princípio exclusivamente </li></ul><ul><li>Nosso MIR, que antes tinha 32 bits de largura, pode passar a ter apenas 12, como veremos a seguir </li></ul>
  7. 7. <ul><li>Com apenas 4 bits para OPCODE e 8 para operandos (4 para cada), é possível escrever um microprograma equivalente ao que vimos anteriormente </li></ul><ul><li>É claro que as restrições aumentam com esses cortes </li></ul><ul><li>Agora, só temos 2 operandos. Como saber onde o resultado será gravado? </li></ul><ul><li>A solução é guardar o resultado sempre no mesmo registrador de um dos operandos </li></ul>OPCODE OPERANDO 1 OPERANDO 2 ADDR (endereço) 4 bits 4 bits 4 bits
  8. 8. <ul><li>Antes, podíamos fazer R3 ← R1 + R2. Agora, se queremos de fato guardar em R3 o resultado da soma dos valores de R1 e R2, precisamos fazer </li></ul><ul><li>R1 ← R1 + R2; e depois R3 ← R1 </li></ul><ul><li>Por este exemplo já foi possível perceber que o microprograma ficaria mais extenso do que aquele que fizemos anteriormente, mas isso é assunto para mais tarde </li></ul><ul><li>A seguir, será apresentada como ficaria nossa máquina em microprogramação vertical. Repare na presença de 3 novos elementos: OP , AND e NZ </li></ul>
  9. 9.
  10. 10. <ul><li>Recordando: os dados de entrada são sempre carregados dos registradores no subciclo 2, e o resultado é salvo em um deles no subciclo 4 </li></ul><ul><li>Já que agora temos 2 operandos e um deles será ao mesmo tempo um dado de entrada e o destino do resultado, o bloco AND se faz necessário para ativar cada barramento no subciclo correto </li></ul><ul><li>Pelo esquema apresentado alguns slides atrás, vimos que os 2 operandos da microinstrução pode também ser usado como um endereço. Isto significa que não podemos ter endereço e operandos em uma mesma microinstrução </li></ul>
  11. 11. <ul><li>Para começo de conversa, já podemos com isso adiantar que não é possível testar se o resultado de uma operação da ULA é maior, igual ou menor que 0, em apenas uma microinstrução </li></ul><ul><li>Precisamos portanto armazenar os bits N e Z liberados pela ULA, para que eles possam ser avaliados no ciclo seguinte. É aí que entra NZ, que nada mais é do que um registrador que armazena estes dois bits </li></ul><ul><li>Resta falar sobre OP, a mais importante das 3 inéditas componentes em nossa nova máquina </li></ul>
  12. 12. <ul><li>Para cada combinação de OPCODE (16 possíveis, já que são 4 bits), são gerados 13 bits que controlam a lógica de microssequenciamento (componente usada na avaliação dos bits N e Z), a ULA, o deslocador, o registrador NZ, o AMUX, os registradores MBR e MAR, e os sinais RD e WR; 2 bits para os 3 primeiros e um bit para os outros </li></ul><ul><li>O problema é que quem está projetando a máquina precisa construir todo um circuito que gere os bits de controle corretos para cada OPCODE </li></ul>
  13. 13. <ul><li>Exemplificando: suponha que as combinações OPCODE para as instruções que iniciam as operações de leitura e escrita (portanto, envolvem a ativação do MAR) sejam 1000 e 1001 </li></ul><ul><li>Tudo o que sabemos é: </li></ul><ul><ul><li>A combinação de OPCODE 1000 gera o bit 1 para MAR </li></ul></ul><ul><ul><li>A combinação de OPCODE 1001 gera o bit 1 para MAR </li></ul></ul><ul><ul><li>As demais combinações geram o bit 0 para MAR </li></ul></ul><ul><li>Temos então uma tabela que contém os bits de entrada e também os bits de saída </li></ul>
  14. 14. <ul><li>A, B, C e D seguem a ordem do bit mais significativo para o menos significativo, e S é a saída </li></ul><ul><li>A partir daí, basta utilizar os conhecimentos da disciplina de Circuitos Digitais para montar um circuito apropriado </li></ul>A B C D S 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 0 0 0 1 1 0 0 1 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1 0 1 1 1 0 0 1 1 1 1 0
  15. 15. <ul><li>Da tabela, obtemos (A.B.C.D) + (A.B.C.D), que pode ser simplificado em A.B.C </li></ul><ul><li>Com isso, já temos projetado o circuito que, recebendo os bits de OPCODE, gera o bit de controle apropriado para MAR. Os circuitos que vão gerar os outros 12 bits de controle são construídos utilizando o mesmo raciocínio deste exemplo </li></ul><ul><li>Enfim, o bloco OP nada mais é do que o conjunto de todos estes circuitos. Como chegar em cada um deles não é relevante para os nossos estudos </li></ul>
  16. 16. <ul><li>Para efeitos de comparação, vamos supor que fosse ser executado em nossa máquina original um microprograma de 80 instruções, lembrando que na máquina original uma microinstrução tinha 32 bits de largura, enquanto na que acabamos de projetar, uma microinstrução possui 12 bits </li></ul>80 instruções Muito provavelmente, mais de 80 instruções
  17. 17. <ul><li>Como já foi dito, as restrições causadas pela fixação da largura de OPCODE em 4 fazem com que uma função desempenhada por uma microinstrução em nossa primeira máquina necessite de mais de uma microinstrução na nova arquitetura (operar na ULA e depois avaliar o resultado, por exemplo) </li></ul><ul><li>Assim, podemos saber qual das duas máquinas será mais econômica através de um cálculo bastante simples </li></ul><ul><li>O microprograma que ocupar menos “volume” na memória de controle determinará a resposta </li></ul>
  18. 18. <ul><li>Por “volume”, entende-se a largura de cada microinstrução multiplicada pelo total de microinstruções </li></ul><ul><li>Na máquina original, ocupou-se um volume de 80 x 32 = 2560 bits. Se fizermos: </li></ul><ul><li>80 x 32 > n x 12 </li></ul><ul><li>teremos n < 213, isto é, a máquina que acabamos de projetar será mais econômica caso o microprograma equivalente àquele de 80 instruções tenha menos de 213 </li></ul><ul><li>E a tendência é que realmente tenha bem menos que 213 microinstruções </li></ul>
  19. 19. <ul><li>Então, toda máquina deve ser projetada seguindo à risca o princípio da microprogramação vertical? </li></ul><ul><li>Certamente não. Lembre-se de que cada microinstrução é, independente de sua largura, executada no tempo de um ciclo, que é fixo </li></ul><ul><li>Quanto mais microinstruções necessárias para executar uma função, mais lenta é a execução. Logo, a nossa primeira máquina é mais cara e mais rápida, enquanto a última é mais lenta, porém mais barata </li></ul>
  20. 20. Nanoprogramação <ul><li>Falando em economia, existe ainda outra forma de ocupar menos memória no armazenamento dos microprogramas, que deve ser discutida </li></ul><ul><li>Vimos que programas são sequências de instruções . É possível dividi-los em sequências e instruções </li></ul><ul><li>Vamos a seguir entender melhor esta jogada </li></ul>
  21. 21. <ul><li>Consideremos um microprograma que ocupa completamente esta memória de controle, isto é, possui h instruções de largura w </li></ul><ul><li>Podemos dividi-lo em duas partes: </li></ul>Memória de Controle h w
  22. 22. <ul><li>À esquerda, temos uma memória que armazena números binários que identificam cada instrução </li></ul><ul><li>As instruções completas são armazenadas na memória à direita, com a vantagem de cada uma aparecer apenas uma vez </li></ul>1 3 2 0 1 2 5 . . . h w sequência na qual ocorre cada instrução, identificada apenas por um número A B C . . . cada instrução individualmente, todas distintas entre si (n instruções no total)
  23. 23. <ul><li>Novamente, a melhor maneira de clarear tudo é ilustrando com um pequeno exemplo </li></ul><ul><li>Imagine o seguinte microprograma: </li></ul>A B A A A C D D B D C A A C D B <ul><li>A equivale a 01100101100101101001 </li></ul><ul><li>B equivale a 10110110001000011011 </li></ul><ul><li>C equivale a 11101000110100110000 </li></ul><ul><li>D equivale a 00010110100101110010 </li></ul>
  24. 24. <ul><li>Neste exemplo, w = 20 e h = 16, isto é, um total de 16 microinstruções onde a largura de cada uma é de 20 bits, totalizando 320 bits </li></ul><ul><li>Vamos agora dividir o microprograma. A parte à esquerda é o microprograma de fato, e à direita temos o nanoprograma, que guarda cada microinstrução diferente </li></ul><ul><li>Cada linha do microprograma passa a conter apenas o endereço da nanomemória no qual está a instrução que deveria estar naquele local do microprograma </li></ul>
  25. 25. 00 01 00 00 00 10 11 11 01 11 10 00 00 10 11 01 h = 16 w = 20 01100101100101101001 10110110001000011011 11101000110100110000 00010110100101110010 00 01 10 11 endereços A B A A A C D D B D C A A C D B memória de controle nanomemória
  26. 26. <ul><li>Vimos que cada linha da memória de controle passou a ter 2 bits apenas. Isto porque o microprograma tem, no total, 4 instruções diferentes, fazendo necessários log ₂4 = 2 bits para representá-las. A quantidade de linhas é a mesma do microprograma original: 16 </li></ul><ul><li>Portanto, a memória de controle passou a ter 16 x 2 = 32 bits ocupados </li></ul><ul><li>Já a nanomemória possui o total de instruções multiplicado pela largura das mesmas, o que totaliza 80 bits (4 x 20) </li></ul><ul><li>Dos 320 bits originais, o microprograma passou a ocupar apenas 32 + 80 = 112 bits! </li></ul>
  27. 27. <ul><li>De uma forma geral, temos: </li></ul><ul><ul><li>o microprograma original ocupa h.w bits </li></ul></ul><ul><ul><li>a memória de controle após a divisão passa de h.w para h.log₂n bits ocupados, onde n é o total de instruções diferentes do microprograma </li></ul></ul><ul><ul><li>a nanomemória introduzida tem n.w bits ocupados </li></ul></ul><ul><li>Em outras palavras, a nanoprogramação será econômica sempre que a seguinte inequação for satisfeita: </li></ul><ul><li>h.w > h.log₂n + n.w </li></ul>
  28. 28. <ul><li>Observe que n aparece nos dois produtos à direita, sendo determinante na economia dos bits </li></ul><ul><li>Isso faz sentido porque, se houver muitas instruções diferentes em relação ao número de linhas no microprograma original, recorrer à nanoprogramação não será eficiente. A nanomemória terá um tamanho próximo ao tamanho que tinha a memória de controle antes da divisão </li></ul><ul><li>Tudo o que teríamos então seria uma memória parecida com a anterior, e mais uma outra contendo apenas referências para a nova memória </li></ul>

×