Você está na página 1de 25

C

Mapeando o Controle no Hardware


Um formato personalizado como este escravo da arquitetura do hardware e do conjunto de instrues a que ele serve. O formato precisa atingir uma conciliao apropriada entre tamanho da ROM, decodificao da sada da ROM, tamanho dos circuitos e tempo de execuo da mquina.
Jim McKevit et al. Relatrio de projeto do 8086, 1977

C.1 C.2 C.3 C.4 C.5 C.6 C.7

Introduo

C-2 C-3

Implementando unidades de controle combinacionais

Implementando controle com mquinas de estados finitos C-6 Implementando a funo de prximo estado com um seqenciador Traduzindo um microprograma para hardware Comentrios finais Exerccios C-24 C-24 C-20 C-16

C.1

Introduo

O controle normalmente possui duas partes: uma parte combinacional sem estados e uma unidade de controle seqencial que manipula seqenciao e o controle principal em um projeto multiciclo. As unidades de controle combinacionais normalmente so usadas para tratar parte do processo de decodificao e controle. O controle da ALU no Captulo 5 um bom exemplo. Uma implementao de ciclo nico como a do Captulo 5 tambm pode usar um controlador combinacional, j que ele no exige mltiplos estados. A Seo C.2 examina a implementao dessas duas unidades combinacionais por meio das tabelas verdade do Captulo 5. Como as unidades de controle seqencial so maiores e em geral mais complexas, h uma variedade maior de tcnicas para implementar uma unidade de controle seqencial. A utilidade dessas tcnicas depende da complexidade do controle, das caractersticas como o nmero mdio de prximos estados para um determinado estado e da tecnologia de implementao. A maneira mais simples de implementar uma funo de controle seqencial com um bloco de lgica que toma como entradas o estado atual e o campo opcode do registrador Instruction e produz como sada os sinais de controle do caminho de dados e o valor do prximo estado. A representao seqencial pode ser um diagrama de estados finitos ou um microprograma. No ltimo caso, cada microinstruo representa um estado. Em uma implementao usando um controle de estados finitos, a funo de prximo estado ser computada com lgica. A Seo C.3 constri essa implementao para uma ROM e uma PLA. Um mtodo alternativo de implementao calcula a funo de prximo estado usando um contador que incrementa o estado atual para determinar o prximo estado. Quando o prximo estado no segue seqencialmente, outra lgica usada para determinar o estado. A Seo C.4 explora esse tipo de implementao e mostra como ele pode ser usado para o controle de estados finitos criado no Captulo 5. Na Seo C.5, mostramos como uma representao de microprograma do controle seqencial traduzida para lgica de controle.

C-3

Apndice C

Mapeando o Controle no Hardware

ELSEVIER

C.2

Implementando unidades de controle combinacionais

Nesta seo, mostraremos como a unidade de controle da ALU e a unidade de controle principal para o projeto de clock nico so mapeadas para o nvel de portas lgicas. Com sistemas de CAD modernos, esse processo completamente mecnico. Os exemplos incluem como um sistema de CAD tira vantagem da estrutura da funo de controle, incluindo a presena de dont cares.

Mapeando a funo de controle da ALU para portas lgicas


A Figura C.2.1 mostra a tabela verdade para a funo de controle da ALU desenvolvida na Seo 5.3. Um bloco lgico que implementa essa funo de controle da ALU ter trs sadas distintas (chamadas Operation2, Operation1 e Operation0), cada uma correspondendo a um dos trs bits do controle da ALU na ltima coluna da Figura C.2.1. A funo de lgica para cada sada construda combinando todas as entradas da tabela verdade que definem essa sada em especial. Por exemplo, o bit menos significativo do controle da ALU (Operation0) definido pelas duas ltimas entradas da tabela verdade na Figura C.2.1. Portanto, a tabela verdade para Operation0 ter essas duas entradas. A Figura C.2.2 mostra a tabela verdade para cada um dos trs bits de controle da ALU. Tiramos proveito da estrutura comum em cada tabela verdade para incorporar dont cares adicionais. Por exemplo, as cinco linhas na tabela verdade da Figura C.2.1 que definem Operation1 so reduzidas a apenas duas entradas na Figura C.2.2. Um programa de minimizao lgica usar dont cares para reduzir o nmero de portas lgicas e o nmero de entradas para cada porta lgica em uma concepo em portas lgicas dessas tabelas verdade. Da tabela verdade simplificada na Figura C.2.2, podemos gerar a lgica mostrada na Figura C.2.3, que chamamos o bloco de controle da ALU. Esse processo simples e pode ser feito com um programa de CAD (Computer-Aided Design projeto auxiliado por computador). Um exemplo de como as portas lgicas podem ser derivadas das tabelas verdade apresentado na legenda da Figura C.2.3. Essa lgica de controle da ALU simples porque h somente trs entradas e apenas algumas combinaes de entrada possveis precisam ser reconhecidas. Se um grande nmero de cdigos de funo da ALU possveis precisasse ser transformado em sinais de controle da ALU, esse mtodo simples no seria eficiente. Em vez disso, voc poderia usar um decodificador, uma memria ou um array estruturado de portas lgicas. Essas tcnicas so descritas no Apndice B e veremos exemplos quando examinarmos a implementao do controlador multiciclo na Seo C.3.

OpALU OpALU1 0 X 1 1 1 1 1 OpALU2 0 1 X X X X X F5 X X X X X X X F4 X X X X X X X

Campo Funct F3 X X 0 0 0 0 1 F2 X X 0 0 1 1 0 F1 X X 0 1 0 0 1 F0 X X 0 0 0 1 0

Operation

010 110 010 110 000 001 111

FIGURA C. 2.1 A tabela verdade para os bits de controle da ALU (chamados Operation) como uma funo de OpALU e do campo de cdigo Function. Essa tabela igual mostrada na Figura 5.13.

C.2

Implementando unidades de controle combinacionais

C-4

OpALU OpALU1 X 1 OpALU0 1 X F5 X X F4 X X

Campos de cdigo Function F3 X X F2 X X F1 X 1 F0 X X

a. A tabela verdade para Operation2 = 1 (essa tabela corresponde ao bit mais esquerda do campo Operation na Figura C.2.1) OpALU OpALU1 0 X OpALU0 X X F5 X X F4 X X Campos de cdigo Function F3 X X F2 X 0 F1 X X F0 X X

b. A tabela verdade para Operation1 = 1 OpALU OpALU1 1 1 OpALU0 X X F5 X X F4 X X Campos de cdigo Function F3 X 1 F2 X X F1 X X F0 1 X

c. A tabela verdade para Operation0 = 1 FIGURA C. 2.2 As tabelas verdade para as trs linhas de controle da ALU. Apenas as entradas para as quais a sada 1 so mostradas. Os bits em cada campo so numerados da direita para a esquerda comeando com 0; assim, F5 o bit mais significativo do campo Function, e F0 o bit menos significativo. Da mesma forma, os nomes dos sinais correspondentes ao cdigo de operao de 3 bits fornecidos para a ALU so Operation2, Operation1 e Operation0 (com o ltimo sendo o bit menos significativo). Portanto, a tabela verdade anterior mostra as combinaes de entrada para as quais o controle da ALU deve ser 010, 001, 110 ou 111 (as combinaes 011, 100 e 101 no so usadas). Os bits de OpALU so denominados OpALU1 e OpALU0. Os trs valores de sada dependem do campo OpALU de 2 bits e, quando esse campo igual a 10, do cdigo de funo de 6 bits na instruo. De igual modo, quando o campo OpALU no igual a 10, no nos importamos com o valor do cdigo de funo (ele representado por um X). Veja o Apndice B para saber mais sobre dont cares.

Detalhamento: em geral, uma equao lgica e uma representao de tabela verdade de uma funo lgica so equivalentes. (Discutimos isso em mais detalhes no Apndice B.) Entretanto, quando uma tabela verdade apenas especifica as entradas que resultam em sadas no zero, ela pode no descrever completamente a funo lgica. Uma tabela verdade completa indica todas as entradas dont care. Por exemplo, a codificao 11 para OpALU sempre gera um dont care na sada. Portanto, uma tabela verdade completa teria XXX na parte da sada para todas as entradas com 11 no campo OpALU. Esses dont cares nos permitem substituir o campo OpALU 10 e 01 por 1X e X1, respectivamente. Incorporar os dont cares e minimizar a lgica algo complexo e propenso ao erro, e, portanto, mais apropriado para um programa.
OpALU Bloco de controle da ALU OpALU0 OpALU1

F3 F2 F (50) F1

Operation2 Operation1 Operation0 Operation

F0

FIGURA C. 2.3 O bloco de controle da ALU gera os trs bits de controle da ALU, com base nos bits do cdigo Function e de OpALU. Essa lgica gerada diretamente da tabela verdade da Figura C.2.2. Considere a sada Operation2, gerada por duas linhas na tabela verdade para Operation2. A segunda linha o AND dos dois termos (F1 = 1 e OpALU1 = 1); a porta AND superior de duas entradas corresponde a esse termo. O outro termo que faz com que Operation2 seja ativado OpALU0. Esses dois termos so combinados com uma porta OR cuja sada Operation2. As sadas Operation0 e Operation1, do mesmo modo, so derivadas da tabela verdade.

C-5

Apndice C

Mapeando o Controle no Hardware

ELSEVIER

Controle

Nome do sinal

formato R

lw

sw

beq

0p5 0p4 Entradas Op3 Op2 Op1 Op0 RegDst ALUSrc MemparaReg EscreveReg Sadas LeMem EscreveMem Branch OpALU1 OpALU0 FIGURA C. 2.4

0 0 0 0 0 0 1 0 0 1 0 0 0 1 0

1 0 0 0 1 1 0 1 1 1 1 0 0 0 0

1 0 1 0 1 1 X 1 X 0 0 1 0 0 0

0 0 0 1 0 0 X 0 X 0 0 0 1 0 1

A funo de controle para a implementao simples de clock nico completamente satisfeita por essa tabela verdade. Essa tabela igual mostrada na Figura 5.22.

Mapeando a funo de controle principal em portas lgicas


Implementar a funo de controle principal com uma coleo desestruturada de portas lgicas, como fizemos para o controle da ALU, uma soluo razovel porque a funo de controle nem complexa nem grande, como podemos ver na tabela verdade mostrada na Figura C.2.4. Entretanto, se a maioria dos 64 opcodes possveis fosse usada e houvesse muitas outras linhas de controle, o nmero de portas lgicas seria muito maior e cada porta lgica teria muito mais entradas. Como qualquer funo pode ser calculada em dois nveis de lgica, outra maneira de implementar uma funo lgica com um array lgico estruturado de dois nveis. A Figura C.2.5 mostra essa implementao. Ela usa um array de portas AND seguido de um array de portas OR. Essa estrutura chamada de array lgico programvel (PLA). Uma PLA um dos meios mais comuns de implementar uma funo de controle. Retornaremos ao tema de usar elementos lgicos estruturados para implementar controle quando implementarmos um controlador de estados finitos na prxima seo.

C.3

Implementando controle com mquinas de estados finitos

C-6

Entradas Op5 Op4 Op3 Op2 Op1 Op0

Sadas formato R Iw sw beq RegDst ALUSrc MemparaReg EscreveReg LeMem EscreveMem Branch OpALU1 OpALU0 FIGURA C. 2.5 A implementao estruturada da funo de controle como descrita pela tabela verdade

na Figura C.2.4. A estrutura, chamada de array lgico programvel (PLA), usa um array de portas AND seguido de um array de portas OR. As entradas para as portas AND so as entradas de funo e seus inversos (as bolhas indicam a inverso de um sinal). As entradas para as portas OR so as sadas das portas AND (ou, como um caso degenerado, as entradas da funo e seus inversos). As sadas das portas OR so as sadas da funo.

C.3

Implementando controle com mquinas de estados finitos

Para implementar o controle como uma mquina de estados finitos, precisamos primeiro atribuir um nmero a cada um dos 10 estados; qualquer estado poderia usar qualquer nmero, mas, para simplificar, usaremos a numerao seqencial, como no Captulo 5. (A Figura C.3.1 uma cpia do diagrama de estados finitos da Figura 5.38, reproduzida para facilidade de acesso.) Com 10 estados, precisaremos de 4 bits para codificar o nmero do estado e chamamos esses bits de estado de S3, S2, S1 e S0. O nmero do estado atual ser armazenado em um registrador de estado, como mostra a Figura C.3.2. Se os estados foram atribudos seqencialmente, o estado i ser codificado usando os bits de estado como o nmero binrio i. Por exemplo, o estado 6 codificado como 0110bin ou S3 = 0, S2 = 1, S1 = 1, S0 = 0, que tambm pode ser escrito como S3 S2 S1 S0 A unidade de controle possui sadas que especificam o prximo estado. Essas so escritas no registrador de estado na transio do clock e se tornam o novo estado no incio do prximo ciclo de clock seguinte transio ativa do clock. Essas sadas so denominadas NS3, NS2, NS1, NS0. Uma vez determinados os nmeros das entradas, os estados e as sadas, sabemos como se parecer a estrutura bsica da unidade de controle, como vemos na Figura C.3.2. O bloco rotulado como lgica de controle na Figura C.3.2 lgica combinacional. Podemos pensar nele como uma grande tabela dando o valor das sadas em funo das entradas. A lgica nesse bloco implementa as duas partes diferentes da mquina de estados finitos. Uma parte a lgica que

C-7

Apndice C

Mapeando o Controle no Hardware

ELSEVIER

Busca de instrues 0 LeMem OrigAALU = 0 IouD = 0 EscreveIR OrigBALU = 01 OpALU = 00 EscrevePC OrigPC = 00

Busca de registradores/ decodificao de instrues 1 OrigAALU = 0 OrigBALU = 11 OpALU = 00

Incio

Clculo do endereo de memria 2 OrigAALU = 1 OrigBALU = 10 OpALU = 00

(Op

W = 'L

') ou

(O

'S p=
6

Execuo 8

(O

W')

(O Concluso do branch

ti p=

(Op = 'J')

'B EQ

po

R)

')

Concluso do jump

9 OrigAALU = 1 OrigBALU = 00 OpALU = 01 EscrevePCCond OrigPC = 01 EscrevePC OrigPC = 10

OrigAALU = 1 OrigBALU = 00 OpALU = 10

(O

(Op = 'LW')

Acesso memria 5

p = 'S W ')
Acesso memria 7 EscreveMem IouD = 1 Concluso do tipo R

3 LeMem IouD = 1

RegDst = 1 EscreveReg MemparaReg = 0

Etapa de concluso da leitura de memria 4 RegDst = 1 EscreveReg MemparaReg = 0

FIGURA C. 3.1

O diagrama de estados finitos desenvolvido no Captulo 5; ele idntico Figura 5.38.

determina a definio das sadas de controle do caminho de dados, que dependem apenas dos bits de estado. A outra parte da lgica de controle implementa a funo de prximo estado; essas equaes determinam os valores dos bits de prximo estado e as outras entradas (o opcode de 6 bits). A Figura C.3.3 mostra as equaes lgicas: a parte superior mostrando as sadas e a parte inferior mostrando a funo de prximo estado. Os valores nessa tabela foram determinados a partir do diagrama de estados na Figura C.3.1. Sempre que uma linha de controle est ativa em um estado, esse estado inserido na segunda coluna da tabela. Da mesma forma, as entradas de prximo estado so feitas sempre que um estado um sucessor para outro. Na Figura C.3.3, usamos a abreviatura stateN para indicar o estado atual N. Portanto, stateN substitudo pelo termo que codifica o nmero de estado N. Usamos NextStateN para representar a definio das sadas de prximo estado para N. Essa sada implementada usando as sadas de prximo estado (NS). Quando NextStateN est ativo, os bits NS[3-0] so definidos de acordo com a verso binria do valor N. claro que, como um determinado bit de prximo estado ativado em mltiplos

C.3

Implementando controle com mquinas de estados finitos

C-8

PCWrite PCWriteCond IorD MemRead MemWrite IRWrite Lgica de controle Sadas MemtoReg PCSource ALUOp ALUSrcB ALUSrcA RegWrite RegDst NS3 NS2 NS1 NS0

Entradas

Op5

Op4

Op3

Op2

Op1

Op0

S3

S2

S1

Campo opcode do registrador de instruo

Registrador de estado

FIGURA C. 3.2 A unidade de controle para MIPS consistir em alguma lgica de controle e em um registrador para conter o estado. O registrador de estado escrito na transio ativa do clock e estvel durante o ciclo de clock.

prximos estados, a equao para cada estado ser o OR dos termos que ativam esse sinal. Da mesma forma, quando usamos um termo como (Op = lw), isso corresponde a um AND das entradas de opcode que especifica a codificao do opcode lw em 6 bits, exatamente como fizemos para a unidade de controle simples na seo anterior deste captulo. simples traduzir as entradas na Figura C.3.3 em equaes lgicas para as sadas.

EQUAES LGICAS PARA AS SADAS DE PRXIMO ESTADO Fornea a equao lgica para o bit de prximo estado menos significativo, NS0. O bit de prximo estado NS0 deve estar ativo sempre que o prximo estado tiver NS0 = 1 na codificao de estado. Isso verdadeiro para NextState1, NextState3, NextState5, NextState7 e NextState9. As entradas para esses estados na Figura C.3.3 fornecem as condies quando esses valores de prximo estado devem estar ativos. A equao para cada um desses prximos estados fornecida a seguir. A primeira equao diz que o prximo estado 1 se o estado atual 0; o estado atual 0 se cada um dos bits de entrada de estado for 0, que o que indica o termo de produto mais direita. NextState1 = State0 = S3 S2 S1 S0 NextState3 = State2 (Op[5-0] = lw) = S3 S2 S1 S0 Op5 Op4 Op3 Op2 Op1 Op0 EXEMPLO RESPOSTA

S0

C-9

Apndice C

Mapeando o Controle no Hardware

ELSEVIER

Sada EscrevePC EscrevePCCond IouD LeMem EscreveMem EscreveIR MemparaReg OrigPC1 OrigPC0 OpALU1 OpALU0 OrigBALU1 OrigBALU0 OrigAALU EscreveReg RegDst NextState0 NextState1 NextState2 NextState3 NextState4 NextState5 NextState6 NextState7 NextState8 NextState9

Estados atuais state0 + state9 state8 state3 + state5 state0 + state3 state5 state0 state4 state9 state8 state6 state8 state1 + state2 state0 + state1 state2 + state6 + state8 state4 + state7 state7 state4 + state5 + state7 + state8 + state9 state0 state1 state2 state3 state2 state1 state6 state1 state1

Op

(Op = lw) + (Op = sw) (Op = lw) (Op = sw) (Op = R-type)

(Op = beq) (Op = jmp)

FIGURA C. 3.3 As equaes lgicas para a unidade de controle mostradas de uma forma resumida. Lembre-se de que + significa OR em equaes lgicas. As entradas de estado e as sadas das entradas NextState precisam ser expandidas usando a codificao de estado. Qualquer entrada em branco um dont care.

NextState5 = State 2 (Op[5-0] = sw ) = S3 S2 S1 S0 Op5 Op4 Op3 Op2 Op1 Op0 NextState7 = State6 = S3 S2 S1 S0 NextState9 = State1 (Op[5-0] = jmp) = S3 S2 S1 S0 Op5 Op4 Op3 Op2 Op1 Op0 NS0 a soma lgica de todos esses termos.

Como j vimos, a funo de controle pode ser expressa como uma equao lgica para cada sada. Esse conjunto de equaes lgicas pode ser implementado de duas maneiras: correspondente a uma tabela verdade completa ou correspondente a uma estrutura lgica de dois nveis que permite uma codificao esparsa da tabela verdade. Antes de olharmos essas implementaes, vejamos a tabela verdade para a funo de controle completa. mais simples se dividirmos a funo de controle definida na Figura C.3.3 em duas partes: as sadas de prximo estado, que podem depender de todas as entradas, e as sadas de sinal de controle, que

C.3

Implementando controle com mquinas de estados finitos

C-10

dependem apenas dos bits do estado atual. A Figura C.3.4 mostra as tabelas verdade para todos os sinais de controle do caminho de dados. Como esses sinais realmente dependem apenas dos bits de estado (e no do opcode), cada uma das entradas em uma tabela na Figura C.3.4, na verdade, representa 64 (= 26) entradas, com os 6 bits denominados Op tendo todos os valores possveis; isto , os bits Op so bits dont care para determinar as sadas de controle do caminho de dados. A Figura C.3.5 mostra a tabela verdade para os bits de prximo estado NS[3-0], que dependem dos bits de entrada de estado e dos bits de instruo, que formam o opcode. Detalhamento: existem muitas oportunidades de simplificar a funo de controle observando semelhanas entre dois ou mais sinais e usando a semntica da implementao. Por exemplo, os sinais EscrevePCCond, OrigPC0 e OpALU0 so todos ativados exatamente em um estado, o estado 8. Esses trs sinais de controle podem ser substitudos por um nico sinal.

s3

s2

s1

s0

s3

s2

s1

s0

s3

s2

s1

s0

0 1

0 0

0 0

0 1

0 0

0 1

1 0

1 1

a. Tabela verdade para EscrevePC


s3 s2 s1 s0

b. Tabela verdade para EscrevePCCond


s3 s2 s1 s0

c. Tabela verdade para IouD


s3 s2 s1 s0

0 0

0 0

0 1

0 1

d. Tabela verdade para LeMem


s3 s2 s1 s0

e. Tabela verdade para EscreveMem


s3 s2 s1 s0

f. Tabela verdade para EscreveIR


s3 s2 s1 s0

g. Tabela verdade para MemparaReg

h. Tabela verdade para OrigPC1

i. Tabela verdade para OrigPC0

s3

s2

s1

s0

s3

s2

s1

s0

s3

s2

s1

s0

0 0

0 0

0 1

1 0

j. Tabela verdade para OpALU1


s3 s2 s1 s0

k. Tabela verdade para OpALU0


s3 s2 s1 s0

l. Tabela verdade para OrigBALU1


s3 s2 s1 s0

0 0

0 0

0 0

0 1

0 0 1

0 1 0

1 1 0

0 0 0

0 0

1 1

0 1

0 1

m. Tabela verdade para OrigBALU0


s3 s2 s1 s0

n. Tabela verdade para OrigAALU

o. Tabela verdade para EscreveReg

p. Tabela verdade para RegDst

FIGURA C. 3.4

As tabelas verdade so mostradas para os 16 sinais de controle do caminho de dados que dependem apenas dos bits da entrada de estado atual, que so mostrados para cada tabela. Cada tabela verdade corresponde a 64 entradas: uma para cada valor possvel dos 6 bits Op. Observe que algumas das sadas esto ativas sob quase as mesmas circunstncias. Por exemplo, no caso de EscrevePCCond, OrigPC0 e OpALU0, esses sinais esto ativos apenas no estado 8 (veja b, i e k). Esses trs sinais poderiam ser substitudos por um sinal. H outras oportunidades de reduzir a lgica necessria para implementar a funo de controle tirando proveito de outras semelhanas nas tabelas verdade.

C-11

Apndice C

Mapeando o Controle no Hardware

ELSEVIER

Op5 0 0

Op4 0 0

Op3 0 0

Op2 0 1

Op1 1 0

Op0 0 0

S3 0 0

S2 0 0

S1 0 0

S0 1 1

a. A tabela verdade para a sada NS3, que est ativa quando o prximo estado 8 ou 9. Esse sinal ativado quando o estado atual 1. Op5 0 1 X X Op4 0 0 X X Op3 0 1 X X Op2 0 0 X X Op1 0 1 X X Op0 0 1 X X S3 0 0 0 0 S2 0 0 0 1 S1 0 1 1 1 S0 1 0 1 0

b. A tabela verdade para a sada NS2, que est ativa quando o prximo estado 4, 5, 6 ou 7. Essa situao ocorre quando o estado atual 1, 2, 3 ou 6. Op5 0 1 1 1 X Op4 0 0 0 0 X Op3 0 0 1 0 X Op2 0 0 0 0 X Op1 0 1 1 1 X Op0 0 1 1 1 X S3 0 0 0 0 0 S2 0 0 0 0 1 S1 0 0 0 1 1 S0 1 1 1 0 0

c. A tabela verdade para a sada NS1, que est ativa quando o prximo estado 2, 3, 6 ou 7. O prximo estado 2, 3, 6 ou 7 apenas se o estado atual 1, 2 ou 6. Op5 X 1 1 X 0 Op4 X 0 0 X 0 Op3 X 0 1 X 0 Op2 X 0 0 X 0 Op1 X 1 1 X 1 Op0 X 1 1 X 0 S3 0 0 0 0 0 S2 0 0 0 1 0 S1 0 1 1 1 0 S0 0 0 0 0 1

d. A tabela verdade para a sada NS0, que est ativa quando o prximo estado 1, 3, 5, 7 ou 9. Isso ocorre apenas se o estado atual 0, 1, 2 ou 6. FIGURA C. 3.5 As quatro tabelas verdade para os quatro bits de sada de prximo estado (NS[3-0]). As sadas de prximo estado dependem do valor de Op[5-0], que o campo opcode, e do estado atual, fornecido por S[3-0]. As entradas com X so dont cares. Cada entrada com um dont care corresponde a duas entradas, uma com essa entrada em 0 e uma com essa entrada em 1. Portanto, uma entrada com n dont cares, na verdade, corresponde a 2n entradas da tabela verdade.

Uma implementao usando ROM


Provavelmente, a maneira mais simples de implementar a funo de controle codificar as tabelas verdade em uma ROM. O nmero de entradas na memria para as tabelas verdade das Figuras C.3.4 e C.3.5 igual a todos os valores possveis das entradas (os 6 bits de opcode mais os 4 bits de estado), que 2entradas = 210 = 1024. As entradas para a unidade de controle se tornam as linhas de endereo para a ROM, que implementa o bloco de lgica de controle mostrado na Figura C.3.2. A largura de cada entrada (ou word na memria) de 20 bits, j que h 16 sadas de controle do caminho de dados e 4 bits de prximo estado. Isso significa que o tamanho total da ROM 210 20 = 20 Kbits. A definio dos bits em uma word na ROM depende de quais sadas esto ativas nessa word. Antes de vermos as words de controle, precisamos ordenar os bits dentro das words de entrada (o endereo) e de sada (o contedo) do controle, respectivamente. Iremos numerar os bits usando a ordem da Figura C.3.2, com os bits de prximo estado sendo os bits menos significativos da word de controle e os bits de entrada de estado atual sendo os bits menos significativos do endereo. Isso significa que a sada de EscrevePC ser o bit mais significativo (o bit 19) de cada word

C.3

Implementando controle com mquinas de estados finitos

C-12

de memria e o NS0 ser o bit menos significativo. O bit de endereo mais significativo ser fornecido por Op5, que o bit mais significativos da instruo, e o bit de endereo menos significativo ser fornecido por S0. Podemos construir o controle da ROM montando a tabela verdade inteira de uma forma em que cada linha corresponda a uma das 2n combinaes de entrada nicas, e um conjunto de colunas indique que sadas esto ativas para essa combinao de entrada. No temos espao aqui para mostrar todas as 1.024 entradas na tabela verdade. Entretanto, podemos faz-lo separando o controle do caminho de dados e as sadas de prximo estado, j que as sadas de controle do caminho de dados dependem apenas do estado atual. A tabela verdade para as sadas de controle do caminho de dados mostrada na Figura C.3.6. Inclumos somente as codificaes das entradas de estado que esto em uso (ou seja, os valores de 0 a 9 correspondentes aos 10 estados da mquina de estados).

Sadas 0000 EscrevePC EscrevePCCond IouD LeMem EscreveMem EscreveIR MemparaReg OrigPC1 OrigPC0 OpALU1 OpALU0 OrigBALU1 OrigBALU0 OrigAALU EscreveReg RegDst 1 0 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0001 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0010 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0011 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0

Valores de entrada (S[3-0]) 0100 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0101 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0110 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0111 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1000 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0 0 1001 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0

FIGURA C. 3.6 A tabela verdade para as 16 sadas de controle do caminho de dados, que dependem apenas das entradas de estado. Os valores so determinados pela Figura C.3.4. Embora haja 16 valores possveis para o campo de estado de 4 bits, apenas 10 so usados e mostrados aqui. Os 10 valores possveis so mostrados no alto; cada coluna mostra o valor das sadas de controle do caminho de dados para o valor de entrada de estado que aparece no alto da coluna. Por exemplo, quando as entradas de estado so 0011 (estado 3), as sadas de controle do caminho de dados so IouD e LeMem.

A tabela verdade na Figura C.3.6 fornece diretamente o contedo dos 16 bits mais significativos de cada word na ROM. O campo de entrada de 4 bits fornece os quatro bits menos significativos do endereo de cada word, e a coluna fornece o contedo da word nesse endereo. Se mostrssemos uma tabela verdade inteira para os bits de controle do caminho de dados com o nmero de estado e os bits de opcode como entradas, as entradas de opcode seriam todas indiferentes. Quando construmos a ROM, no podemos ter quaisquer dont cares, pois os endereos na ROM precisam estar completos. Assim, as mesmas sadas de controle do caminho de dados ocorrero muitas vezes na ROM, j que essa parte da ROM a mesma sempre que os bits de estado so idnticos, independente do valor das entradas de opcode.

C-13

Apndice C

Mapeando o Controle no Hardware

ELSEVIER

ENTRADAS DO CONTROLE NA ROM EXEMPLO Para quais endereos de ROM o bit correspondente a EscrevePC, o bit mais significativo da word de controle, ser 1? EscrevePC est ativo nos estados 0 e 9; isso corresponde aos endereos com os 4 bits menos significativos sendo 0000 ou 1001. O bit estar ativo na word de memria independente das entradas Op[5-0], de modo que os endereos com o bit ativo so 000000000, 0000001001, 0000010000, 0000011001, ..., 1111110000, 1111111001. A forma geral disso XXXXXX0000 ou XXXXXX1001, onde XXXXXX qualquer combinao de bits e corresponde ao opcode de 6 bits do qual essa sada no depende.

RESPOSTA

Mostraremos o contedo inteiro da ROM em duas partes para facilitar a compreenso. A Figura C.3.7 mostra os 16 bits mais significativos da word de controle; isso vem diretamente da Figura C.3.6. Essas sadas de controle do caminho de dados dependem apenas das entradas de estado, e esse conjunto de words seria duplicado 64 vezes na ROM inteira, como discutimos anteriormente. Como as entradas correspondentes aos valores de entrada 1010 a 1111 no so usadas, no nos importamos com o que elas contm. A Figura C.3.8 mostra os 4 bits menos significativos da word de controle correspondentes s sadas de prximo estado. A ltima coluna da tabela na Figura C.3.8 corresponde a todos os valores possveis do opcode que no coincidem com os opcodes especificados. No estado 0, o prximo estado sempre o estado 1, j que a instruo ainda est sendo buscada. Aps o estado 1, o campo opcode precisa ser vlido. As tabelas indicam isso pelas entradas marcadas como ilegais; veremos como lidar com esses opcodes ilegais na Seo 5.6. Essa representao como duas tabelas separadas no s uma maneira mais compacta de mostrar o contedo da ROM, mas tambm um meio mais eficiente de implementar a ROM. A maioria das sadas (16 de 20 bits) depende apenas de 4 das 10 entradas. O nmero de bits no total quando o controle implementado como duas ROMs separadas 24 16 + 210 4 = 256 + 4096 = 4,3Kbits, que aproximadamente um quinto do tamanho de uma nica ROM, que requer 210 20 = 20 Kbits. H algum overhead associado com qualquer bloco de lgica estruturada, mas, nesse caso, o overhead adicional de uma ROM extra seria muito menor do que as economias advindas da diviso da ROM nica.

4 bits menos significativos do endereo

Bits 19-4 da word 1001010000001000 0000000000011000 0000000000010100 0011000000000000 0000001000000010 0010100000000000 0000000001000100 0000000000000011 0100000010100100 1000000100000000

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001

FIGURA C. 3.7 O contedo dos 16 bits mais significativos da ROM dependem apenas das entradas de estado. Esses valores so iguais aos da Figura C.3.6, simplesmente girados em 90o. Esse conjunto de words de controle seria duplicado 64 vezes para todo valor possvel dos 6 bits mais significativos do endereo.

C.3

Implementando controle com mquinas de estados finitos

C-14

Op[5-0] Estado atual S[30] 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 FIGURA C. 3.8 000000 (formato R) 0001 0110 XXXX 0100 0000 0000 0111 0000 0000 0000 000010 (jmp) 0001 1001 XXXX 0100 0000 0000 0111 0000 0000 0000 000100 (beq) 0001 1000 XXXX 0100 0000 0000 0111 0000 0000 0000 100011 (lw) 0001 0010 0011 0100 0000 0000 0111 0000 0000 0000 101011 (sw) 0001 0010 0101 0100 0000 0000 0111 0000 0000 0000 Qualquer outro valor 0001 ilegal ilegal ilegal ilegal ilegal ilegal ilegal ilegal ilegal

Esta tabela contm os 4 bits menos significativos da word de controle (as sadas de NS), que dependem das entradas de estado, S[3-0], e do opcode, Op[5-0], que correspondem ao opcode da instruo. Esses valores podem ser determinados a partir da Figura C.3.5. O nome de opcode mostrado sob a codificao no cabealho. Os 4 bits da word de controle cujo endereo dado pelos bits de estado atual e os bits Op so mostrados em cada entrada. Por exemplo, quando os bits de entrada de estado so 0000, a sada sempre 0001, independente das outras entradas; quando o estado 2, o prximo estado dont care para trs das entradas, 3 para lw e 5 para sw. Juntamente com as entradas na Figura C.3.7, essa tabela especifica o contedo da ROM da unidade de controle. Por exemplo, a word no endereo 1000110001 obtida encontrando-se os 16 bits mais significativos na tabela da Figura C.3.7 usando apenas os bits de entrada de estado (0001) e concatenando os 4 bits menos significativos encontrados usando o endereo inteiro (0001 para localizar a linha e 100011 para localizar a coluna). A entrada da Figura C.3.7 produz 0000000000011000, enquanto a entrada apropriada na tabela imediatamente acima 0010. Portanto, a word de controle no endereo 1000110001 00000000000110000010. A coluna Qualquer outro valor se aplica apenas quando os bits de Op no correspondem a um dos opcodes especificados.

Embora essa codificao de ROM da funo de controle seja simples, ela extravagante, mesmo quando dividida em duas partes. Por exemplo, os valores das entradas do registrador Instruction normalmente no so necessrios para determinar o prximo estado. Portanto, a ROM de prximo estado possui muitas entradas duplicadas ou dont cares. Considere o caso quando a mquina est no estado 0: existem 26 entradas na ROM (j que o campo opcode pode ter qualquer valor), e essas entradas tero todas o mesmo contedo (a saber, a word de controle 0001). A razo por que tanta ROM desperdiada que a ROM implementa a tabela verdade completa, fornecendo a oportunidade de ter uma sada diferente para cada combinao de entradas. Entretanto, a maioria das combinaes das entradas nunca ocorre ou redundante!

Uma implementao usando PLA


Podemos reduzir a quantidade de armazenamento de controle necessria com o custo de usar decodificao de endereo mais complexa para as entradas de controle, o que codificar apenas as combinaes de entrada necessrias. A estrutura lgica mais usada para isso um array lgico programvel (PLA), j mencionado e ilustrado na Figura C.2.5. Em uma PLA, cada sada o OR lgico de um ou mais mintermos. Um mintermo, tambm chamado de termo de produto, simplesmente um AND lgico de uma ou mais entradas. As entradas podem ser imaginadas como o endereo para a indexao da PLA, enquanto os mintermos selecionam quais de todas as combinaes de endereo possveis so interessantes. Um mintermo corresponde a uma nica entrada em uma tabela verdade, como aquelas na Figura C.3.4, incluindo possveis dont cares. Cada sada consiste em um OR desses mintermos, que corresponde exatamente a uma tabela verdade completa. Contudo, diferente de uma ROM, apenas as entradas da tabela verdade que produzem uma sada ativa so necessrias, e apenas uma cpia de cada mintermo necessria, mesmo se o mintermo contiver dont cares. A Figura C.3.9 mostra a PLA que implementa essa funo de controle.

C-15

Apndice C

Mapeando o Controle no Hardware

ELSEVIER

Figura C. 3.9 Essa PLA implementa a lgica da funo de controle para a implementao multiciclo. As entradas para o controle aparecem esquerda e as sadas, direita. A metade superior da figura o plano AND que calcula todos os mintermos. Os mintermos so transportados para o plano OR nas linhas verticais. Cada ponto em cinza corresponde a um sinal que compe o mintermo transportado nessa linha. Os termos de soma so calculados desses mintermos, com cada ponto cinza representando a presena do mintermo que intercepta esse termo de soma. Cada sada consiste em um nico termo de soma.

Como podemos ver pela PLA na Figura C.3.9, existem 17 mintermos nicos 10 que dependem apenas do estado atual e 7 outros que dependem de uma combinao do campo Op e os bits de estado atual. O tamanho total da PLA proporcional a (#entradas #termos de produto) + (#sadas #termos de produto), como podemos ver simbolicamente na figura. Isso significa que o tamanho total da PLA na Figura C.3.9 proporcional a (10 17) + (20 17) = 510. Por comparao, o tamanho de uma nica ROM proporcional a 20Kbits e mesmo a ROM de duas partes possui um total de 4,3Kbits. Como o tamanho de uma clula de PLA ser apenas ligeiramente maior do que o tamanho de um bit em uma ROM, uma PLA ser uma implementao muito mais eficiente para essa unidade de controle. claro que, assim como dividimos a ROM em duas, podemos dividir a PLA em duas PLAs: uma com 4 entradas e 10 mintermos que gera as 16 sadas de controle, e uma com 10 entradas e 7 mintermos que gera as 4 sadas de prximo estado. A primeira PLA teria um tamanho proporcional a (4 10) + (10 16) = 200, e a segunda PLA teria um tamanho proporcional a (10 7) + (4 7) = 98. Isso

C.4

Implementando a funo de prximo estado com um seqenciador

C-16

produziria um tamanho total proporcional a 298 clulas de PLA, cerca de 55% do tamanho de uma PLA nica. Essas duas PLAs sero consideravelmente menores do que uma implementao usando duas ROMs. Para obter mais detalhes sobre PLAs e sua implementao, bem como as referncias para livros sobre projeto de lgica, veja o Apndice B.

C.4

Implementando a funo de prximo estado com um seqenciador

Vamos olhar cuidadosamente a unidade de controle construda na ltima seo. Se voc examinar as ROMs que implementam o controle nas Figuras C.3.7 e C.3.8, poder ver que muito da lgica usada para especificar a funo de prximo estado. Na verdade, para a implementao usando duas ROMs separadas, 4.096 dos 4.368bits (94%) correspondem funo de prximo estado! Alm disso, imagine como seria a lgica de controle se o conjunto de instrues tivesse muito mais tipos de instruo diferentes, alguns dos quais exigindo muitos clocks para serem implementados. Haveria muito mais estados na mquina de estados finitos. Em alguns estados, poderamos estar desviando para um nmero maior de estados diferentes dependendo do tipo de instruo (como fizemos no estado 1 da mquina de estados finitos na Figura C.3.1). Entretanto, muitos dos estados continuariam de uma maneira seqencial, exatamente como os estados 3 e 4 na Figura C.3.1. Por exemplo, se inclussemos ponto flutuante, veramos uma seqncia sucessiva de muitos estados que implementam uma instruo de ponto flutuante multiciclo. Como alternativa, considere como o controle pode se parecer para uma mquina que pode ter mltiplos operandos de memria por instruo. Ela exigiria que muito mais estados buscassem mltiplos operandos de memria. O resultado disso seria que a lgica de controle ser dominada pela codificao da funo de prximo estado. Alm disso, muito da lgica ser dedicada a seqncias de estados com apenas um caminho entre eles que se parecem com os estados 2 a 4 na Figura C.3.1. Com mais instrues, essas seqncias consistiro em estados numerados muito mais seqencialmente do que para nosso subconjunto simples. Para codificarmos de maneira eficiente essas funes de controle mais complexas, podemos usar uma unidade de controle que tenha um contador para fornecer o prximo estado seqencial. Esse contador elimina a necessidade de codificar a funo de prximo estado explicitamente na unidade de controle. Como mostra a Figura C.4.1, um somador usado para incrementar o estado, transformando-o essencialmente em um contador. O estado incrementado sempre o estado que se segue na ordem numrica. Todavia, a mquina de estados finitos algumas vezes desvia. Por exemplo, no estado 1 da mquina de estados finitos (veja a Figura C.3.1), existem quatro prximos estados possveis, sendo que apenas um deles o prximo estado seqencial. Desse modo, precisamos ser capazes de escolher entre o estado incrementado e um novo estado com base nas entradas do registrador Instruction e no estado atual. Cada word de controle incluir linhas de controle que determinaro como o prximo estado escolhido. fcil implementar a parte do sinal da sada de controle da word de controle, j que, se usarmos os mesmos nmeros de estado, essa parte da word de controle se parecer exatamente com o controle da ROM mostrado na Figura C.3.7. No entanto, o mtodo para selecionar o prximo estado difere da funo de prximo estado na mquina de estados finitos. Com um contador explcito fornecendo o prximo estado seqencial, a lgica da unidade de controle s precisa especificar como escolher o estado quando ele no o estado seqencialmente seguinte. H dois mtodos para fazer isso. O primeiro um mtodo que j vimos: A unidade de controle codifica explicitamente a funo de prximo estado. A diferena que a unidade de controle s precisa definir as linhas de prximo estado quando o prximo estado designado no o estado que o contador indica. Se o nmero de estados for grande e a funo de prximo estado que precisamos codificar estiver principalmente vazia, isso pode no ser uma boa escolha, j que a unidade de controle resultante ter muito espao vazio ou redundante. Um mtodo alternativo usar lgica externa separada para especificar o prximo estado quando o contador no especifica o estado. Muitas unidades de controle, especialmente aquelas que implementam grandes conjuntos de instrues, usam esse mtodo, e iremos focalizar a especificao externa do controle.

C-17

Apndice C

Mapeando o Controle no Hardware

ELSEVIER

Unidade de controle PLA ou ROM

EscrevePC EscrevePCCond IouD LeMem EscreveMem EscreveIR

Sadas

MemparaReg OrigPC OpALU OrigBALU OrigAALU EscreveReg RegDst

Entrada 1 Estado Somador Lgica se seleo de endereo

CtlEnd

Campo opcode do registrador Instruction FIGURA C. 4.1 A unidade de controle usando um contador explcito para calcular o prximo estado. Nessa unidade de controle, o prximo estado calculado usando um contador (pelo menos em alguns estados). Por comparao, a Figura C.3.2 codifica o prximo estado na lgica de controle para todos os estados. Nessa unidade de controle, os sinais rotulados como CtlEnd controlam como o prximo estado determinado.

Embora o prximo estado no seqencial venha de uma tabela externa, a unidade de controle precisa especificar quando isso deve ocorrer e como encontrar esse prximo estado. H dois tipos de desvio que precisamos implementar na lgica de seleo de endereo. Primeiro, precisamos ser capazes de saltar para um de vrios estados baseado na parte do opcode do registrador Instruction. Essa operao, chamada despacho, normalmente implementada usando um conjunto de ROMs ou PLAs especiais includas como parte da lgica de seleo de endereo. Um conjunto adicional de sadas de controle, que chamamos CtlEnd, indica quando um despacho deve ser feito. Olhando o diagrama de estados finitos (Figura C.3.1), vemos que existem dois estados em que fazemos um desvio baseado em uma parte do opcode. Portanto, precisaremos de duas pequenas tabelas de despacho. (Como alternativa, tambm poderamos usar uma nica tabela de despacho e usar os bits de controle que selecionam a tabela como bits de endereo que escolhem de que parte da tabela de despacho selecionar o endereo.) O segundo tipo de desvio que precisamos implementar consiste em desviar de volta para o estado 0, que inicia a execuo da prxima instruo MIPS. Portanto, existem quatro maneiras possveis de escolher o prximo estado (trs tipos de desvios e incrementar o nmero do estado atual), que podem ser codificadas em 2 bits. Vamos considerar que a codificao a seguinte:
Valor de CtlEnd 0 1 2 3 Ao Define o estado em 0 Despacha com ROM 1 Despacha com ROM 2 Usa o estado incrementado

Op[50]

C.4

Implementando a funo de prximo estado com um seqenciador

C-18

PLA ou ROM

1 Estado Somador Mux 3 2 1 0 0 CtlEnd

ROM de despacho 2

ROM de despacho 1 Lgica de seleo de endereo

Campo opcode do registrador Instruction FIGURA C. 4.2

Essa a lgica de seleo de endereo para a unidade de controle da Figura C.4.1.

Se usarmos essa codificao, a lgica de seleo de endereo para essa unidade de controle pode ser implementada como mostra a Figura C.4.2. Para completar a unidade de controle, s precisamos especificar o contedo das ROMs de despacho e os valores das linhas de controle de endereo para cada estado. J especificamos a parte do controle do caminho de dados da word de controle usando o contedo da ROM da Figura C.3.7 (ou as partes correspondentes da PLA na Figura C.3.9). O contador de prximo estado e as ROMs de despacho substituem a parte da unidade de controle que estava calculando o prximo estado, mostrada na Figura C.3.8. Como estamos apenas implementando uma parte do conjunto de instrues, as ROMs de despacho estaro primordialmente vazias. A Figura C.4.3 mostra as entradas que precisam ser atribudas para esse subconjunto. A Seo 5.6 do Captulo 5 discute o que fazer com as entradas nas ROMs de despacho que no correspondem a qualquer instruo.

ROM de despacho 1 Op 000000 000010 000100 100011 101011 Nome do opcode formato R jmp beq lw sw ROM de despacho 2 Op 100011 101011 FIGURA C. 4.3 Nome do opcode lw sw Valor 0011 0101
6

Op
Valor 0110 1001 1000 0010 0010

Cada uma das ROMs de despacho possui 2 = 64 entradas com 4 bits de largura, j que esse o nmero de bits na codificao de estado. Essa figura mostra as entradas na ROM de interesse para esse subconjunto. A primeira coluna de cada tabela indica o valor de Op, que o endereo usado para acessar a ROM de despacho. A segunda coluna mostra o nome simblico do opcode. A terceira coluna indica o valor nesse endereo na ROM.

C-19

Apndice C

Mapeando o Controle no Hardware

ELSEVIER

Agora podemos determinar a definio das linhas de seleo de endereo (CtlEnd) em cada word de controle. A tabela na Figura C.4.4 mostra como o controle de endereo precisa ser definido para cada estado. Essas informaes sero usadas para especificar a definio do campo CtlEnd na word de controle associada com esse estado.
Nmero do estado 0 1 2 3 4 5 6 7 8 9 FIGURA C. 4.4 Ao do controle de endereo Usa o estado incrementado Usa a ROM de despacho 1 Usa a ROM de despacho 2 Usa o estado incrementado Substitui o nmero do estado por 0 Substitui o nmero do estado por 0 Usa o estado incrementado Substitui o nmero do estado por 0 Substitui o nmero do estado por 0 Substitui o nmero do estado por 0 Valor de CtlEnd 3 1 2 3 0 0 3 0 0 0

Os valores das linhas de controle de endereo so definidos na word de controle que corresponde a cada estado.

O contedo da ROM de controle inteira mostrado na Figura C.4.5. O armazenamento total necessrio para o controle muito pequeno. Existem 10 words de controle, cada uma com 18 bits de largura, para um total de 180 bits. Alm disso, as duas tabelas de despacho tm 4 bits de largura e cada uma possui 64 entradas, para um total de 512 bits adicionais. Esse total de 692 bits melhor do que a implementao que usa duas ROMs com a funo de prximo estado nas ROMs (que exige 4,3Kbits).
Nmero do estado 0 1 2 3 4 5 6 7 8 9 Bits de word de controle 17-2 1001010000001000 0000000000011000 0000000000010100 0011000000000000 0000001000000010 0010100000000000 0000000001000100 0000000000000011 0100000010100100 1000000100000000 Bits de word de controle 1-0 11 01 10 11 00 00 11 00 00 00

FIGURA C. 4.5 O contedo da memria de controle para uma implementao usando um contador expl-

cito. A primeira coluna mostra o estado, a segunda mostra os bits de controle do caminho de dados e a ltima coluna mostra os bits de controle de endereo em cada word de controle. Os bits 17-2 so idnticos aos da Figura C.3.7.

Naturalmente, as tabelas de despacho so esparsas e poderia ser implementada mais eficientemente com duas pequenas PLAs. A ROM de controle tambm poderia ser substituda por uma PLA.

Otimizando a implementao do controle


Podemos reduzir mais a quantidade de lgica na unidade de controle por duas tcnicas diferentes. A primeira a minimizao de lgica, que usa a estrutura das equaes lgicas, incluindo os dont ca-

C.4

Implementando a funo de prximo estado com um seqenciador

C-20

res, para reduzir a quantidade de hardware necessria. O sucesso desse processo depende de quantas entradas existem na tabela verdade e de como esto relacionadas. Por exemplo, nesse subconjunto, apenas os opcodes lw e sw possuem um valor ativo para o sinal Op5; portanto, podemos substituir as duas entradas da tabela verdade que testam se a entrada lw ou sw por um teste simples nesse bit; da mesma forma, podemos eliminar vrios bits usados para localizar lw e sw na primeira ROM de despacho. Evidentemente, se o espao do opcode fosse mais denso, as oportunidades para essa otimizao seriam mais difceis de localizar. Todavia, escolhendo os opcodes, o arquiteto pode fornecer oportunidades adicionais de escolher opcodes relacionados para instrues que provavelmente compartilham estados no controle. Um tipo diferente de otimizao pode ser feito atribuindo os nmeros de estado em uma implementao de estados finitos ou microcdigo para minimizar a lgica. Essa otimizao, chamada atribuio de estados, tenta escolher os nmeros de estado de modo que as equaes lgicas resultantes contenham mais redundncia e, assim, possam ser simplificadas. Vamos considerar primeiro o caso de uma mquina de estados finitos com um controle de prximo estado codificado, j que ela permite que os estados sejam atribudos arbitrariamente. Por exemplo, observe que na mquina de estados finitos o sinal EscreveReg est ativo apenas nos estados 4 e 7. Se codificssemos esses estados como 8 e 9, em vez de 4 e 7, poderamos reescrever a equao para EscreveReg simplesmente como um teste no bit S3 (que s est ligado para os estados 8 e 9). Essa renumerao permite combinar as duas entradas da tabela verdade na parte (o) da Figura C.3.4 e substitu-las por uma nica entrada, eliminando um termo na unidade de controle. claro que teramos de renumerar os estados existentes 8 e 9, talvez como 4 e 7.

Unidade de controle Memria de microcdigo

Sadas

Entrada 1 Contador de microprograma Somador Lgica de seleo de endereo

EscrevePC EscrevePCCond IouD LeMem EscreveMem EscreveIR EscreveB MemparaReg OrigPC OpALU OrigBALU OrigAALU EscreveReg RegDst CtlEnd

Caminho de dados

Campo opcode do registrador Instruction FIGURA C. 4.6 A unidade de controle como um microcdigo. O uso do termo micro serve para distinguir entre o contador de programa no caminho de dados e o contador de microprograma, e entre a memria de microcdigo e a memria de instrues.

Op[50]

C-21

Apndice C

Mapeando o Controle no Hardware

ELSEVIER

A mesma otimizao pode ser aplicada em uma implementao que usa um contador de programa explcito, embora estejamos mais restritos. Como o nmero do prximo estado freqentemente calculado incrementando o nmero do estado atual, no podemos atribuir arbitrariamente os estados. No entanto, se mantivermos os estados em que o estado incrementado usado como o prximo estado na mesma ordem, poderemos reatribuir os estados consecutivos como um bloco. Em uma implementao com um contador de prximo estado explcito, a atribuio de estado pode permitir simplificar o contedo das ROMs de despacho. Se olharmos novamente a unidade de controle na Figura C.4.1, surpreendentemente ela se parece muito com um computador. A ROM ou a PLA pode ser imaginada como instrues buscadas na memria para o caminho de dados. O estado pode ser imaginado como um endereo de instruo. Da a origem do nome microcdigo ou controle microprogramado. As words de controle so consideradas como microinstrues que controlam o caminho de dados, e o registrador State chamado de contador de microprograma. A Figura C.4.6 mostra uma viso da unidade de controle como um microcdigo. A prxima seo descreve como mapear de um microprograma para o microcdigo.

C.5

Traduzindo um microprograma para hardware

Para traduzir o microprograma da Seo 5.5 para hardware real, precisamos especificar como cada campo se traduz em sinais de controle. Podemos implementar o microprograma com controle de estados finitos ou uma implementao de microcdigo com um seqenciador explcito. Se escolhermos uma mquina de estados finitos, precisaremos construir a funo de prximo estado a partir do microprograma. Uma vez que essa funo seja conhecida, podemos mapear um conjunto de entradas da tabela verdade para as sadas de prximo estado. Nesta seo, veremos como traduzir o microprograma considerando que o prximo estado seja especificado por um seqenciador. Das tabelas verdade que construiremos, seria simples construir a funo de prximo estado para uma mquina de estados finitos. Considerando um seqenciador explcito, precisamos realizar duas tarefas adicionais para traduzir o microprograma: atribuir endereos s microinstrues e preencher o contedo das ROMs de despacho. Esse processo igual ao processo de traduzir um programa em assembly para instrues de mquina: Os campos em assembly ou a instruo do microprograma so traduzidos e os rtulos das instrues precisam ser convertidos em endereos. A Figura C.5.1 mostra os diversos valores para cada campo de microinstruo que controla o caminho de dados e como esses campos so codificados como sinais de controle. Se o campo correspondente a um sinal que afeta uma unidade com estado (ou seja, Controle da Memria, Controle dos Registradores, Controle da ALU ou Controle de escrita no PC) estiver vazio, ento, nenhum sinal de controle deve estar ativo. Se um campo correspondente a um sinal de controle de multiplexador ou ao controle de operao da ALU (ou seja, OpALU, SRC1 ou SRC2) estiver vazio, a sada no utilizada, de modo que os sinais associados podem ser definidos como dont cares. O campo Seqenciamento pode ter quatro valores: Fetch (significando ir para o estado Fetch), Dispatch 1, Dispatch 2 e Seq. Esses quatro valores so codificados para definir o controle de endereo de 2 bits exatamente como foram na Figura C.4.4: Fetch = 0, Dispatch 1 = 1, Dispatch 2 = 2, Seq = 3. Finalmente, precisamos especificar o contedo das tabelas de despacho para relacionarem as entradas de despacho do campo Seqenciamento aos rtulos simblicos no microprograma. Usamos as mesmas tabelas de despacho que usamos anteriormente na Figura C.4.3. Um montador de microcdigo usaria a codificao do campo Seqenciamento, o contedo das tabelas de despacho simblicas na Figura C.5.2, a especificao na Figura C.5.1 e o microprograma real na Figura 5.7.3 para gerar as microinstrues.

C.5

Traduzindo um microprograma para hardware

C-22

Nome do campo Controle da ALU

Valor Add Subt Func code

Sinais ativos OpALU = 00 OpALU = 01 OpALU = 10 OrigAALU = 0 OrigAALU = 1 OrigBALU = 00 OrigBALU = 01 OrigBALU = 10 OrigBALU = 11

Comentrio Faz com que a ALU realize uma soma. Faz com que a ALU realize uma subtrao; isso implementa a comparao para desvios. Usa o cdigo de funo da instruo para determinar o controle da ALU. Usa o PC como a primeira entrada da ALU. O registrador A a primeira entrada da ALU. O registrador B a segunda entrada da ALU. Usa 4 como a segunda entrada da ALU. Usa a sada da unidade de extenso de sinal como a segunda entrada da ALU. Usa a sada da unidade de deslocamento em dois bits como a segunda entrada da ALU. L dois registradores usando os campos rs e rt do IR como os nmeros de registrador e colocando os dados nos registradores A e B.

SRC1

PC A

SRC2

B 4 Extend Extshft

Controle dos Registradores

Read Write ALU EscreveReg, RegDst = 1, MemparaReg = 0 EscreveReg, RegDst = 0, MemparaReg = 1 LeMem, IouD = 0, EscreveIR LeMem, IouD = 1 EscreveMem, IouD = 1 OrigPC = 00, EscrevePC OrigPC = 01, EscrevePCCond OrigPC = 10, EscrevePC CtlEnd = 11 CtlEnd = 00 CtlEnd = 01 CtlEnd = 10

Escreve num registrador usando o campo rd do IR como o nmero de registrador e o contedo de SadaALU como os dados. Escreve num registrador usando o campo rt do IR como o nmero de registrador e o contedo de MDR como os dados. L a memria usando o PC como o endereo; escreve o resultado no IR (e no MDR). L a memria usando SadaALU como o endereo; escreve o resultado no MDR. Escreve na memria usando SadaALU como o endereo e o contedo de B como os dados. Escreve a sada da ALU no PC. Se a sada Zero da ALU estiver ativa, escreve o PC com o contedo do registrador SadaALU. Escreve o PC com o endereo de jump da instruo. Escolhe a prxima microinstruo seqencialmente. Vai para a primeira microinstruo para iniciar uma nova instruo. Despacha usando a ROM 1. Despacha usando a ROM 2.

Write MDR

Controle da Memria

Read PC

Read ALU Write ALU Controle de Escrita no PC ALU ALUOut-cond jump address Seqenciamento Seq Fetch Dispatch 1 Dispatch 2

FIGURA C. 5.1 Cada campo de microcdigo traduzido para um conjunto dos sinais de controle a serem definidos. Essa tabela especifica um valor para cada um dos campos que foram especificados originalmente na Figura 5.7.3. Esses 22 valores diferentes dos campos especificam todas as combinaes necessrias das 18 linhas de controle. As linhas de controle no definidas que correspondem a aes so 0 por padro. As linhas de controle de multiplexador so definidas como 0 se a sada importa. Se uma linha de controle de multiplexador no estiver explicitamente definida, sua sada dont care e no usada.

Como o microprograma uma representao abstrata do controle, h uma grande flexibilidade em como o microprograma traduzido. Por exemplo, a entrada atribuda a muitas microinstrues pode ser escolhida arbitrariamente; as nicas restries so as impostas pelo fato de que certas microinstrues precisam ocorrer em ordem seqencial (de modo que incrementar o registrador State gere o endereo da prxima instruo). Portanto, o montador de microcdigo pode reduzir a complexidade do controle atribuindo as microinstrues inteligentemente.

C-23

Apndice C

Mapeando o Controle no Hardware

ELSEVIER

Tabela de despacho de microcdigo 1 Campo opcode 000000 000010 000100 100011 101011 Nome do opcode formato R jmp beq lw sw Valor R-format1 JUMP1 BEQ1 Mem1 Mem1

Tabela de despacho de microcdigo 2 Campo opcode 100011 101011 Nome do opcode lw sw Valor LW2 SW2

FIGURA C. 5.2 As duas ROMs de despacho de microcdigo mostrando o contedo em forma simblica usando as tabelas no microprograma.

Organizando o controle para reduzir a lgica


Para uma mquina com controle complexo, pode haver uma grande quantidade de lgica na unidade de controle. A ROM ou PLA de controle podem ser bastante dispendiosas. Embora nossa implementao simples tivesse apenas uma microinstruo de 18 bits (considerando um seqenciador explcito), existiram mquinas com microinstrues de centenas de bits de largura. Evidentemente, um projetista gostaria de reduzir o nmero de microinstrues e a largura. O mtodo ideal para reduzir o armazenamento de controle primeiro escrever o microprograma completo em uma notao simblica e, depois, medir como as linhas de controle esto definidas em cada microinstruo. Fazendo medies, podemos reconhecer os bits de controle que podem ser codificados em um campo menor. Por exemplo, se no mais que uma de oito linhas definida simultaneamente na mesma microinstruo, esse subconjunto de linhas de controle pode ser codificado em um campo de 3 bits (log2 8 = 3). Essa mudana economiza 5 bits em cada microinstruo e no prejudica o CPI, embora signifique o custo de hardware extra de um decodificador de 3 para 8 necessrio para gerar as oito linhas de controle quando forem exigidas no caminho de dados. Isso tambm pode ter um pequeno impacto de ciclo de clock, j que o decodificador est no caminho do sinal. Entretanto, tirar 5 bits da largura do armazenamento de controle normalmente ir superar o custo do decodificador, e o impacto do tempo de ciclo provavelmente ser pequeno ou inexistente. Por exemplo, essa tcnica pode ser aplicada nos bits 13-6 das microinstrues nessa mquina, j que apenas 1 bit dos 7 bits da word de controle est sempre ativo (veja a Figura C.4.5). Essa tcnica de reduzir a largura de campo chamada de codificao. Para ganhar ainda mais espao, as linhas de controle podem ser codificadas juntas se forem definidas na mesma microinstruo apenas ocasionalmente; duas microinstrues em vez de uma so ento necessrias quando as duas precisarem ser definidas. Como isso no acontece em rotinas crticas, a microinstruo mais curta pode justificar algumas words extras do armazenamento de controle. As microinstrues podem se tornar mais curtas ainda se forem divididas em diferentes formatos e receberem um campo opcode ou format para distingui-las. O campo format fornece os valores padro a todas as linhas de controle no especificadas, a fim de no mudar nada mais na mquina, e semelhante ao opcode de uma instruo em um conjunto de instrues mais capaz. Por exemplo, para microinstrues que realizassem acessos memria, poderamos usar um formato diferente daqueles que realizassem operaes da ALU registrador para registrador, tirando vantagem do fato de que as linhas de controle de acesso memria no so necessrias em microinstrues controlando operaes da ALU. A reduo dos custos de hardware usando campos de formato normalmente tem um custo de desempenho adicional alm do necessrio para mais decodificadores. Um microprograma usando um nico formato de microinstruo pode especificar qualquer combinao de operaes em um cami-

C.6

Comentrios finais

C-24

nho de dados e pode exigir menos ciclos de clock do que um microprograma composto de microinstrues restritas que no podem realizar qualquer combinao de operaes em uma nica microinstruo. Entretanto, se a capacidade total da word de microprograma mais larga no for usada intensamente, muito do armazenamento de controle ser desperdiado; alm disso, a mquina pode se tornar menor e mais rpida restringindo a capacidade de microinstruo. O mtodo mais estreito, mas em geral mais longo, chamado de microcdigo vertical, enquanto o mtodo largo mas curto chamado de microcdigo horizontal. Devemos salientar que os termos microcdigo vertical e microcdigo horizontal no possuem uma definio universal os projetistas do 8086 consideravam sua microinstruo de 21 bits mais horizontal do que outros computadores de chip nico da poca. Os termos relacionados maximamente codificado e minimamente codificado provavelmente so melhores do que vertical e horizontal.

C.6

Comentrios finais

Iniciamos este apndice vendo como traduzir um diagrama de estados finitos para uma implementao usando uma mquina de estados finitos. Em seguida, examinamos os seqenciadores explcitos que usam uma tcnica diferente para realizar a funo de prximo estado. Embora grandes microprogramas normalmente sejam destinados a implementaes usando esse mtodo de prximo estado explcito, tambm podemos implementar um microprograma com uma mquina de estados finitos. Como vimos, as implementaes em ROM e PLA das funes lgicas so possveis. As vantagens do prximo estado explcito versus codificado e da implementao em ROM versus PLA so resumidas abaixo.

Quer o controle seja representado como um diagrama de estados finitos ou como um microprograma, a traduo para uma implementao de controle de hardware semelhante. Cada estado ou microinstruo ativa um conjunto de sadas de controle e especifica como escolher o prximo estado. A funo de prximo estado pode ser implementada codificando-a em uma mquina de estados finitos ou usando um seqenciador explcito. O seqenciador explcito mais eficiente se o nmero de estados for grande e houver muitas seqncias de estados consecutivos sem desvio. A lgica de controle pode ser implementada com ROMs ou PLAs (ou mesmo um mix). As PLAs so mais eficientes, a menos que a funo de controle seja muito densa. As ROMs podem ser apropriadas se o controle for armazenado em uma memria separada, e no dentro do mesmo chip que o caminho de dados.

Colocando em

perspectiva

C.7

Exerccios

C.1 [10] <C.2> Em vez de usar 4 bits de estado para implementar a mquina de estados finitos da

Figura C.3.1, use 9 bits de estado, cada um dos quais sendo um 1 apenas se a mquina de estados finitos estiver nesse estado especfico (por exemplo, S1 1 no estado 1, S2 1 no estado 2 etc.). Redesenhe a PLA (Figura C.3.9).
C.2 [5] <C.3> Quantos termos de produto so necessrios em uma PLA que implementa o caminho de dados de ciclo nico para jal, considerando as adies de controle descritas no Exerccio

5.20 em

Aprofundando o aprendizado?

C-25

Apndice C

Mapeando o Controle no Hardware

ELSEVIER

C.3 [5] <C.3> Quantos termos de produto so necessrios em uma PLA que implemente o caminho de dados de ciclo nico e controle para addiu, considerando que as adies de controle que voc

precisasse fossem encontradas no Exerccio 5.19 em

Aprofundando o aprendizado?

C.4 [10] <C.3> Determine o nmero de termos de produto em uma PLA que implemente a mquina de estados finitos para jal construda no Exerccio 5.55 em Aprofundando o aprendizado?

A maneira mais fcil de fazer isso construir as tabelas verdade para qualquer nova sada ou qualquer sada afetada pela adio.
C.5 [10] <C.3> Determine o nmero de termos de produto em uma PLA que implemente a mquina de estados finitos para addi no Exerccio 5.19 em Aprofundando o aprendizado? A maneira mais fcil de fazer isso construir as adies s tabelas verdade para addi. C.6 [20] <C.4> Implemente a mquina de estados finitos do Exerccio 5.19 na seo

Aprofundando o aprendizado usando um contador explcito para determinar o prximo estado. Preencha as novas entradas para as adies Figura C.4.5. Alm disso, acrescente quaisquer entradas necessrias s ROMs de despacho da Figura C.5.2. multiciclo do Captulo 5 considerando que a funo de prximo estado implementada com um contador. Implemente as tabelas de despacho da Figura C.5.2 usando duas PLAs, e o contedo da unidade de controle principal na Figura C.4.5 usando outra PLA. Como o tamanho total dessa soluo se compara com a soluo de uma nica PLA com o prximo estado codificado? E se as PLAs principais para os dois mtodos forem divididas em duas PLAs separadas decompondo o prximo estado ou os sinais de seleo de endereo?

C.7 [15] <C.3C.6> Determine o tamanho das PLAs necessrias para implementar a mquina