Académique Documents
Professionnel Documents
Culture Documents
3.1 Introduo
O estudo realizado neste captulo inclui o projeto de implementao de um subconjunto das instrues do processador MIPS. Este subconjunto composto por instrues de acesso memria load word (lw) e store word (sw), instrues lgicas e aritmticas (add, sub, and, or e slt) e instrues de desvio branch equal (beq) e jump (j). Consideramos este subconjunto de instrues representativo dos princpios fundamentais de um projeto de um caminho de dados e de uma unidade de controle. Isto porque qualquer conjunto de instrues possui pelo menos estas trs classes de instrues: as de acesso memria, as lgicas e aritmticas, e as de transferncia de controle. Lembre-se sempre que descrever uma arquitetura implica em definir quais so os seus componentes, a funcionalidade de cada um deles e como eles interagem entre si. Viso Geral da Implementao Parte do que necessrio ser realizado para implementar as instrues que tratam de nmeros inteiros, de acesso memria e de desvio no depende da classe de instrues que est sendo implementada. Para qualquer instruo necessrio primeiro busc-la na memria. Depois, pode ser necessrio usar os campos da instruo para selecionar os registradores a serem lidos. Aps estes passos, as aes realizadas para completar a execuo de uma instruo dependem da classe de instrues. Mesmo entre classes de instrues diferentes existem algumas semelhanas. Por exemplo, todas utilizam a ALU aps a leitura dos registradores. As instrues de acesso
23
memria usam a ALU para efetuar o clculo do endereo, as instrues lgicas e aritmticas executam a prpria operao e os desvios condicionais efetuam comparaes. Aps usar a ALU, as aes necessrias para completar a execuo das instrues de cada classe so diferentes. Uma instruo que referencia a memria precisa realizar o acesso memria. Nas instrues lgicas e aritmticas preciso armazenar o resultado produzido pela ALU num registrador. E, numa instruo de desvio pode ser necessrio modificar o endereo da prxima instruo a ser buscada da memria. A Figura 3.1 mostra uma viso de alto nvel de uma implementao do processador MIPS.
dados
PC
endereo
instruo
Reg #
ALU
endereo
Memria de Instrues
Banco de Registradores
Memria de Dados
dados
No decorrer deste captulo esta viso refinada. Ela acrescenta, por exemplo, novas unidades funcionais e conexes entre as unidades, alm de uma unidade de controle para gerenciar as aes das diferentes classes de instrues. Antes de mostrar uma implementao mais detalhada discutimos alguns princpios de projeto da lgica do caminho de dados e da unidade de controle. Convenes da Lgica e Clock No projeto de um sistema necessrio decidir como a lgica que vai implement-lo deve operar e como o esquema do clock usado. Ao se projetar circuitos lgicos os sinais de controle ativos podem estar tanto no nvel de tenso alto quanto no baixo, de acordo com a necessidade. Neste texto usamos a representao de um sinal ativo quando ele est no nvel alto (1 lgico). As unidades funcionais implementadas no processador MIPS so construdas a partir de componentes (ou elementos) lgicos combinacionais e seqenciais. Nos componentes combinacionais as sadas produzidas dependem unicamente das entradas presentes num dado instante de tempo. Isto , para um dado conjunto de entradas a sada sempre a mesma. Os componentes combinacionais no armazenam informao.
24
Existem outros componentes que suportam o conceito de estado. Eles so conhecidos como componentes lgicos seqenciais. Um componente contm um estado se possuir uma memria interna, ou seja, se for capaz de armazenar informaes. O componente que armazena informao conhecido como elemento de estado. A sada de um elemento de estado fornece o valor que foi armazenado nele no ciclo de clock anterior. Os componentes seqenciais tm no mnimo dois valores de entrada e uma sada. Os dois valores de entrada so o clock e os dados de entrada. Estes componentes so conhecidos como seqenciais porque sua sada depende tanto de suas entradas quanto do estado interno armazenado anteriormente no elemento de estado. A metodologia de temporizao define quando os sinais podem ser lidos ou escritos. Se ocorrer uma tentativa de leitura e de escrita simultaneamente o resultado indeterminado. Assumimos que a metodologia de temporizao sensvel s transies ou sensvel s bordas do sinal de clock. Uma metodologia de temporizao baseada nas transies do sinal de clock permite que um elemento de estado seja lido e escrito dentro do mesmo ciclo de clock. A atualizao do estado armazenado somente nas transies no cria condies de corrida, o que evita a indeterminao dos valores dos dados. A Figura 3.2 mostra uma metodologia de temporizao baseada nas transies do sinal de clock.
Elemento de estado Lgica combinacional
No processador MIPS a maioria dos elementos combinacionais e de estado tm entradas/sadas de 32 bits. A maioria dos dados e todas as instrues tm tamanho de 32 bits. Primeiro, mostramos uma implementao bem simples do subconjunto de instrues. Ela baseada num nico ciclo de clock que grande o suficiente para atender todas as instrues consideradas (projeto monociclo). Assim, toda instruo comea sua execuo em uma transio ativa do clock e termina na prxima transio ativa do clock. Dessa forma, todas as instrues gastam o mesmo tempo para serem executadas. O tempo escolhido o da instruo mais demorada e deve obrigatoriamente ser igual ao tamanho do ciclo de clock. Este esquema mostrado por ser mais simples de entender. Porm, no implementado na realidade porque muito ineficiente. A segunda forma de implementao abordada mais realista. Cada instruo possui um tempo de execuo que varia de acordo com a quantidade de ciclos de clock necessrios a cada uma delas (projeto multiciclo).
25
Somador
PC
prximo endereo
Memria de Instrues
Figura 3.3. Parte do caminho de dados utilizada para armazenar instruo e incrementar o PC.
O PC um registrador de 32 bits que atualizado ao final de cada ciclo de clock. Por isso, no precisa de um sinal especfico para a sua atualizao. A tarefa do somador incrementar o valor do PC. Ele pode ser visto como uma ALU muito simples que s realiza operao de soma. O valor 4 numa das entradas do somador indica que a prxima instruo est armazenada 4 bytes depois do valor corrente do PC. Execuo de Instrues Lgicas e Aritmticas Todas instrues lgicas e aritmticas do processador MIPS precisam ler dois registradores, realizar a operao sobre o contedo dos registradores e escrever o resultado num terceiro registrador. Esta classe de instrues inclui operaes como add, sub, slt, and, or.
26
O conjunto dos registradores de 32 bits do processador MIPS forma uma estrutura conhecida como banco de registradores. Esses registradores podem ser lidos ou escritos. Alm dele, necessrio uma ALU para operar sobre os valores lidos dos registradores. A Figura 3.4 mostra a parte do caminho de dados usado na execuo de uma instruo lgica e aritmtica.
Instruo Reg lido # 1 Reg lido # 2 Reg a ser escrito Dado lido # 1 Zero ALU Resultado da ALU
Operao da ALU
Banco de Registradores
Dado lido # 2 Dado de escrita EscReg
Figura 3.4. Parte do caminho de dados utilizada na execuo der instrues lgicas e aritmticas.
O banco de registradores sempre coloca nas suas sadas o contedo dos registradores cujos nmeros aparecem nas entradas Reg lido #1 e Reg lido #2. No necessrio outro controle de entrada. As entradas relativas aos nmeros dos registradores tm 5 bits, para poder especificar um entre os 32 registradores, enquanto os barramentos de dados de entrada e sada tm 32 bits. A escrita em um registrador precisa ser indicada explicitamente. Isto feito ativando o sinal de controle de escrita (EscReg). O nmero do registrador que vai ser escrito e o sinal de controle de escrita precisam estar vlidos nas transies ativas do clock. A operao realizada pela ALU controlada por um sinal que contm 3 bits. A sada da ALU para deteco do valor zero usada para implementao de desvios condicionais. Execuo de Instrues de Load e Store Considere as instrues de load word e store word do processador MIPS, que tm a forma lw $t1, deslocamento($t2) ou sw $t1, deslocamento($t2). Elas calculam um endereo de memria somando o contedo de um registrador-base ($t2) ao nmero de 16 bits sem sinal armazenado no campo de deslocamento da instruo. O registrador $t1 armazena o dado que vai ser lido ou escrito na memria. Dessa forma, precisamos do banco de registradores e da ALU mostrados na Figura 3.4. Alm disso, precisamos de uma memria de dados e uma unidade de extenso de sinal para estender o campo de 16 bits do deslocamento para um valor de 32 bits com sinal. A Figura 3.5 mostra estes dois novos elementos combinados com os elementos da Figura 3.4.
27
A nova memria deve ter dois sinais para controlar a leitura (LerMem) e a escrita de dados (EscMem), duas entradas e uma sada. Uma das entradas para o endereo do dado e a outra para os dados a serem escritos. A nica sada para o dado a ser lido. A unidade de extenso de sinal tem uma entrada de 16 bits que, aps a extenso do sinal, transforma-se num resultado de 32 bits que disponibilizado na sua sada.
Instruo
Banco de Registradores
Dado lido # 2 Dado de escrita EscReg
Endereo
Memria de Dados
Dado lido
16
Extenso de sinal
Figura 3.5. Parte do caminho de dados utilizada na execuo das instrues de load e store.
O nmero dos registradores de entrada do banco de registradores vem dos campos da prpria instruo, assim com o deslocamento. O valor especificado no campo de deslocamento aps ter seu sinal estendido torna-se a segunda entrada da ALU. Execuo de Instrues de Desvio Uma instruo de desvio condicional como, por exemplo, beq, possui trs operandos. Dois registradores cujos contedos so comparados, e um deslocamento de 16 bits usado no clculo do endereo alvo de desvio. Para implementao desta instruo, ento, precisamos calcular o endereo alvo do desvio. Esse endereo obtido somando o campo de deslocamento (com sinal estendido) da instruo ao valor armazenado no PC. Existem dois detalhes que precisam ser lembrados: a arquitetura do conjunto de instrues estabelece que a base para o clculo do endereo alvo do desvio igual ao valor do PC atualizado (PC + 4, passo de busca); e a arquitetura tambm define que o campo de deslocamento deve ser deslocado de 2 bits esquerda. Isto significa um deslocamento relativo palavra do processador. Este procedimento aumenta o alcance efetivo do campo de deslocamento por um fator de quatro.
28
A Figura 3.6 mostra o caminho de dados para uma instruo de desvio condicional.
PC + 4 (vindo da busca)
Soma Reg lido # 1 Reg lido # 2 Desl. 2 bits Somador
Banco de Registradores
Dado de escrita
3
Dado lido # 1
Operao da ALU
16
32
Figura 3.6. Parte do caminho de dados utilizada na execuo das instrues de desvio condicional.
Alm de calcular o endereo alvo do desvio condicional, necessrio determinar se a prxima instruo a ser executada segue imediatamente a instruo atual ou se a instruo armazenada no endereo alvo do desvio. Quando a condio verdadeira o endereo alvo do desvio calculado deve ser armazenado no PC. Caso contrrio, o valor do PC, incrementado no passo de busca, no deve ser substitudo. Para calcular o endereo alvo do desvio condicional, o caminho de dados possui uma unidade de extenso de sinal, igual ao da Figura 3.5, e um outro somador. Para a comparao necessrio utilizar o banco de registradores para fornecer para a ALU o contedo dos dois registradores que sero comparados. A ALU possui um sinal de sada indicando se o resultado calculado ou no igual a zero. Podemos enviar para a ALU um sinal de controle indicando a realizao de uma subtrao, por exemplo, para a condio de desvio da instruo beq. Se o sinal Zero da ALU estiver ativo os dois valores so iguais. A instruo de desvio incondicional opera substituindo os 28 bits menos significativos do PC atual (incrementado no passo de busca) pelos 26 bits da direita da instruo, deslocados de 2 bits. O deslocamento realizado com a simples concatenao de 00 no campo de endereo do desvio incondicional. Definidos os caminhos de dados para as classes de instrues lgicas e aritmticas, de acesso memria e de controle de fluxo, podemos combin-los em um nico caminho de dados. Alm disso, podemos acrescentar o controle para completar a implementao que est descrita na prxima seo.
29
30
temos que obter um dado para ser armazenado no banco de registradores vindos de fontes diferentes. Em ambas as entradas devem ser colocados multiplexadores, cujos sinais so denominados ALUFonte e MemReg, respectivamente. Essa combinao pode ser vista na Figura 3.7.
3 Reg # 1 Dado # 1 ALUFonte Dado # 2 Reg escrito
Operao da ALU
EscMem
Instruo
Reg # 2
Registradores
Dado escrito EscReg 16 32
0 M U X 1
Memria de Dados
Dado escrito LerMem
0 M U X 1
Extenso de sinal
Figura 3.7. Caminho de dados combinando as instrues de acesso memria e lgicas e aritmticas.
O mesmo raciocnio deve ser utilizado para combinar o caminho de dados de todas as classes de instrues. A Figura 3.8 mostra o caminho de dados combinado que atende as instrues de acesso memria, lgicas e aritmticas e de desvio condicional.
0 M U X 1
4
Somador
Somador FontePC
Desl. 2 bits Reg # 1 Reg # 2 Dado # 1 ALUFonte 3 Oprao da ALU EscMem
PC
Endereo
Instruo [31-0]
Reg escrito
Dado # 2
Memria de Instrues
Registradores
Dado escrito EscReg 16
0 M U X 1
Endereo
MemReg
Dado
Memria de Dados
Dado escrito LerMem
0 M U X 1
Extens. 32 sinal
Figura 3.8. Caminho de dados utilizado na execuo de todas as classes de instrues abordadas.
31
Controle do Caminho de Dados Atravs da Unidade de Controle Terminada a fase de combinao dos caminhos de dados individuais necessrio projetar a unidade de controle. A unidade de controle deve ser capaz de, a partir dos sinais de entrada, gerar os sinais de escrita para todos os elementos de estado, os sinais seletores de todos os multiplexadores e os sinais para o controle das operaes da ALU. Iniciamos o projeto da unidade de controle pela gerao dos sinais de controle da ALU. Controle da ALU A ALU possui trs entradas e so usadas somente cinco das oito possveis combinaes dessas entradas. A Tabela 3.1 mostra essas possveis combinaes. Entrada da ALU 000 001 010 110 111 Funo
AND OR
Dependendo da classe de instrues a ALU executa uma destas cinco funes. Nas instrues lw e sw a ALU calcula o endereo de acesso memria. Para isso, a ALU s utiliza a operao de soma. Nas operaes lgicas e aritmticas a ALU executa uma das cinco funes dependendo do campo func (6 bits) da instruo. Na instruo de desvio condicional beq a ALU executa uma operao de subtrao. Podemos gerar os trs bits de controle da ALU usando uma unidade de controle pequena. Esta unidade recebe como entrada o campo func e um campo de controle de 2 bits, que denominamos ALUOp. O campo ALUOp indica se a operao de soma (00), para lw e sw, subtrao (01), para beq, ou se deve ser determinada pelo campo func (10), para instrues lgicas e aritmticas. A sada da unidade de controle da ALU um sinal de 3 bits que controla diretamente a ALU, gerando uma das cinco combinaes necessrias. Existem vrias maneiras de se implementar o mapeamento dos 2 bits do campo ALUOp e dos 6 bits do campo func nos 3 bits de controle da ALU. Observe que somente poucas combinaes das 64 possveis (2 bits ALUOp + 6 bits func) so realmente utilizadas. A tabela verdade, a seguir, mostra as combinaes que interessam (Tabela 3.2).
32
Func 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
Tabela 3.2. Tabela verdade com as combinaes dos sinais que devem ser gerados pe a unidade de controle da ALU.
Projeto da Unidade de Controle Para completar o projeto da unidade de controle importante considerar o formato das instrues do processador. A Figura 3.9 relembra o formato das instrues do processador MIPS para todas as classes de instrues que estamos considerando.
31-26 25-21 rs 25-21 rs 25-21 rs 20-16 rt 20-16 rt 20-16 rt 15-11 rd 10-6 shmat 5-0 func
Tipo R
0
31-26
lw/sw
35/43 31-26
beq
Considerando estes diferentes formatos podemos adicionar ao caminho de dados a identificao da instruo e um multiplexador extra. Este multiplexador deve ser colocado na entrada do registrador a ser escrito no banco de registradores. A entrada do multiplexador vem do campo rd [15-11], se a instruo for lgica ou aritmtica, e do campo rt [20-16], se a instruo for de acesso memria. Dessa forma, selecionamos qual dos campos da instruo usado para indicar o nmero do registrador a ser escrito. O sinal de controle deste multiplexador denominado RegDest. A Figura 3.10 mostra a adio do bloco de controle da ALU e do multiplexador.
33
0 M U X 1
Somador
4 Inst. [25-21]
Desl. 2 bits
Somador FontePC
Reg # 1 Reg # 2
PC
Endereo
Inst. [20-16]
Instruo [31-0] 0 M U X Inst. [15-11] 1 RegDest
Memria de Instrues
Reg escrito
Endereo
MemReg Dado 1 M U X 0
Registradores
Dado escrito EscReg
Memria de Dados
Dado escrito LerMem
Inst. [15-0]
Oper ALU
Observando a Figura 3.10 podemos atribuir valores a cada uma das linhas de controle, considerando o formato das instrues. A unidade de controle responsvel por gerar estes valores. Ela pode realizar esta tarefa baseada apenas no campo opcode da instruo, exceto para uma delas. A linha de controle FontePC a nica exceo. O valor dessa linha deve ser igual a 1 se a instruo for branch equal (ALU pode decidir sozinha) e a sada Zero da ALU, que usada nos testes de igualdade, for verdadeira. Portanto, para gerar o sinal de controle FontePC, precisamos colocar um sinal vindo da unidade de controle. Este sinal chamado DvC e colocado na entrada de uma porta AND junto com o sinal Zero produzido pela ALU. A Figura 3.11 mostra os 9 sinais que devem ser produzidos pela unidade de controle.
PC + 4
RegDest DvC LerMem MemParaReg ALUOp EscMem ALUFonte EscReg 0 M U X 1
Controle
Desl. 2 bits
Somador
Zero Resultado
ALU
Figura 3.11. Sinais emitidos pela unidade de controle e lgica para armazenamento do PC.
34
Exerccio Mostre, atravs de tabela-verdade, a definio de cada linha de controle (0, 1 ou dont care) para cada um dos opcodes das instrues. Ainda atravs de tabela-verdade, monte a funo de controle, para implementao monociclo, dos valores atribudos s linhas de controle dependendo da instruo. A Tabela 3.3, a seguir, mostra a definio dos sinais de sada produzidos pela unidade de controle para controlar a execuo dos diversos componentes do caminho de dados. Estes sinais so produzidos considerando cada uma das classes de instrues implementadas pela arquitetura exemplo (processador MIPS).
Instruo Tipo R lw sw beq RegDest 1 0 x x ALUFonte 0 1 1 0 MemReg 0 1 x x EscReg 1 1 0 0 LerMem 0 1 0 0 Escmem 0 0 1 0 DvC 0 0 0 1 ALUOp 1 0 0 0 0 0 0 1
Tabela 3.3. Tabela verdade para a definio dos sinais de sada da unidade de controle.
A Tabela 3.4 mostra a funo de controle agora relacionando os sinais de sada da unidade de controle com o cdigo de cada instruo do processador MIPS (entradas). Entrada/Sada Nome Sinal Op 5 Op 4 Entradas Op 3 Op 2 Op 1 Op 0 RegDest ALUFonte MemReg EscReg Sadas LerMem EscMem DvC ALUOp 0 ALUOp 1 Tipo R 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 lw 1 0 0 0 1 1 0 1 1 1 1 0 0 0 0 sw 1 0 1 0 1 1 x 1 x 0 0 1 0 0 0 beq 0 0 0 1 0 0 x 0 x 0 0 0 1 0 1
Tabela 3.4. Tabela verdade para a funo de controle associada ao cdigo das instrues.
35
Por simplicidade, deixamos de abordar at este ponto vrias instrues do conjunto de instrues do processador MIPS. Para exemplificar como podemos estender este projeto para incluir outras instrues, descrevemos nos pargrafos seguintes como inserir uma instruo de desvio incondicional no caminho de dados projetado anteriormente. O formato de uma instruo de desvio incondicional est mostrado na Figura 3.12.
31-26 25-0 endereo
jump
Esta instruo similar a de desvio condicional. Porm, produz o endereo alvo de desvio de forma diferente. Os 2 bits menos significativos so sempre iguais a zero (00). Os prximos 26 bits so fornecidos pela prpria instruo. Os 4 bits mais significativos so obtidos do PC corrente (PC + 4). Assim, o endereo alvo de desvio resultado da combinao de: 4 bits mais significativos do valor PC + 4, que so os bits de 31 a 28; 26 bits do campo imediato da instruo de desvio incondicional; e 2 bits 00. O sinal da unidade de controle DvI ativa o multiplexador que carrega o PC. A Figura 3.13 mostra a insero desta lgica no projeto monociclo.
26
Desl. 2 bits
28
32
1 0 M U X 0
PC + 4
Somador
Inst [25-0]
PC
36
Finalmente, a Figura 3.14 ilustra o todo o caminho de dados, para todas as classes de instrues abordadas, junto com os sinais produzidos pela unidade de controle central e unidade de controle da ALU.
26
Desl. 2 bits
28
32 0 M U X 1
1 M U X 0
DvI
Somador
Desl. 2 bits
Somador
RegDest DvC LerMem Inst. [31-26] MemReg Controle ALUOp EscMem ALUFonte EscReg Inst. [25-21] Reg # 1 Reg # 2 Dado # 2 Reg escrito Dado # 1
PC
Inst. [20-16] 0 M U X 1
ALU
Inst. [15-11]
Registradores
Dado escrito
Memria de Dados
Dado escrito
1 M U X 0
Inst. [15-0]
Oper ALU
Figura 3.14.Caminho de dados completos junto com os sinais emitidos pela unidade de controle.
O projeto monociclo abordado possui um funcionamento correto e todas as instrues so executadas dentro de um nico ciclo de clock. O problema com este projeto sua ineficincia. A explicao para este fato est no tamanho do ciclo de clock utilizado para todas as instrues. Todas as instrues tm o mesmo tamanho de ciclo de clock. Por isso, o tamanho do ciclo deve ser grande o suficiente para suportar o maior atraso relativo aos componentes utilizados por uma determinada instruo. Em geral, as instrues de acesso memria possuem o maior tempo de execuo. Para ter uma noo do desempenho de um projeto monociclo considere a Tabela 3.5. Esta tabela relaciona o tempo de execuo de uma dada instruo (ns) de acordo com unidades funcionais utilizadas no caminho crtico de sua execuo.
37
Classe
Tipo R Load word Store word Branch Jump Busca (2) Busca (2) Busca (2) Busca (2) Busca (2)
Tempo
6 ns 8 ns 7 ns 5 ns 2 ns
Tabela 3.5. Tabela que relaciona o tempo de execuo de instrues X unidades funcionais utilizadas.
Podemos perceber pelos tempos apresentados na Tabela 3.5 que as instrues possuem tempos de execuo bem diferentes dependendo da classe. Por exemplo, a instruo de jump consume de fato somente 2 ns, mas uma nova instruo s pode ser iniciada no prximo ciclo de clock. Como o ciclo tem tamanho de 8 ns, pois este o valor do maior tempo consumido por uma instruo (lw), so desperdiados 6 ns. O impacto da filosofia monociclo no desempenho pode ser desastroso. Este impacto depende da porcentagem de cada classe de instrues na execuo de um programa. As mquinas atuais no so monociclo. Existem outros fatores que contribuem para isso. Como o projeto monociclo pressupe que o ciclo de clock deve ser igual ao do piro caso no podemos usar tcnicas para reduzir os casos mais comuns. Este fato viola o princpio bsico de tornar o caso comum mais rpido. Alm disso, na implementao monociclo cada unidade funcional s pode ser utilizada uma vez a cada ciclo de clock. Sendo assim, necessrio duplicar algumas unidades funcionais. Isto demanda um aumento no custo de implementao. Para solucionar os problemas relacionados ao desempenho e ao custo do hardware, podemos usar tcnicas de implementao que tenham um ciclo de clock menor. Estes ciclos menores podem ser obtidos a partir dos retardos das unidades funcionais bsicas. Assim, vrios ciclos de clock so necessrios para a execuo de cada instruo. As prximas sees analisam este esquema alternativo de implementao, denominado multiciclo. Exerccios 1. Qual o efeito de manter em 0 lgico todos os sinais de controle dos multiplexadores no caminho de dados completo do projeto monociclo? Alguma instruo ainda continua funcionando? Elabore um raciocnio semelhante considerando agora com todos os sinais em 1 lgico. 2. A funo XOR (exclusive-or) utilizada com vrias finalidades. A sada desta funo verdadeira se exatamente uma das entradas verdadeira. Mostre a tabela verdade para a funo XOR com duas entradas e implemente esta funo em um circuito usando portas AND, OR e NOT.
38
3. Considere as seguintes unidades funcionais e seus respectivos tempos de retardo para a nossa implementao monociclo. Busca = 2 ns ALU = 2 ns Acesso a registradores = 1ns Somador PC + 4 = X ns Acesso memria = 2 ns Somador do desvio condicional = Y ns Qual seria o perodo de clock caso: X = 3 e Y = 5; X = 5 e Y = 5; e X = 1 e Y = 8. 4. Suponha que desejamos modificar a arquitetura do conjunto de instrues e que retiramos a capacidade de deslocamento para as instrues de acesso memria. Estas instrues devem se transformar em pseudo-instrues e devem ser implementadas por duas instrues se o deslocamento for diferente de zero. Por exemplo, addi $at, $t1, 104 lw $t0, $at Que mudanas devem ser feitas no caminho de dados monociclo e no controle para que essa arquitetura simplificada possa funcionar?
IR
PC
Endereo Instruo ou Dado Memria Dado escrito
Dado # 1
A R
MDR
Dado # 2
ALU
Registradores
Dado escrito
39
40
EscReg
Reg # 1 Reg # 2 Reg escrito Dado # 2 Dado escrito Dado # 1
0 1 IouD
IR
0 1
1
FonteALU_B
Zero
ALU
MDR
0 1 MemReg
B
4
Registradores
0 1 2 3
Controle ALU
Ext sinal
Desl 2 bits
ALUOp
O caminho de dados multiciclo exige ainda outros acrscimos para suportar os desvios condicionais e incondicionais. Existem trs possveis fontes para o valor a ser escrito no PC: a ALU produz o valor PC + 4 durante o passo de busca da instruo. Este valor pode ser armazenado diretamente no PC; o registrador R armazena o endereo alvo de desvio condicional calculado pela ALU e os 26 ltimos bits do IR, deslocados de 2 bits direita e concatenados com os 4 bits superiores do PC + 4, formam o endereo alvo de desvio incondicional. O PC sempre escrito durante um incremento normal e nos desvios incondicionais. Se a instruo for um desvio condicional, o PC incrementado substitudo pelo endereo alvo de desvio calculado pela ALU, se a condio for verdadeira. Assim, o controle precisa de dois sinais de escrita no PC, que so denominados PCEsc e PCEscCond. Da mesma forma que no projeto monociclo, precisamos adicionar portas lgicas para obter o sinal de escrita no PC, combinando os sinais PCEsc, PCEscCond e Zero (sada da ALU). Para determinar se o PC deve receber o endereo alvo de desvio num desvio condicional utilizamos uma porta AND, tendo como entradas os sinais Zero e PCEscCond. A sada da porta AND combinada, ento, com o sinal PCEsc (sinal de escrita incondicional) numa porta OR. A sada da porta OR conectada ao controle de escrita do PC. A Figura 3.17 mostra o caminho de dados multiciclo completo e sua unidade de controle. Observe os sinais de controle adicionais e o multiplexador para implementar a atualizao do PC.
41
PC
0 1
IR
0 1
1
Zero
Reg escrito
R
ALU
Dado # 2
MDR
0 1
B
4
Dado escrito
Registradores
Ext sinal
0 1 2 3
Controle ALU
Desl 2 bits
Como neste projeto so gastos vrios ciclos de clock diferentes. Dependendo da instruo necessrio um novo conjunto de sinais de controle. As Tabelas 3.6 (1 bit) e 3.7 (2 bits) mostram como estes sinais controlam o caminho de dados. Isto , o que cada sinal de controle determina quando est ativo e inativo. A Tabela 3.6 mostra os sinais de controle de um bit e seus efeitos quando esto ativos e inativos. Da mesma forma, a Tabela 3.7 mostra os sinais de controle de dois bits e seus efeitos.
Sinal RegDest EscReg FonteALU_A LerMem EscMem MemReg IouD IREsc PCEsc PCEscCond Inativo seleciona rt operando o PC dado vem de R PC usado para fornecer endereo seleciona rd Reg geral carregado com dado escrito operando o A Contedo da memria colocado na sada carrega dado na memria dado vem do MDR R usado para fornecer endereo Sada da memria escrita no IR PC atualizado PC atualizado se sada Zero estiver ativa Ativo
42
Sinal ALUOp
Significado
depende do campo func operando o B operando a constante 4 operando vem da extenso de sinal IR operando vem da extenso de sinal IR + 2 bits PC + 4 enviado ao PC endereo alvo de desvio produzido pela ALU (DvC) endereo alvo de desvio enviado ao PC (DvI)
FonteALU_B
00 01 10 11
FontePC
00 01 10
01 00 1 00
43 2. Passo de decodificao e busca do registrador. Neste passo ainda no conhecemos o que a instruo faz. Assim, s podemos realizar aes que sejam aplicveis a todas as classes de instrues. Neste passo enquanto a instruo est sendo decodificada podemos: a) supondo instrues do tipo R - ler os registradores rs e rt e armazen-los nos registradores temporrios A e B. A = Reg [IR[25-21]]; B = Reg [IR[20-16]]; b) supondo uma instruo de desvio condicional - calcular o endereo alvo de desvio. R = PC + extenso de sinal (IR[15-0] << 2); Sinais envolvidos Fonte ALU_A 0 (PC) FonteALU_B 11 (extenso de sinal deslocada) ALUOp 00 (soma) Aps este ciclo de clock a ao a ser realizada depende do contedo da instruo (decodificao). 3. Execuo. Clculo do endereo de acesso memria / efetivao do desvio incondicional. Neste ciclo a operao do caminho de dados fica determinada exclusivamente pela classe de instruo. A ALU est operando sobre os dados preparados no passo 2, realizando uma de suas trs funes. A funo depende da classe de instrues. Acesso memria R = A + extenso de sinal (IR[15-0]); Sinais envolvidos FonteALU_A 1 FonteALU_B 10 (seleciona como entrada extenso de sinal) ALUOp 00 (soma) Instrues do Tipo R R = A op B; Sinais envolvidos FonteALU_A 1 FonteALU_B 00 (seleciona B) ALUOp 10 (seleciona campo func que determina a operao)
44
Desvio Condicional Se (A = = B) PC R; Sinais envolvidos FonteALU_A 1 FonteALU_B 00 ALUOp 01 (subtrao) PCEscCond 1 FontePC 01 ( PC R) Desvio Incondicional PC PC (IR[31-28] | (IR[25-0] << 2); Sinais envolvidos PCEsc 1 FontePC 10 ( PC R) 4. Final da execuo das instrues de acesso memria e do Tipo R. Durante este passo uma instruo lw ou sw faz seu acesso memria, e uma instruo do tipo R escreve seu resultado no banco de registradores. Quando um valor recuperado da memria ele deve ser armazenado no MDR para ser acessado no prximo ciclo de clock. Acesso memria MDR = Memria[R]; Sinais envolvidos LerMem 1 lw ou Memria = R = B; EscMem IouD 1 sw 1 ( vem da ALU)
Instrues do Tipo R Reg [IR[15-11]] = R; Sinais envolvidos RegDest 1 EscReg 1 MemReg 0 5. Final do passo de leitura da memria. Reg [IR[20-16]] = MDR; Sinais envolvidos RegDest 0 EscReg 1 MemReg 1
45
A partir desta seqncia podemos determinar o que a unidade de controle precisa se realizar em cada ciclo de clock. Implementao do Ciclo de Clock No controle do caminho de dados multiciclo devem ser especificados os valores que os sinais devem assumir em qualquer ciclo de clock e os valores do prximo passo na seqncia de execuo. Existem duas tcnicas diferentes para especificar o controle. A primeira baseia-se em uma mquina de estados finitos, cuja representao pode ser feita graficamente. A segunda tcnica a microprogramao, j abordada no incio deste captulo. Ambas as tcnicas possuem representaes que podem ser implementadas usando portas lgicas, ROMs ou PLAs. A seguir abordamos a tcnica baseada em mquina de estados finitos.
FonteALU_B 11 ALUOp 00
Referncia memria
Tipo R
Desvio
Desvio incondicional
46
Mquina de Estados Finitos Cada uma das mquinas de estados finitos, para o passo de execuo, de cada uma das classes de instrues pode ser vista, a seguir, nas Figuras 3.19 (acesso memria), 3.20 (tipo R), 3.21 (desvio condicional) e 3.22 (desvio incondicional). Acesso memria
Do estado 1
Estado 2
FonteALU_A 1 FonteALU_B 10 ALUOp 00
Clculo do endereo de acesso memria
Op = lw Estado 3
LerMem 1 IouD 1
Op = sw Estado 5
EscMem 1 IouD 1
Estado 4
Para o estado 0 Figura 3.19 Representao da mquina de estados finitos para instrues de acesso memria.
Op = func
Estado 7
Para o estado 0 Figura 3.20. Representao da mquina de estados finitos para instrues do tipo R.
47
Desvio Condicional
Do estado 1
Estado 8
Op = beq
Para o estado 0 Figura 3.21. Representao da mquina de estados finitos para instrues de desvio condicional.
Desvio Incondicional
Do estado 1
Estado 9
PCEsc 1 FontePC 10
Op = j
Para o estado 0 Figura 3.22. Representao da mquina de estados finitos para instrues de desvio incondicional.
Exerccios 1. Mostre como a mquina de estados finitos completa combinando todos os passos de execuo de todas as classes de instrues abordadas. 2. Acrescente ao caminho de dados multiciclo a instruo addi. Verifique a necessidade de algum componente de hardware adicional e sinais de controle. Mostre as modificaes necessrias na mquina de estados finitos. 3. Considere o mesmo enunciado da questo anterior e acrescente a instruo jal (jump and link) ao projeto multiciclo. 4. Mostre como a instruo jr (jump register) pode ser implementada simplesmente com algumas modificaes na mquina de estados finitos completa (lembre-se que $zero = 0 e est mapeado no registrador $0).
31-26 25-21 rs 20-16 rt 15-11 rd 10-6 shmat 5-0 func
jr
31-26
jal
31-26
25-21 rs
20-16
addi
rt