EA-869 - Dúvidas Frequentes
Capítulo III
O que distingue um controlador hardwired de um
controlador microprogramado?
Qual é a relação entre a arquitetura de um computador e
a tecnologia do seu controlador?
Através do processador microprogramado especificado na
seção III.4 do livro-texto, exemplifique os formatos de instrução horizontal,
vertical e diagonal.
Faz sentido classificar uma microinstrução diagonal em monofásica
e polifásica?
Como é possível transferir o conteúdo do registrador RDM
para o registrador Acc no processador microprogramado
especificado na seção III.4?
Como é possível incrementar o conteúdo do PC
no processador microprogramado especificado na seção III.4?
Quais bits de condição gerados pela UAL podem
ser utilizados no controlador
do processador microprogramado da seção III.4 para implementar os desvios
condicionais (JUMPZERO e JUMPNEG)?
Como se consegue determinar o endereço inicial de um
microprograma a partir do código de operação, C.O.?
O processador especificado na seção III.4
reserva 4 bits para o código de operação, ou seja, ele permite
representar 16 instruções de forma distinta. Mas, da forma como
os microprogramas foram organizados na micromemória, só poderemos
implementar no máximo 9 instruções. Justifique esta afirmação.
Como poderemos contornar esta limitação?
Quais inicializações são necessárias para executar corretamente
um programa no computador microprogramado da seção III.4?
A ligação entre o registrador RI e o barramento 2 no processador
da seção III.4 consiste de 12 linhas, enquanto o barramento 2 é constituído de 16 linhas.
Os 4 bits mais significativos do barramento ficarão indefinidos?
O microprograma que multiplica os conteúdos dos registradores
Acc e R1 apresentado na seção III.4.4 é
compatível com a organização
mostrada na Fig. 3.16 do livro-texto (versão do segundo semestre de 1997)?
Caso negativo, propõe uma solução alternativa.
O conteúdo da micromemória ilustrado
na Fig. 3.19 é condizente com os microprogramas
apresentados na página 107 do livro-texto?
Solução do exercício 19 do Capítulo.
O que distingue um controlador hardwired de um
controlador microprogramado?
A principal função de um controlador num processador é decodificar
uma instrução e sequenciar as microoperações correspondentes. Quando os
sinais de controle são gerados por hardwire com o uso de
técnicas de circuitos lógicos convencionais,
conforme exemplifica a seção II.4 do livro-texto, dizemos que o controlador
é hardwired. Quando a unidade de controle é provida de uma memória
(conhecida como micromemória) e
os sinais de controle são gerados em função de
um conjunto de bits (conhecido também como palavra de controle)
armazenado nesta memória, dizemos que o controlador é microprogramado.
Note que na primeira organização alterações na arquitetura
implica em modificações em hardware; enquanto na
segunda organização, alterações na arquitetura podem significar
modificações somente no conteúdo da micromemória.
Qual é a relação entre a arquitetura de um computador e
a tecnologia do seu controlador?
A definição do repertório de instruções de um processador está
intimamente relacionada com a sua arquitetura.
À medida que cresce o repertório de instruções fica
economicamente mais difícil implementar um controlador
totalmente hardwired (no Capítulo II vimos que para
cada instrução foi necessário projetar um registrador de deslocamento
para sequenciar os sinais de controle correspondentes a uma
instrução!). A
microprogramação vem sendo uma solução para máquinas
que suportam uma grande variedade de instruções e modos
de endereçamento (a ser visto no Capítulo IV).
Basicamente distinguem-se duas arquiteturas de
computadores:
- RISC (Reduced Instruction Set
Computer), com um número reduzido de instruções e modos
de endereçamento - uma arquitetura apropriada para um controlador
totalmente hardwired; e
- CISC (Complex Instruction Set Computer), com
um número grande de instruções (tipicamente entre 100 a 250)
e um grande número de modos de endereçamento (tipicamente
entre 5 a 20 modos), cuja implementação é
economicamente viável somente através
da tecnologia de microprogramação.
Através do processador microprogramado especificado na
seção III.4 do livro-texto, exemplifique os formatos de instrução horizontal,
vertical e diagonal.
No formato horizontal um sinal de controle é representado por um bit
na palavra de controle. Como o processador especificado na seção III.4
tem 24 sinais de controle (observe que os sinais de controle dentro
do controlador são incluídos), teremos que reservar no mínimo 24 bits
para designar estes sinais de controle. Conforme observado na seção
III.3.1 do livro-texto, caso cada microinstrução for executada num
ciclo de relógio (monofásica), algumas combinações desses sinais
de controle são inválidas. Por exemplo, o sinal de controle SC1
(transferência do conteúdo do PC para o barramento 1) e SC2
(transferência do conteúdo do Acc para o barramento 1).
No formato vertical cada palavra representa um sinal de controle. Como
são 24 sinais de controle, 5 bits são suficientes para codificar cada
um destes sinais. Com um decodificador podemos sempre
obter a partir da palavra o sinal de controle correspondente. Apesar de
reduzirmos drasticamente o tamanho da
palavra de controle, com este formato não só perdemos a possibilidade de
paralelismo de sinais de controle como ganhamos o problema de especificar
conjuntos de sinais de controle que devem atuar simultaneamente sobre
as componentes, tais como os três sinais SC2, SC5 e SC8 para decrementar
o conteúdo de Acc. Para evitar este problema projeta-se o processador de tal
forma que cada sinal de controle corresponda a uma microoperação.
O formato diagonal é um compromisso dos dois formatos
acima. Ele consiste em dividir a palavra de controle em vários
campos, onde cada campo representa um conjunto de sinais de controle
funcionalmente exclusivos. Analisando o processador da seção III.4,
podemos identificar 7 conjuntos de sinais de controle funcionalmente
exclusivos:
- operações que envolvem o barramento
1 da UAL:
sinais de controle 1 e 2.
- operações que envolvem o barramento
2 da UAL:
sinais de controle de 3 a 7.
- operações que envolvem a UAL:
sinais de controle 8 e 9.
- operações que envolvem o barramento 3 (para o nosso exemplo,
vamos supor que não é permitida a escrita simultânea dos
registradores): sinais de controle de 10 a 15.
- operações que envolvem RDM:
sinais de controle de 16 a 18.
- operações que envolvem o barramento
BI1 do somador do controlador: sinais de controle de 19 a 22.
- operações que envolvem o barramento
BI2 do somador do controlador: sinais de controle 23 e 24.
Podemos, portanto, utilizar 1 bit para codificar os sinais de
controle 1 e 2; 3, para os sinais de 3 a 7;
3, para os sinais 10 a 15; 2, para os sinais de 16 a 18; e 2, para
os sinais de 19 a 22. Com isso, precisaremos no mínimo de 15 bits
na palavra de controle e 5 decodificadores para designar os sinais
de controle
necessários ao controle do computador especificado na seção III.4,
conforme mostra a seguinte figura.
Faz sentido classificar uma microinstrução diagonal em monofásica
e polifásica?
Sim. Uma microinstrução em formato diagonal pode conter
sinais de controle que devem ser executados em distintos ciclos (ou fases) de
relógio. Se for permitido combinar numa microinstrução sinais de controle
de distintos ciclos, dizemos que ela é polifásica. Caso contrário,
a microinstrução é denominada monofásica.
Como é possível transferir o conteúdo do registrador RDM
para o registrador Acc no processador microprogramado
especificado na seção III.4?
Diferentemente dos computadores hipotéticos que vimos no Capítulo II,
no processador em questão o registrador RDM é ligado ao registrador
Acc via barramento 2, UAL e barramento 3. Isso significa que precisamos aplicar uma
operação aritmética ou
lógica sobre o conteúdo do RDM e transferir este conteúdo para o registrador
Acc via barramento 3. Uma operação aritmética que não afetaria o conteúdo do RDM
seria por exemplo (RDM)+0 (sinal de controle SC7). Para transferir o resultado
ao registrador Acc precisaremos de mais um sinal de controle, SC11.
Como é possível incrementar o conteúdo do PC
no processador microprogramado especificado na seção III.4?
Diferentemente dos computadores que vimos no Capítulo II,
o processador em questão não tem o sinal de controle específico
para incrementar o conteúdo do PC. Porém, temos nesta
organização conexões do PC à UAL via barramento 1 (leitura)
e via barramento 3 (escrita). Portanto, podemos obter
o mesmo efeito do sinal de controle IPC do Capítulo II
através dos sinais de controle SC1, SC5 (colocar o conteúdo
do PC e o valor "1" nos dois barramentos de entrada da UAL
e somá-los) e SC10 (transferir o resultado da soma para
PC).
Quais bits de condição gerados pela UAL podem ser utilizados no controlador
do processador microprogramado da seção III.4 para implementar os desvios
condicionais (JUMPZERO e JUMPNEG)?
Os bits de condição negativo, N (na Fig. 3.16 corresponde a TESTNEG),
e zero, Z (na Fig. 3.16 corresponde a TESTZERO). Se N=0, então
atribui-se a TESTNEG o valor 2; senão o valor 1.
Analogamente, se Z=0, então atribui-se a TESTZERO o valor 2;
senão o valor 1.
Como se consegue determinar o endereço inicial de um
microprograma a partir do código de operação, C.O.?
Um procedimento mais simples consiste em conversão do código de operação
(sempre menor que a palavra que representa um endereço da micromemória)
no endereço da micromemória complementado os bits menos e mais significativos
com 0's. Consideremos um computador microprogramdo cujas instruções reservam 3 bits para
o código de operação e contém uma micromemória com 128 palavras de controle (7 bits
para endereçá-las). Um procedimento para determinar o endereço inicial do
microprograma correspondente a um dado código de operação é adicionar dois
zeros nos bitas menos significativos e 1 zero no bit mais significativo,
conforme ilustra a figura abaixo
Este procedimento de correspondência reserva para cada código um espaço de 4 palavras.
Caso o microprograma necessite de mais palavras pode-se introduzir um desvio às
palavras dos endereços 1000000 até 1111111 onde podem ser armazenadas as microinstruções
excedentes.
A seção III.4 do livro-texto apresenta um outro procedimento de correspondência.
Para obter o endereço inicial de cada microprograma, utilizou-se simplesmente
o código de operação acrescido de um deslocamento (no caso, 2,
que corresponde às duas primeiras
microinstruções do ciclo de busca, subtraído de 1, já que
C.O.= 0000 não foi utilizado):
Com isso é alocada a cada código de operação
uma palavra de controle. Nesta palavra está armazenado somente
o endereço efetivo da primeira microinstrução de um microprograma. A transferência deste
endereço efetivo ao contador de microprograma, MPC, permite iniciar a execução
deste microprograma.
O processador especificado na seção III.4
reserva 4 bits para o código de operação, ou seja, ele permite
representar 16 instruções de forma distinta. Mas, da forma como
os microprogramas foram organizados na micromemória, só poderemos
implementar no máximo 9 instruções. Justifique esta afirmação.
Como poderemos contornar esta limitação?
Observe que o procedimento de mapeamento
utilizado pelo processador em questão associa a cada código
de operação um endereço da micromemória que corresponde ao valor
(1+(C.O.)). Como são reservados 4 bits ao C.O. podemos teoricamente
projetar 16 instruções (de 0000 até 1111) cujos microprogramas
teriam seus endereços efetivos armazenados no espaço de micromemória de
(1+0000000000 até 1+0000001111). Entretanto, a forma como os endereços
da micromemória foram utilizados não podemos utilizar
C.O.=0000 (pois o endereço 0000000001 já é reservado para
uma microinstrução do ciclo de busca) nem C.O. > 1001
(pois a partir do endereço 0000001011 a micromemória foi utilizada
pelas microinstruçoes dos microprogramas).
A segunda limitação pode ser facilmente contornada se reorganizarmos
um pouco a ocupação da micromemória conforme o esquema seguinte
Função |
Endereço |
Microoperações |
Ciclo de Busca |
0 |
REM <- (PC) + 0 |
RDM <- ((REM)) |
MPC <- (MPC) + 1 |
1 |
PC <- (PC) + 1 |
RI <- (RDM) |
MPC <- (MPC) + (RI.CO) |
Mapeamento |
2 |
MPC <- 0 + 17 |
3 |
MPC <- 0 + 19 |
4 |
MPC <- 0 + 21 |
5 |
MPC <- 0 + 23 |
6 |
MPC <- 0 + 25 |
7 |
MPC <- 0 + 42 |
8 |
MPC <- 0 + 59 |
9 |
MPC <- 0 + 60 |
10 |
MPC <- 0 + 63 |
11 |
reservado |
12 |
reservado |
13 |
reservado |
14 |
reservado |
15 |
reservado |
16 |
reservado |
LOAD |
17 |
REM <- 0 + (RI) |
RDM <- ((REM)) |
MPC <- (MPC) + 1 |
18 |
Acc <- 0 + (RDM) |
MPC <- 0 + 0 |
: |
: |
: |
Quais inicializações são necessárias para executar corretamente
um programa no computador microprogramado da seção III.4?
Deve-se carregar no PC o endereço inicial do programa e assegurar que
o conteúdo do MPC seja nulo. Note-se que se (MPC) não for zero, podemos
interpretar incorretamente a primeira instrução do programa.
A ligação entre o registrador RI e o barramento 2 no processador
da seção III.4 consiste de 12 linhas, enquanto o barramento 2 é constituído de 16 linhas.
Os 4 bits mais significativos do barramento ficarão indefinidos?
Não. É possível implementar um circuito que coloque 0 nestas 4 linhas quando o sinal de controle SC6 for ativado.
Esta mesma observação vale para a conexão entre o barramento 3 e o
registrador REM. Neste caso, o conteúdo dos 4 bits mais significativos
do barramento 3 serão desprezados.
O microprograma que multiplica os conteúdos dos registradores
Acc e R1 apresentado na seção III.4.4 é executável para a organização
apresentada na Fig. 3.16 do livro-texto (versão do segundo semestre de
1997)? Caso negativo, propõe uma solução alternativa.
O microprograma apresentado na seção III.4.4 não será executado corretamete.
Observe que os registradores R1 e RDM são ligados ao mesmo barramento
(barramento 2) do processador o que invalida a execução da microoperação
utilizada pelo microprograma
RDM <- (RDM) + (R1)
Esta microoperação requer o acesso simultâneo do barramento 2 para transferir os operandos a
UAL e somá-los.
Uma solução alternativa correta será substituir o registrador R1 pelo registrador
PC, que está ligado no barramento 1, ou seja,
RDM <- (PC) + (RDM).
Para isso, precisamos salvar o conteúdo do PC no endereço 0 da memória
principal por exemplo (lembre que o PC mantém a sequência
de endereços das instruções de um programa em execução!) e utilizá-lo
temporariamente no microprograma. Antes do término da execução do microprograma devemos
restaurar o PC, conforme mostra o seguinte fluxogramo:
que pode ser traduzido em seguintes microinstruções:
Endereço |
Microoperações |
Sinais de Controle |
Comentários |
0 |
REM <- 0 + 0 |
14 |
o end. 0 da Memória é reservado para guardar temporariamente o conteúdo do PC |
MPC <- (MPC) + 1 |
19,23 |
1 |
RDM <- (PC) + 0 |
1, 14 |
(REM) <- (RDM) |
17 |
MPC <- (MPC) + 1 |
19, 23 |
2 |
RDM <- 0 + 0 |
14 |
inicializar o resultado |
MPC <- (MPC) + 1 |
19, 23 |
3 |
PC <- (R1) + 0 |
3, 10 |
carregar o multiplicando |
MPC <- (MPC) + 1 |
19, 23 |
4 |
Acc <- 0 + (Acc) |
2, 11 |
testar o conteúdo do Acc |
MPC <- (MPC) + TESTZERO |
20, 23 |
5 |
MPC <- 0 + 8 |
7, 24 |
desviar para end. 8 |
6 |
RDM <- (PC) + (RDM) |
1, 7, 14 |
adicionar o multiplicando ao resultado parcial |
MPC <- (MPC) + 1 |
19, 23 |
7 |
Acc <- (Acc) - 1 |
2, 5, 8, 11 |
decrementar o Acc |
MPC <- 0 + 4 |
8, 24 |
8 |
REM <- 0 + 1 |
5, 15 |
transferir o resultado para o end. 1 da memória |
(REM) <- (RDM) |
17 |
MPC <- (MPC) + 1 |
19, 23 |
9 |
REM <- 0 + 0 |
15 |
ler o conteúdo do end. 0 |
RDM <- ((REM)) |
16 |
MPC <- (MPC) + 1 |
19, 23 |
10 |
PC <- 0 + (RDM) |
7, 10 |
restaurar o conteúdo do PC |
MPC <- 0 + 0 |
- |
O conteúdo da micromemória ilustrado
na Fig. 3.19 é condizente com os microprogramas
apresentados na página 107 do livro-texto?
Não. Compare os sinais de controle na coluna SC
de cada microinstrução na página 107
com o conteúdo de cada palavra da micromemória
da Fig. 3.19 ...
Solução do exercício 19 do Capítulo.
Considerando
- a organização do item anterior e
- o código de operação da instrução
igual a 1010,
devemos utilizar o endereço 11 da micromemória para
fazer o mapeamento entre o C.O. e o
endereço 66 - o endereço a partir do qual a micromemória
está ainda disponível - ou seja, no endereço 11 deve conter
a microoperção MPC <- 0 + 66.
Consideramos ainda que o bit mais significativo do multiplicador
é o de sinal, sempre igual a 0, então, um
algoritmo para multiplicar dois números binários pode ser descrito
pelo seguinte fluxogramo:
Levando em conta as especificações do processador e o formato
das microinstruções, podemos utilizar os seguintes registradores
- R2 como contador;
- PC para manipular o multiplicador; e
- RDM para guardar o resultado (parcial),
para traduzir o fluxogramo acima no seguinte
microprograma:
Endereço |
Microoperações |
Sinais de Controle |
Comentários |
66 |
REM <- 0 + 0 |
15 |
o end. 0 da Memória é reservado para guardar temporariamente o conteúdo do PC |
MPC <- (MPC) + 1 |
19,23 |
67 |
RDM <- (PC) + 0 |
1, 14 |
(REM) <- (RDM) |
17 |
MPC <- (MPC) + 1 |
19, 23 |
68 |
R2 <- 0 + 1 |
5, 13 |
inicializar o contador |
MPC <- (MPC) + 1 |
19, 23 |
69 |
RDM <- 0 + 0 |
14 |
inicializar o resultado |
MPC <- (MPC) + 1 |
19, 23 |
70 |
PC <- (Acc) + 0 |
2, 10 |
carregar o multiplicador |
MPC <- (MPC) + 1 |
19, 23 |
71 |
R2 <- 0 + (R2) |
4, 13 |
testar o contador |
MPC <- (MPC) + TESTNEG |
21, 23 |
72 |
MPC <- 0 + 78 |
4, 7, 8, 9, 24 |
desviar para end. 78 |
73 |
RDM <- shift_left(0 + (RDM)) |
7, 9, 14 |
multiplicar o resultado parcial por 2 |
MPC <- (MPC) + 1 |
19, 23 |
74 |
Acc <- 0 + (R1) |
3, 10 |
transferir o conteúdo do R1 para Acc |
MPC <- (MPC) + 1 |
19, 23 |
75 |
PC <- shift_left((PC) + 0) |
1, 9, 11 |
testar o bit mais significativo do PC |
MPC <- (MPC) + TESTNEG |
21, 23 |
76 |
RDM <- (Acc) + (RDM) |
2, 7, 14 |
somar ao resultado parcial o multiplicando |
MPC <- (MPC) + 1 |
19, 23 |
77 |
MPC <- 0 + 71 |
4, 8, 9, 10, 24 |
continuar o laço |
78 |
Acc <- 0 + (RDM) |
7, 11 |
armazenar o resultado em Acc |
MPC <- (MPC) + 1 |
19, 23 |
79 |
REM <- 0 + 0 |
15 |
ler o conteúdo do end. 0 |
RDM <- ((REM)) |
16 |
MPC <- (MPC) + 1 |
19, 23 |
80 |
PC <- 0 + (RDM) |
7, 10 |
restaurar o conteúdo do PC |
MPC <- 0 + 0 |
- |
Observe que por falta de registradores, utilizamos o PC para
processar o microprograma. O seu conteúdo foi salvo antes do
uso e restaurado antes de terminar o microprograma. Com isso,
garante-se que o fluxo de execução do programa não seja alterado.
Observe ainda que, diferentemente das considerações feitas
no Capítulo III do livro-texto, consideramos aqui que os valores
TESTNEG e TESTZERO correspondem aos bits de condição gerados
pela UAL após cada operação aritmética e lógica.
Last modified: Sun Sep 21 10:54:28 BRA 1997
Sugestões para ting@dca.fee.unicamp.br
Voltar para a página do curso.
Ting