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 quando o circuito está parado • Corrente de fuga (leakage) – Dependente de tecnologia – Não tem solução em alto nível • Consumo dinâmico CD CV f 2 – 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 Potência dinâmica total (aproximação) Vdd 2 carga P IN Pdyn = CL .Vdd.f .TR OUT N CL Gnd Onde, CL = capacitância de carga Vdd = tensão de entrada f = frequência do circuito TR = toggle rate (trans/s) Fontes de consumo de energia • Short-circuit Power – Ambos transistores estão conduzindo ao mesmo tempo Vdd Conecta Vdd a Gnd – “inútil” por um curto período P IN OUT N CL Gnd 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 ctrl clk D Q Latch 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ó habilitalos 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