Baixe o app para aproveitar ainda mais
Prévia do material em texto
Arquitetura e Organização de Computadores O Processador: controle Parte II Prof. Sílvio Fernandes UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO DEPARTAMENTO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIA DA COMPUTAÇÃO 1 Uma Implementação multiciclo Implementação multiciclo Cada instrução dividida em etapas correspondentes às operações das unidades funcionais necessárias Cada etapa na execução levará 1 ciclo de clock Uma unidade funcional pode ser usada mais de 1 vez por instrução, desde que seja usada em diferentes ciclos de clock Unidade funcionais podem ser compartilhadas, reduzindo o hardware 2 Uma Implementação multiciclo Visão alto nível do caminho de dados multiciclo 3 Uma Implementação multiciclo Principais diferenças da implementação multiciclo Uma única unidade de memória para dados e instruções Uma única ALU, em vez de uma ALU e 2 somadores Um ou mais registradores são adicionados após cada unidade funcional para conter a saída dessa unidade até o valor ser usado em um ciclo de clock subsequente No final de um ciclo de clock, todos os dados usados nos ciclos subsequentes precisam ser armazenados em um elemento de estado 4 Uma Implementação multiciclo Dados usados pelas instruções subsequentes são armazenados em um dos elementos de estado visíveis ao programador: o banco de registradores, o PC ou a memória Registradores temporários acrescentados Reg. de instrução (IR) e reg. de dados da memória (MDR) para salvar a saída da memória Os reg. A e B para conter os valores vindos do banco de registradores antes da ALU O reg. ALUOut contém a saída da ALU 5 Uma Implementação multiciclo Todos os registradores exceto o IR contém dados apenas entre um par de ciclos e, portanto, não precisarão de um sinal controle de escrita Com as unidades funcionais compartilhadas é preciso incluir outros multiplexadores e espandir os já existentes Substituir as 3 ALUs por uma só 6 Uma Implementação multiciclo Manipular as entradas adicionais exige 2 mudanças 1. Um multiplexador para escolher entre A e PC para a 1ª entrada da ALU 2. O multiplexador da 2ª entrada da ALU deve acrescentar mais 2 valores para serem escolhidos: a constante 4 e o campo offset com sinal estendido e deslocado 7 Uma Implementação multiciclo Caminho de dados multiciclo MIPS 8 Uma Implementação multiciclo MIPS multiciclo com linhas de controle 9 Uma Implementação multiciclo Com a instrução jump e branch, há 3 origens possíveis para o valor a ser escrito no PC 1. A saída da ALU (PC+4); esse valor deve ser armazenado diretamente no PC 2. O registrador ALUOut, que é onde armazenaremos o endereço de desvio após ele ser calculado 3. Os 26 bits menos significativos do IR deslocados de 2 à esquerda e concatenado com os 4 bits mais significativos do PC incrementado, que é a origem quando a instrução é um jump 10 Uma Implementação multiciclo O PC é escrito incondicionalmente e condicionalmente Durante um incremento normal e para jumps, o PC é escrito incondicionalmente Se a instrução é um desvio condicional, o PC incrementado é substituído pelo valor em ALUOut apenas se os 2 registradores designados forem iguais Nossa implementação usa 2 sinais de controle separados PCWrite que causa a escrita incondicional no PC PCWriteCond que causa a escrita condicional se a condição de desvio também for verdadeira 11 Uma Implementação multiciclo 12 13 Nome do sinal Efeito quanto inativo Efeito quanto ativo RegDst O número do registrador destino para a entrada Registrador para escrita vem o campo rt O número do registrador destino para a entrada Registrador para escrita vem do campo rd RegWrite Nenhum O registrador de uso geral selecionado pelo no. na entrada Registrador para escrita é escrito com o valor da entrada Dados ALUSrcA O 1º operando da ALU é o PC O 1º operando da ALU vem do reg. A MemRead Nenhum O conteúdo da mem. no local especificado pela entrada Endereço é colocado na saída Dados da mem. MemWrite Nenhum O conteúdo da mem. no local especificado pela entrada Endereço é substituído pelo valor na entrada Dados para escrita MemtoReg O valor enviado para a entrada Dado do banco de registradores vem de ALUOut O valor enviado para a entrada Dado do banco de registradores vem de MDR IorD O PC é usado para fornecer o endereço para unidade de mem. ALUOut é usado para fornecer o endereço para unidade de mem. IRWrite Nenhum A saída da mem. é escrita no IR PCWrite Nenhum O PC é escrito; a origem é controlada por PCSource PCWriteCond Nenhum O PC é escrito se a saída Zero da ALU também estiver ativa Ações dos sinais de controle de 1 bit 14 Nome do sinal Valor (Binário) Efeito ALUOp 00 A ALU realiza uma operação de adição 01 A ALU realiza uma operação de subtração 10 O campo funct da instrução determina a operação da ALU ALUSrcB 00 A 2ª. entrada da ALU vem do reg. B 01 A 2ª. entrada da ALU é a constante 4 10 A 2ª. entrada da ALU são os 16 bits menos significativos com sinal estendido do IR 11 A 2ª. entrada da ALU são os 16 bits menos significativos com sinal estendido do IR deslocados de 2 bits para a esquerda PCSource 00 A saída da ALU (PC+4) é enviada ao PC para escrita 01 O conteúdo de ALUOUt (endereço de destino de desvio) é enviado ao PC para escrita 10 O endereço de destino do jump (IR[25:0]) deslocado de 2 bits para esquerda e concatenado com PC+4[31:28] é enviado ao PC para escrita Ações dos sinais de controle de 2 bit Uma Implementação multiciclo Agora podemos olhar o que deve acontecer em cada ciclo de clock da execução multiciclo Cada instrução MIPS precisa de 3 a 5 das etapas a seguir 1. Etapa de busca da instrução Buscar a instrução da memória e calcular o endereço da próxima instrução sequencial IR <= Memória[PC]; PC <= PC + 4; 15 Uma Implementação multiciclo 1. Etapa de busca da instrução Para implementar esta etapa, precisamos ativar os sinais de controle MemRead e IRWrite e colocar IorD em 0 para selecionar o PC como origem do endereço Para incrementar PC em 4 precisamos colocar o sinal ALUSrcA em 0, o sinal ALUSrcB em 01 e ALUOp em 00 Para atualizar PC precisamos colocar PCSource em 00 e ativa PCWrite O incremento de PC e o acesso à memória podem ocorrer em paralelo 16 Uma Implementação multiciclo 2. Etapa de decodificação e busca de reg. Se a instrução tiver 2 registradores como entrada, eles estarão sempre nos campos rs e rt, se a instrução for um desvio, o offset será sempre os 16 bits menos significativos: A <= Reg[IR[25:21]]; B <= Reg[IR[20:16]]; ALUOut <= PC + (estende-sinal (IR[15-0]) << 2); Isso exige colocar ALUSrcA em 0 (PC enviado para ALU) ALUSrcB em 11(offset de sinal estendido enviado para ALU) ALUOp em 00 (ALU realiza soma) Acesso ao banco de registradores e o cálculo do destino do desvio ocorrem em paralelo 17 Uma Implementação multiciclo 3. Execução, cálculo do endereço de memória ou conclusão do desvio Especificamos a ação a ser tomada de acordo com a classe de instrução Referência à memória ALUOut <= A + estende-sinal(IR[15:0]); Colocar ALUSrcA em 1 (1ª entrada da ALU seja A) ALUSrcB em 10 (sinal estendido seja a 2ª entrada da ALU) ALUOp em 00 (fazendo a ALU ser somada) 18 Uma Implementação multiciclo 3. Execução, cálculo do endereço de memória ou conclusão do desvio Especificamos a ação a ser tomada de acordo com a classe de instrução Instrução lógica ou aritmética (tipo R) ALUOut <= A op B; ALUSrcA em 1 (1ª entrada da ALU é A) ALUSrcBem 00 (2ª entrada da ALU é B) ALUOp em 10 (o campo funct é usado para determinar as definições do sinal de controle da ALU) 19 Uma Implementação multiciclo 3. Execução, cálculo do endereço de memória ou conclusão do desvio Especificamos a ação a ser tomada de acordo com a classe de instrução Desvio if (A == B) PC <= ALUOut; ALUSrcA em 1 (1ª entrada da ALU é A) ALUSrcB em 00 (2ª entrada da ALU é B) ALUOp em 01 (fazendo a ALU subtrair) PCWriteCond em 1 (para atualizar PC se a saída Zero da ALU estiver ativa) PCSource em 01 (o valor escrito no PC virá de ALUOut, que contém o endereço de destino do desvio do ciclo anterior 20 Uma Implementação multiciclo 3. Execução, cálculo do endereço de memória ou conclusão do desvio Especificamos a ação a ser tomada de acordo com a classe de instrução Jump PC <= {PC[31:28], (IR[25:0], 2’00)}; PCSource é atualizado para direcionar o endereço do jump para o PC PCWrite em 1 21 Uma Implementação multiciclo 4. Etapa de acesso à memória ou conclusão de instrução tipo R Referência à memória MDR <= Memória[ALUOut]; ou Memória[ALUOut] <= B; Para LOAD MemRead em 1 IorD em 1 (endereço de mem. vem da ALU e não do PC) Para STORE MemWrite em 1 22 Uma Implementação multiciclo 4. Etapa de acesso à memória ou conclusão de instrução tipo R Instruções lógicas e aritméticas (tipo R) Reg[IR[15:11]] <= ALUOut; RegDst em 1(usar o campo rd com entrada do banco de registrados a ser escrita) RegWrite em 1 MemtoReg em 0 (saída da ALU seja escrita, em vez da saída de dados da memória) 23 Uma Implementação multiciclo 5. Etapa de conclusão da leitura da memória Os loads são completados escrevendo novamente o valor da memória Reg[IR[20:16]] <= MDR; 24 Resumo das etapas 25 Etapa Ação para instruções tipo R Ação para instruções de acesso à mem. Ação para desvios Ação para jumps Busca instrução IR <= Memória[PC]; PC <= PC + 4; Decodificação da instrução e busca dos registradors A <= Reg[IR[25:21]]; B <= Reg[IR[20:16]]; ALUOut <= PC + (estende-sinal (IR[15-0]) << 2); Execução, cálculo do endereço ou conclusão do desvio/jump ALUOut <= A op B; ALUOut <= A + estende- sinal(IR[15:0]); if (A == B) PC <= ALUOut; PC <= {PC[31:28], (IR[25:0], 2’00)}; Acesso à memória ou conclusão de instrução tipo R Reg[IR[15:11]] <= ALUOut; MDR <= Memória[ALUOut]; ou Memória[ALUOut] <= B; Conclusão da leitura da memória Reg[IR[20:16]] <= MDR; Definindo o controle Agora que determinamos quais são os sinais de controle e quando eles precisam ser ativados, podemos implementar a unidade de controle A 1ª técnica é baseada em máquina de estados finitos A 2ª técnica, chamada microprogramação, usa uma representação de programação para o controle 26 Definindo o controle Uma máquina de estados consiste em um conjunto de estados e diretrizes sobre como mudar de estado As diretrizes são definidas por uma função de próximo estado, que mapeia o estado atual e as entradas para um novo estado A implementação de uma máquina de estados finitos em geral considera que todas as saídas que não são explicitamente ativadas estão inativadas 27 Definindo o controle O controle de estados finitos basicamente corresponde às 5 etapas de execução 28 Início Busca/decodificação da instrução e busca dos registrdores Instruções de acesso a memória Instruções tipo R Instruções de branch Instruções de jump Definindo o controle Busca e decodificação para todas instruções 29 Definindo o controle Instruções referência à memória 30 Definindo o controle Instruções do tipo R 31 Definindo o controle Instruções de branch 32 Definindo o controle Instruções de jump 33 Definindo o controle 34 Definindo o controle Arquitetura do controle 35 Exceções Uma das partes mais difíceis do controle é implementar exceções e interrupções Uma exceção é um evento inesperado dentro do processador; o overflow aritmético é um exemplo Uma interrupção é um evento que também causa uma mudança inesperada no fluxo de controle mas vem de fora do processador; interrupções são usadas pelos dispositivos de E/S para se comunicarem com o processador 36 Exceções Exemplos de interrupções/exceções 37 Tipo de evento Origem Terminologia MIPS Requisição de dispositivo de E/S Externa Interrupção Chamada ao SO pelo programa de usuário Interna Exceção Overflow aritmético Interna Exceção Uso de uma instrução indefinida Interna Exceção Mal-funcionamento do hardware Ambas Exceção ou interrupção Exceções Como as exceções são tratadas Os 2 tipos de exceções que nossa implemetação atual pode gerar são a execução de uma instrução indefinida e um overflow aritmético A ação básica é salvar o endereço da instrução problemática no contador de programa para exceções (EPC) e transferir o controle para o SO Para que o SO trate a exceção, ele precisa conhecer o motivo da exceção, além da instrução que causou O método usado no MIPS é incluir um registrador de status (Cause) Um outro método é usar interrupções vetorizadas 38 Exceções Para os 2 tipos de exceções 39 Tipo de exceção Endereço do vetor de exceções (em hexa) Instrução indefinida C000 0000hex Overflow aritmético C000 0020hex Exceções No MIPS precisamos acrescentar 2 registradores EPC: reg. de 32 bits usado para conter o endereço da instrução afetada (esse reg. é necessário mesmo quando as exceções são vetorizadas) Cause: usado para registrar a causa da exceção. No MIPS, esse reg. possui 32 bits, onde o bit menos significativo codifica as duas origens de exceção possíveis: instrução indefinida = 0 e overflow = 1 Precisamos incluir os sinais de controle EPCWrite e CauseWrite para fazer com que os novos registradores sejam escritos Precisamos de 1 bit (IntCause) para definir o bit menos significativo do reg. Cause 40 Exceções Finalmente, precisaremos ser capazes de escrever no PC o endereço de exceção, que é o ponto de entrada do SO para o tratamento da exceção No MIPS, esse endereço é 8000 0180hex Então PCSource pode ser colocado em 11bin para selecionar esse valor Como PC é incrementado em 4, para salvar o endereço da instrução problemática em EPC, antes deve ser subtraído 4 do valor de PC 41 Exceções 42 Exceções 43 Verifique você mesmo 1. Verdadeiro ou falso: como a instrução de jump não depende dos valores dos registradores ou do cálculo do endereço de destino do desvio, ela pode ser completada durante o segundo estado, em vez de esperar até o terceiro 2. Verdadeiro, falso ou talvez: o sinal de controle PCWriteCond pode ser substituído por PCSource[0]. 44 Respostas 1. Falso 2. Talvez: se o sinal PCSource[0] estiver sempre com valor zero quando ele é um don’t care (que é a maioria dos estados), então, ele será idêntico a PCWriteCond. 45 Referências PATTERSON, D. A. ; HENNESSY, J.L. Organização e projeto de computadores – a interface hardware software. 3. ed. Editora Campus, 2005. STALLINGS, W. Arquitetura e organização de computadores: projeto para o desempenho. 8. ed. Prentice Hall, 2009. 46
Compartilhar