Redução do Consumo de Energia MO801/MC912
Motivação Prolongar a duração de bateria Evitar problemas de aquecimento Minimizar tamanho de dissipador Redução de área Redução de peso Garantir usabilidade Ex.: Sensação de teclado quente
Motivação A Lei de Moore continua prevalecendo, com o número de transistores dobrando a cada 18 meses
Motivação Fonte: Intel
Motivação Fonte: Intel
Motivação Fonte: Intel
Como a energia é gasta? Consumo estático Consumo dinâmico Consumo quando o circuito está parado Corrente de fuga (leakage) Dependente de tecnologia Não tem solução em alto nível Consumo dinâmico C e V são dependentes da tecnologia Os outros dois parâmetros são relacionados com a implementação
Fontes de consumo de energia Contribuição Switching power (~ 70%-90%) Leakage power (~ 5%-25%) Short-circuit power (~ 5%)
Fontes de consumo de energia Switching power cargas e descargas das capacitâncias na saída do gate IN OUT V dd P N Gnd C L Potência dinâmica total (aproximação) P dyn C L V dd 2 f = TR . carga C L V dd f Onde, TR = frequência do circuito = capacitância de carga = tensão de entrada = toggle rate (trans/s) descarga O chaveamento ocorre da seguinte maneira: digamos que neste gate IN esteja inicialmente em “0”. Então o transistor de baixo (tipo N) está desligado, e o de cima (tipo P) está ligado, ou seja está conduzindo, desta forma a capacitância CL em OUT é carregada. Agora digamos que IN mude para “1”. Desta forma o transistor P pára de conduzir, ele fecha, e o transitor tipo N (ligado ao terra) começa a conduzir. Desta forma a capacitância CL de OUT é descarregada para Gnd. E é desta forma que o circuito consome potência, basicamente. E a fórmula básica para uma aproximação no consumo de potência dinâmica é a seguinte.
Fontes de consumo de energia Short-circuit Power Ambos transistores estão conduzindo ao mesmo tempo “inútil” IN OUT V dd P N Gnd C L Conecta Vdd a Gnd por um curto período Tudo bem, mas um pequeno problema ocorre ao circuito chavear: o processo não é instantâneo, IN tem um tempo para transicionar Entre “0” e “1”. E neste meio tempo, até IN chavear completamente, há um pequeno tempo no qual ambos os transistores estão conduzindo, Ocorrendo uma ligação direta entre Vdd e Gnd. E isso consome potência, e é chamado de curto-circuito.
Técnicas para redução do consumo de energia Uso de latches Instanciação direta de componentes Codificação explícita de estados Redução de glitches Clock gating
Uso de latches Úteis para evitar transições indesejadas Podem gerar outros problemas Condições de corrida Análise de temporização estática Checagem de equivalência de circuitos Dois latches podem ser usados para gerar um flip-flop O uso de latch tolera a existência de clock skew
Instanciação direta de componentes Algumas bibliotecas de tecnologias fornecem componentes com consumo de energia menor Tente utiliza-los sem gerar dependência de tecnologia
Codificação explícita de estados Especificar os valores dos tipos enumerados Cada ferramenta oferece uma forma de especificar explicitamente a codificação Também é possível escolher a codificação globalmente Trocar tipos enumerados por constantes Perda de legibilidade
Glitch Glitches são transições temporárias, oscilações Ex.: A <= B xor C Se B=0 e C=0 => A =0 Se B e C mudam para 1, A deveria ficar em 0 Mas B pode transitar primeiro que C e A ficar com 1 por um intervalo pequeno Glitches podem se propagar pelo circuito
Como remover glitches Planejar as transições nas portas lógicas Ajustar os valores dos estados das máquinas de estado Utilizar técnicas de pipeline Colocar registradores no meio do caminho Balancear o atraso em todos os componentes Usar equações na forma de soma de produtos
Como remover glitches Reestruturar a ordem dos blocos de um circuito Pode reduzir a propagação dos glitches Utilizar o sinal propenso a sofrer glitch no final do período de clock Atenção: glitch não é eterno
Clock gating Técnica muito utilizada Suspender o clock numa parte do circuito Reduz as transições Gera um novo sinal de clock baseado no anterior e num sinal de controle Cuidado com clock skew
Como fazer clock gating? Colocar uma porta AND ou OR no clock com um sinal de controle Pode gerar spikes (pulsos) extras no clock Utilizar um latch, habilitado pelo clock para guardar o sinal de Clock Enable antes de fazer um AND Manter os componentes próximos Latch clk ctrl D Q
Quando fazer clock gating? Quando o ganho no consumo de energia for superior ao gasto extra Ao invés de fazer um clock por componente, agrupe-os e forneça um clock novo apenas Quebre módulos que possuam condições diferentes em sub-módulos para aplicar clock gating separadamente
Problemas com clock gating Temporização As portas lógicas alteram a forma de onda do clock, aumentando o tempo de subida e/ou descida Em geral, o uso de clock gating deveria afetar a árvofe de distribuição de clock Testabilidade O uso de múltiplos domínios de clock dificulta os testes Sugestão: habilitar os clocks nos testes (???)
Máquinas de Estados Dois pontos de otimização Lógica Nos elementos de armazenamento
Clock gating para FSM Evitar recalcular o próximo estado quando as entradas da lógica forem iguais Exemplo: Máquina de estados que verifica se um contador estourou Na maior parte do tempo, o contador estará no intervalo válido As entradas serão as mesmas O estado interno será o mesmo Por que ativar os FF nesse caso?
Codificação de estados Quando a máquina percorre vários estados seqüencialmente, procure utilizar código de gray Dependente da máquina e do conhecimento do projetista Codificação one-hot Muito utilizada em FPGAs Apenas um dos bits do estado está ativo por vez Boa alternativa para até 10 estados Alterar a codificação modifica a lógica de saída Use isso a seu favor
Particionamento de máquinas de estados Criar n máquinas de estados no lugar de uma Apenas uma máquina estará ativa a cada instante, as outras estarão num estado IDLE Somente a máquina ativa precisa de clock
Datapaths Muita energia é gasta fazendo computações desnecessárias 3 técnicas úteis Pré-computar valores Proteção de partes da lógica Control-signal gating
Pré-computar valores Consiste em quebrar o circuito em duas partes Pré-computar o valor da primeira parte Usar o valor pré-computado para habilitar a segunda parte Exemplo Quebrar um comparador de magnitude em duas partes: bits mais e menos significativos Somente se os mais significativos forem iguais é que os menos significativos serão comparados Atenção para o atraso gerado!
Proteção de partes da lógica Colocar latches nas entradas e só habilita-los se as saídas realmente forem necessárias no circuito Exemplo Colocar dois latches nas entradas de um somador e só habilita-los quando a saída do somador for ser utilizada
Control-signal gating Similar a clock gating, só que para sinais de controle Somente habilitar sinais de controle que sejam relevantes para a operação Uma transição num sinal de controle, em geral, leva a várias transições no circuito de destino Manter os sinais de controle estáveis reduz o consumo de energia
Codificação de barramentos Barramentos gastam MUITA energia Muitas transições => muita energia Existem codificações alternativas para os valores dos barramentos Inversão dos sinais Auto-incremento Recodificação
Inversão dos sinais Consiste em incluir um sinal extra no barramento (INV) O próximo valor poderá ser enviado com todos os bits invertidos se assim gerar menos transições Isso é indicado pelo sinal INV Serve para endereços e dados
Auto-incremento Incluir um novo sinal no barramento de endereços (INC) Se o próximo valor for exatamente o valor atual + 1, não alterar o barramento e ativar o sinal INC Existem variações com incrementos maiores que 1
Recodificação Se uma seqüência de valores aparece sempre no barramento, procure recodificá-la para gastar menos energia