Download - Principios da microprogramacao
Princípios da MicroprogramaçãoPrincípios da Microprogramação
Horizontal X VerticalHorizontal X Vertical
Passaremos agora a discutir sobre dois conceitos relacionados à microprogramação
Na microprogramação horizontal, a preocupação é exclusivamente com as portas lógicas
Nada de sinais codificados para economia de bits: cada conjunto de sinais que sai do MIR controla de forma direta sua respectiva componente
1
Isto significa que as microinstruções em uma arquitetura assim teriam largura equivalente ao total de sinais de controle recebidos pelas componentes
2
...mas é claro que estaexplicação não deixounada muito claro
Usaremos um exemplo da máquina que projetamos anteriormente. Lembra-se do nosso MIR?
3
ULA
DES
MBR
MAR
RD
WR
EnC
CCOND
AMUX
B A
ADDR
Os campos A, B e C possuíam 4 bits cada, que passavam por decodificadores onde eram “transformados” em 16
Se tivéssemos usado, exclusivamente, microprogramação horizontal na arquitetura, cada um desses campos teria 16 bits. Isto aumentaria drasticamente a largura do MIR
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
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
Assim, concluímos que o campo ULA passaria a ter 4 bits e o campo DES, 3 bits
4
É fácil perceber que seguir à riscao conceito de microprogramaçãohorizontal não teria sido a opçãomais inteligente para a nossa máquina,já que sempre optamos por tentar diminuir o tamanho da memória de controle e, assim, do MIR
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
5
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
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
Nosso MIR, que antes tinha 32 bits de largura, pode passar a ter apenas 12, como veremos a seguir
6
Com apenas 4 bits para OPCODE e 8 para operandos (4 para cada), é possível escrever um microprograma equivalente ao que vimos anteriormente
É claro que as restrições aumentam com esses cortes
Agora, só temos 2 operandos. Como saber onde o resultado será gravado?
A solução é guardar o resultado sempre no mesmo registrador de um dos operandos
7
OPCODEOPERANDO 1 OPERANDO 2
ADDR (endereço)
4 bits 4 bits 4 bits
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 fazerR1 ← R1 + R2; e depois R3 ← R1
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
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
8
9
Recordando: os dados de entrada são sempre carregados dos registradores no subciclo 2, e o resultado é salvo em um deles no subciclo 4
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
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
10
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
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
Resta falar sobre OP, a mais importante das 3 inéditas componentes em nossa nova máquina
11
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
O problema é que quem está projetando a máquina precisa construir todo um circuito que gere os bits de controle corretos para cada OPCODE
12
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
Tudo o que sabemos é: A combinação de OPCODE 1000 gera o bit 1 para MAR A combinação de OPCODE 1001 gera o bit 1 para MAR As demais combinações geram o bit 0 para MAR
Temos então uma tabela que contém os bits de entrada e também os bits de saída
13
14
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
A, B, C e D seguem a ordem do bit mais significativo para o menos significativo, e S é a saída A partir daí, basta utilizar os conhecimentos da disciplina de Circuitos Digitais para montar um circuito apropriado
Da tabela, obtemos (A.B.C.D) + (A.B.C.D), que pode ser simplificado em A.B.C
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
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
15
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
16
80 instruções
Muito provavelmente,mais de 80 instruções
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)
Assim, podemos saber qual das duas máquinas será mais econômica através de um cálculo bastante simples
O microprograma que ocupar menos “volume” na memória de controle determinará a resposta
17
Por “volume”, entende-se a largura de cada microinstrução multiplicada pelo total de microinstruções
Na máquina original, ocupou-se um volume de 80 x 32 = 2560 bits. Se fizermos:
80 x 32 > n x 12teremos 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
E a tendência é que realmente tenha bem menos que 213 microinstruções
18
Então, toda máquina deve ser projetada seguindo à risca o princípio da microprogramação vertical?
Certamente não. Lembre-se de que cada microinstrução é, independente de sua largura, executada no tempo de um ciclo, que é fixo
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
19
NanoprogramaçãoNanoprogramação
Falando em economia, existe ainda outra forma de ocupar menos memória no armazenamento dos microprogramas, que deve ser discutida
Vimos que programas são sequências de instruções. É possível dividi-los em sequências e instruções
Vamos a seguir entender melhor esta jogada
20
Consideremos um microprograma que ocupa completamente esta memória de controle, isto é, possui h instruções de largura w
Podemos dividi-lo em duas partes:
21
Memória de Controleh
w
À esquerda, temos uma memória que armazena números binários que identificam cada instrução
As instruções completas são armazenadas na memória à direita, com a vantagem de cada uma aparecer apenas uma vez
22
1320125...
h
w
sequência na qualocorre cada instrução,identificada apenaspor um número
ABC...
cada instrução individualmente, todas distintas entre si(n instruções nototal)
Novamente, a melhor maneira de clarear tudo é ilustrando com um pequeno exemplo
Imagine o seguinte microprograma:
23
ABAAACDDBDCAACDB
A equivale a 01100101100101101001 B equivale a 10110110001000011011 C equivale a 11101000110100110000 D equivale a 00010110100101110010
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
Vamos agora dividir o microprograma. A parte à esquerda é o microprograma de fato, e à direita temos o nanoprograma, que guarda cada microinstrução diferente
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
24
25
00010000001011110111100000101101
h = 16
w = 20
01100101100101101001101101100010000110111110100011010011000000010110100101110010
00
011011
endereçosABAAACDDBDCAACDB
memória de controle
nanomemória
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
Portanto, a memória de controle passou a ter 16 x 2 = 32 bits ocupados
Já a nanomemória possui o total de instruções multiplicado pela largura das mesmas, o que totaliza 80 bits (4 x 20)
Dos 320 bits originais, o microprograma passou a ocupar apenas 32 + 80 = 112 bits! 26
De uma forma geral, temos: o microprograma original ocupa h.w bits 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
a nanomemória introduzida tem n.w bits ocupados Em outras palavras, a nanoprogramação será
econômica sempre que a seguinte inequação for satisfeita:
h.w > h.log₂n + n.w
27
Observe que n aparece nos dois produtos à direita, sendo determinante na economia dos bits
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
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
28