ESTIMAÇÃO E CÁLCULO DE POTÊNCIA NO INÍCIO DO FLUXO DE PROJETO USANDO SYSTEMC André M. Dantas, Monica M. Pereira, Ivan S. Silva e Luigi Carro1 Departamento de Informática e Matemática Aplicada - UFRN Campus Universitário – Lagoa Nova – 59.072-970 – Natal – RN – Brasil 1 Instituto de Informática – Universidade Federal do Rio Grande do Sul (UFRGS) Caixa Postal 15064 – 91.501-970 – Porto Alegre – RS – Brasil {amdantas, monica}@ciencomp.com.br, [email protected] e [email protected] SUMMARY Nowadays the estimation of the power consumed by embedded systems in early stages of the design becomes hugely necessary. Specifically in portable systems the designer needs to estimate and maximize the battery lifetime. Whoever, traditionally the design flows wait more accurate models of the embedded systems to proceed the power consumption evaluation. This paper presents the implementation of a methodology to estimates the power consumption of an embedded system described in the SystemC hardware description language. The utilization of SystemC language using the methodology presented make possible to estimate the power consumption very early at the beginning of the simulation and verification of the system description and functionality. RESUMO Os requisitos dos sistemas embarcados vêm progressivamente abrangendo bem mais que o simples processamento correto, a prioridade também tem sido direcionada para os aspectos de consumo de potência. Este trabalho tem como finalidade apresentar uma maneira de implementar técnicas de cálculo de potência aplicadas à uma das linguagem de descrição de hardware mais utilizadas no mercado, o SystemC. Procurando prover simplicidade e praticidade ao projetista, ao qual será necessário apenas algumas alterações nas suas descrições originais para obter a simulação e os resultados estimados. A utilização dessas técnicas pode significar buscas para novas soluções ainda dentro do espaço de projeto. ESTIMAÇÃO E CÁLCULO DE POTÊNCIA NO INÍCIO DO FLUXO DE PROJETO USANDO SYSTEMC André M. Dantas, Monica M. Pereira, Ivan S. Silva e Luigi Carro1 Departamento de Informática e Matemática Aplicada - UFRN Campus Universitário – Lagoa Nova – 59.072-970 – Natal – RN – Brasil 1 Instituto de Informática – Universidade Federal do Rio Grande do Sul (UFRGS) Caixa Postal 15064 – 91.501-970 – Porto Alegre – RS – Brasil {amdantas, monica}@ciencomp.com.br, [email protected] e [email protected] RESUMO Os requisitos de projeto dos sistemas embarcados vêm progressivamente abrangendo aspectos que rotineiramente só podem ser definitivamente avaliados quando o produto encontra -se pronto. A cada dia é mais importante a avaliação do consumo de potência apresentado por um produto em desenvolvimento. Este artigo apresenta a aplicação de uma metodologia de cálculo da potência consumida por um sistema embarcado quando descrito na linguagem SystemC. Esta metodologia, quando aplicada a uma das atualmente mais utilizadas linguagens de descrição de hardware, oferece simplicidade, praticidade e maior produtividade ao projetista. Neste artigo a metodologia e sua aplicação são apresentadas juntamente com estudos de caso e comparações com outra aplicação da mesma metodologia. 1. INTRODUÇÃO O uso de descrições em alto nível de hardware tem se tornado cada vez mais importante para garantir a implementação mais adequada aos sistemas integrados de um modo geral. O surgimento de linguagens de alto nível especialmente projetadas para a descrição de hardware permitiu que sistemas inteiros pudessem ser descritos e simulados, conferindo maior produtividade as equipes de projetistas. Por outro lado esta produtividade adicional tornou possível a estas mesmas equipes, agregar, ainda nas fases iniciais do projeto, preocupações que vão além da simples correção do sistema descrito. Para alguns sistemas, os requisitos vão além dos tradicionais compromissos entre custo e desempenho. No caso de sistemas embarcados, como câmeras fotográfica digitais, telefones celulares, mp3 players, entre outros, a preocupação com a vida útil da fonte de alimentação está cada vez maior. Isso significa que a potência consumida por esses sistemas precisa ser sempre a menor possível. Ter o conhecimento de quanta potência o sistema consome, ou até mesmo quais partes do sistema são as maiores responsáveis por esse consumo, pode ser fundamental para o desenvolvimento de novas soluções de melhor desempenho, neste aspecto, ainda na fase de exploração do espaço de projeto. Este trabalho apresenta a aplicação em SystemC de uma metodologia de calculo da potência consumida por um sistema descrito nesta linguagem. Para tanto são aplicadas técnicas já utilizadas por alguns simuladores dessa categoria [10]. Este artigo está organizado em 6 seções. Na seção 2 encontra-se uma breve explanação sobre as linguagens de descrição de hardware. Na seção seguinte (3) é apresentada uma breve motivação para o cálculo do consumo de potência a partir de descrições de alto nível dos projetos. A Seção 4 trata de trabalhos já conhecidos com essa função. A Seção 5 apresenta X estudos de caso e os resultados obtidos. Por último na seção 6 encontram-se as conclusões e algumas considerações finais. 2. DESCRIÇÃO DE HARDWARE Logo no surgimento das linguagens e ferramentas de descrição de hardware pouca ou quase nenhuma facilidade adicional, além da facilidade de descrição e simulação era oferecida. A síntese veio permitir que os sistemas antes descritos como forma de documentação, pudessem ser implementados tendo a descrição com importante fonte de informação, definição e estabelecimento de requisitos. As dificuldades encontradas eram, dentre outras, o uso dos limitados diagramas esquemáticos, que se fundamentavam na construção do sistema a partir de componentes básicos (esquema bottom-up), e a grande dificuldade de manipular ferramentas de simulação. Tais problemas foram 1 contornados com o advento das Linguagens de Descrição de Hardware (ou HDL em inglês) que trouxeram ferramentas que possibilitavam projeto em níveis mais altos de abstração. Com a necessidade crescente de otimizar os principais requisitos dos sistemas, tais como, custo, desempenho, consumo de potência e tempo de projeto, é que a prática da descrição de hardware ganhou mais importância. Isso devido à simplicidade cada vez mais evidente do uso de linguagens especializadas, além de permitir a evolução do projeto a partir de testes simulados, antes mesmo da confecção do hardware. Existe no mercado algumas opções interessantes de linguagem de descrição de hardware, dentre elas o Verilog, VHDL e SystemC. 2.1 Verilog Baseia-se na descrição de módulos, que são decompostos em outros módulos até chegar a circuitos elementares ou elementos de biblioteca. Verilog permite aos projetistas expressarem com módulos comportamentais, deixando os detalhes da implementação para outras etapas do projeto [1]. Dessa forma, permite vários níveis de detalhamento, atendendo a necessidade de cada sistema. 2.2 VHDL VHDL (Very High Speed Integrated Circuit Hardware Description Language) foi originalmente utilizada para simulação e documentação, sendo posteriormente adotada para a síntese automatizada de sistemas digitais. O fato de ser um padrão aberto permitiu o intercâmbio de descrições entre várias ferramentas e sistemas de apoio ao projeto, fazendo com que se seja hoje muito usada em projetos de hardware [2]. 2.3 SystemC SystemC é um conjunto de definições de classes C++, bem como uma metodologia para o uso destas definições e classes [3]. Suporta o co-design do hardware-software e a descrição de sistemas complexos que consistem de componentes de software e hardware. Pode-se dizer que o SystemC cria uma "especificação executável" de um sistema [4]. Essa especificação executável prove grandes benefícios, tais como evitar inconsistências e erros e garantir a completude do sistema; assegurar uma interpretação não ambígua para a especificação do sistema; verificar a funcionalidade do sistema antes do início da sua implementação; criar modelos de performance do sistema, ou validar a performance do sistema. Outra importante qualidade do SystemC é utilizar-se do paradigma da orientação a objeto e as macros do C++ que permitem estender a linguagem, sem mudar a sua sintaxe. A descrição dos módulos e do sistema em SystemC baseia-se na estrutura ilustrada na figura 1. MÓDULO MÓDULO MÓDULO modulo.cpp modulo.h ARQUITETURA main.cpp Figura 1. Estrutura dos sistemas em SystemC Cada módulo possui sua descrição dividida em dois arquivos, o cabeçalho (modulo.h) que define a interface (portas de entrada e saída, processos e variáveis do módulo) e o principal (modulo.cpp) que define o comportamento das interfaces (como os processos são implementados). No arquivo principal da descrição do sistema (main.cpp) são instanciados cada módulo e os sinais que os interligam. Apesar de todas as facilidades oferecidas, o SystemC não provê mais que a descrição e a simulação do hardware. Tanto nela como nas outras HDLs citadas anteriormente, ainda existe a deficiência de não abranger diretamente o consumo de potência pela arquitetura descrita. 3. CÁLCULO DE POTÊNCIA Com a crescente popularização dos sistemas embarcados, a estimativa do consumo de potência de um sistema vem se tornando prática cada vez mais comum em projetos de hardwares dessa categoria [5] [6] [7]. Sobretudo quando esse estudo é realizado antes mesmo da implementação, permitindo ao projetista avaliar o gasto da potência do seu sistema desde o início do projeto. O tamanho ou qualidade das baterias de telefones celular, por exemplo, podem ser reflexos de avaliações minuciosas de como, quanto e onde um sistema pode estar consumido mais potência do que o necessário. Sendo então fundamental o desenvolvimento e aprimoramento de ferramentas capazes de estimar potência consumida a partir de simulações realizadas da descrição do hardware. 4. TRABALHOS RELACIONADOS Diversas formas e técnicas já foram apresentadas para se obter o consumo de potência no início do ciclo do projeto, entre elas pode-se citar. A estimativa da média de potência dissipada por cada instrução executada pelo processador, esta estimativa é feita a partir de resultados de simulação [8]. Em [9] é apresentada um simulador de código compilado especificamente voltado para sistemas com um 2 processador ARM, que avalia, em cada ciclo, a potência consumida. Existem, porém técnicas que reúnem um pouco de cada solução. O simulador CACO-PS (Cycle-Accurate COnfigurable Power Simulator) [10], calcula a potência consumida em cada componente com a ajuda de uma tabela de histórico dos sinais de entrada e saída. Com esta tabela verifica as mudanças de valores das entradas e realiza a estimativa a partir funções de cálculo de potência. As funções de cálculo de potência são definidas com base em resultados de simulações spice realizadas para cada componente da biblioteca. CACO-PS caracteriza-se também por apresentar, apesar de ser um simulador de código compilado, características de um simulador de propósito geral, pois possui uma sintaxe permite ao projetista qualquer nível de detalhamento da descrição. Entretanto, a utilização de uma sintaxe própria implica na necessidade de utilização de uma linguagem de descrição que não pode ser adequadamente utilizada em outras etapas do desenvolvimento do projeto. A motivação para a realização desse trabalho partiu da percepção de que a utilização das técnicas de calculo de consumo de potência descritas em [10] poderiam ser vantajosamente utilizadas em descrições utilizando a linguagem SystemC. Nas próximas seções são apresentadas a aplicação das técnicas utilizadas pelo CACO-PS nem uma descrição SystemC, alguns estudos de caso realizados e os resultados obtidos. 5. TÉCNICAS DE CÁLCULO DE POTÊNCIA EM SYSTEMC As técnicas brevemente apresentadas na seção anterior e originalmente proposta em [10] foram aplicadas a descrições SystemC, procurando manter a estrutura da descrição do sistema com poucas alterações ou nenhuma alteração. O objetivo é evitar que futuros usuários necessitem realizar alterações profundas em seus códigos. Como SystemC já envolve simulações precisas ao nível do ciclo, o trabalho focou-se na aplicação das técnicas apresentada em [10], permitindo o calculo de potência em qualquer nível de descrição e em componentes ou circuitos, síncronos ou assíncronos. Nos componentes síncronos o cálculo da potência é feito através da verificação do chaveamento dos bits de entrada naquele ciclo. Para isto compara-se o valor da entrada atual com o valor da entrada anterior [10]. Para esta comparação, são armazenados os valores dos bits de entrada, de um ciclo para outro, em uma variável que deve ser incluída na descrição de cada módulo. Desta forma, a cada transição do relógio, a potência consumida simulada daquele componente é calculada e acumulada à consumida simulada total. O chaveamento dos bits de entrada não é, entretanto a única condição que leva um componente a dissipar potência. Um registrador, por exemplo, dissipa potência em outras duas situações [10]: consumo estático apenas por participar da arquitetura e por chaveamento do bit de habilitação de. O projetista deve então descrever o consumo de cada componente em uma função de cálculo de potência que também deve ser incluída na descrição SystemC do componente. O cálculo da potência dos componentes assíncronos merece uma atenção especial. Uma vez que não possuem relógio, a saída destes componentes é calculada usando-se o método de sensibilidade às entradas disponível em systemC. A potência não pode, entretanto ser calculada da mesma forma, pois se as entradas permanecerem as mesmas a função que calcula a potência não será executada (já que não houve alteração nas portas de entrada) invalidando a potência do comp onente. Um inversor, por exemplo, possui um método que calcula sua saída usando a sensibilidade à entrada, ou seja, quando sua entrada é alterada seu método de saída é invocado. Se a potência também fosse calculada deste modo não haveria chamada ao método da potência quando a entrada permanecer inalterada. Desta forma a variável que acumula a potência consumida simulada não pode ser inicializada, levando a imprecisões no calculo do consumo de potência. A solução encontrada foi encapsular os componentes assíncronos em um componente hierarquicamente superior dotado de uma entrada de relógio. Nestes componentes a entrada de relógio é unicamente utilizada para o calculo de potência consumida. Assim a função de cálculo permanece sensível à transição do relógio e, da mesma forma que o registrador, guardar o valor da entrada anterior. Dessa forma, a todo ciclo do sistema é verificada a mudança nos valores de entrada. A figura 2 mostra como a solução adotada foi aplicada ao componente inversor. A B P clk Figura 2. Esquema de módulo assíncrono A verificação de chaveamentos de bit na transição do relógio está exemplificada na figura 3, onde se observa um sinal de relógio e um sinal de entrada (Entrada A) que representa a entrada de uma porta inversora. Verifica-se que no instante i1 o sinal Entrada A mudou de 1 para zero, imediatamente (utilizando a sensibilidade a entrada) é atribuída à porta de saída a negação desse valor. No instante i2 ocorre a transição positiva do relógio, neste instante a função de potência é invocada e, a partir da comparação entre os valores da entrada no ciclo atual e no ciclo anterior, calcula quantos bits foram modificados. Posteriormente é atualizada a variável que representa o valore de entrada no ciclo anterior. O processo descrito continua até que não haver mais entrada, ou ciclos. 3 No caso do instante i3 ocorre uma alteração rápida da entrada que retorna imediatamente a seu valor anterior (glitch), antes da próxima transição do relógio. Quando ocorre a transição do relógio, os valores que serão comparados são iguais, não havendo possibilidade de considerar a potência consumida nesses casos. bit das entradas dos somadores e 1 up por chaveamento de cada bit da entrada do componente inversor. 6.1 Primeiro Estudo de Caso Nesse estudo de caso (figura 4) o somador receberá constantemente o valor 5 do registrador regB, e acumulará a soma no registrador regA. Clock Instante i2 Instante i1 Entrada A Instante i3 R E G B “ 5 ” set reset Caso com “glitch” Figura 3. Gráfico de ondas de um inversor 6. RESULTADOS Inicialmente foram testados estudos de caso simples de arquiteturas descritas em SystemC aplicando as técnicas expostas na seção anterior. A seguir serão apresentados os resultados da simulação para três arquiteturas, obtidos tanto no CACO-PS quanto em SystemC. Os valores usados para calcular a potência em cada componente em todos os estudos de caso foram os mesmo utilizados pelo CACO-PS, são eles: 4 up (unidades de potência) por chaveamento de cada bit das entradas dos registradores; 16 up por alteração do bit de enable dos registradores; 5 up por cada bit do registrador por participar da arquitetura; 8 up por chaveamento de cada R E G A set reset Para que as soluções apresentadas possam ser utilizadas por projetistas foram criadas macros de C++ definidas em um arquivo de cabeçalho (sc_potencia.h) a serem usadas na descrição dos módulos. A macro utilizada fornece funções e métodos para o módulo poder calcular e fornecer a potência consumida. O usuário deve descrever como o módulo consome potência em algum processo, tal descrição se dá através da utilização da macro “ZERA_POTENCIA” para atualizar o consumo a cada vez que calculado, a função “transição_bit(valor1, valor2, posicao_bit)” que irá verificar se houve chaveamento de um determinado bit em uma entrada, passando como parâmetro o valor atual e o anterior da mesma e necessariamente utilizar a variável inteira “potencia” para o acúmulo da soma do consumo. Além de o usuário poder criar a função de cálculo de potência dos seus componentes, existe também uma biblioteca com vários componentes que podem ser reutilizados por outros usuários. E para acessar o valor da potencia calculada ciclo-a-ciclo, no arquivo principal, no qual é descrita a arquitetura (main.cpp), o usuário durante a simulação apenas precisa invocar o método de cada módulo “getPotencia()”. Figura 4. Estudo de caso - Acumulador A arquitetura em SystemC compõe-se dos componentes registrador e somador, todos possuem um arquivo cabeçalho onde se encontra a definição da interface suas portas de entrada e saída, o construtor e os métodos, além do arquivo principal, o qual possui a implementação dos métodos. Na tabela 1 são apresentados os resultados da simulação feita em três ciclos, descrevendo o consumo de cada um dos componentes e o total do sistema. Tabela 1. Resultados da simulação do primeiro estudo de caso Componente Registrador A Registrador B Somador Total Ciclo 1 88 up 80 up 16 up 184 up Ciclo 2 96 up 80 up 16 up 192 up Ciclo 3 88 up 80 up 32 up 200 up Total 272 up 240 up 64 up 576 up O regB foi inicializado com o valor 5 antes da simulação, portanto no primeiro ciclo como o registrador já possuía esse sinal em sua entrada e a escrita havia sido habilitada também antes da simulação, ele consome apenas a potência por participar da arquitetura que é 80 up, considerando que os registradores possuem 16 bits. A potência do regA no primeiro ciclo é relativa a 80 up por participar da arquitetura e 8 up por chaveamento da entrada. Enquanto o somador dissipa potência por chaveamento das entradas, que no caso do primeiro ciclo corresponde a 16 up. 4 Nos ciclos seguintes a potência dos registradores é relativa ao chaveamento de bits das entradas e a participação dos mesmos na arquitetura, e o somador dissipa somente devido ao chaveamento das entradas. 6.2 Segundo Estudo de Caso O estudo de caso a seguir (figura 5) a seguir consiste em implementar um sistema que retorne um quando receber três valores um na entrada. A arquitetura que representa a máquina de estados da figura 5 possui dois componentes que implementam portas lógicas and e três registradores, como ilustrados na figura 6. 0 1 6.3 Terceiro Estudo de Caso Nesse estudo de caso procura -se verificar se componentes assíncronos estariam sendo eficientes em calcular o consumo da potência em uma transição do relógio como explicado na seção anterior. A arquitetura constitui-se de dois registradores, um somador, um componente que implementa a porta lógica and e uma cadeia de três inversores, como ilustra a figura 7. 0 1 arquitetura, pois o bit de enable já havia sido habilitado antes da simulação. E a potência dissipada pelo regC é devida apenas a sua participação na arquitetura, já que apenas no quarto ciclo haverá chaveamento dos bits da entrada. Nos ciclos seguintes a potência dissipada está relacionada a participação dos registradores na arquitetura e ao chaveamento de bits das entradas caso estas sejam alteradas. 1 0 Figura 5. Máquina de estados R E G A “ 5 ” R E G B set reset set reset R E G C “ 1 ” se t re se t se t re se t “ 1 ” R E G B se t re se t R E G A Figura 7. Estudo de caso – Circuito misto Na tabela 3 encontram-se os resultados obtidos dos componentes, exceto do and que não consome potência pelos mesmos motivos do estudo de caso anterior. Figura 6. Estudo de caso – Máquina de Estados Na tabela 2 são apresentados os resultados do consumo somente dos registradores e do sistema, pois não é definido nenhum tipo de consumo de potência pelo CACO-PS aos componentes do and. Tabela 2. Resultados da simulação do segundo estudo de caso Componente Ciclo 1 Ciclo 2 Ciclo 3 Total Registrador A Registrador B Registrador C Total 80 up 84 up 80 up 244 up 80 up 80 up 84 up 244 up 80 up 80 up 80 up 240 up 240 up 244 up 244 up 728 up Assim, como no estudo de caso anterior, o regA foi inicializado antes da simulação, portanto no primeiro ciclo não houve alteração da sua entrada e nem do bit enable, consumindo apenas a potência por participar da arquitetura (80 up). O regB no primeiro ciclo dissipou potência por chaveamento da entrada e por participar da Tabela 3. Resultados da simulação do terceiro estudo de caso Componente Ciclo 1 Ciclo 2 Ciclo 3 Total Registrador A Registrador B Somador Inversores Total 80 up 84 up 16 up 0 up 180 up 80 up 84 up 8 up 0 up 172 up 80 up 84 up 8 up 0 up 172 up 240 up 252 up 32 up 0 up 524 up Os sinais de entrada do regA e do primeiro inversor são inicializados antes da simulação com 5 e 0 respectivamente. Dessa maneira nenhum dos dois consomem potência no primeiro ciclo, e como o inversor trata-se de um componente assíncrono sua entrada foi propagada antes mesmo do primeiro ciclo de simulação, portanto os outros inversores também não consomem potência. Nos ciclos seguintes, as entradas desses inversores permanecem constantes, conseqüentemente não havendo o chaveamento de bits, e assim justificado o consumo nulo de potência por esses componentes. 5 O regA dissipa potência no primeiro ciclo apenas por participar da arquitetura. A potência dissipada pelo regB relaciona-se ao chaveamento de bits da entrada e a sua participação na arquitetura. E a potência consumida pelo somador deve-se apenas ao chaveamento de bits das entradas, que no primeiro ciclo foi o chaveamento da entrada referente à saída do registrador A. Nos ciclos seguintes a potência dissipada pelo regA é relativa apenas a sua participação na arquitetura. Enquanto o regB dissipa potência por chaveamento de bits de sua entrada e por participar da arquitetura e o somador apenas consome potência pelo chaveamento das suas entradas. 6.4 Microcontrolador Femtojava Visando a utilização de um estudo de caso mais realísticos, foi simulado o processador Femtojava [11], que é um microcontrolador baseado em operações de pilha e que executa bytecodes Java. Esse processador foi projetado especificamente para a utilização em sistemas embarcados [10]. A figura 8 está representando toda a arquitetura descrita do processador. Na tabela 4 são apresentados os resultados obtidos a partir de 3.940 ciclos das simulações realizadas no simulador CACO-PS e no SystemC. O processador foi submetido à execução do algoritmo de ordenação quicksort, através das memórias RAM e ROM sendo representadas por arquivos do tipo MIF gerados pelo SASHIMI [11], que é um ambiente destinado à síntese de sistemas microcontrolados especificados em linguagem Java [12]. Tabela 4. Resultados da s imulação do Femtojava RAM CACO-PS 8.089.600 up SystemC 10.268.076 up ROM 296.448 up 675.328 up Núcleo 4.642.337 up 3.959.737 up Total 13.028.385 up 14.903.141 up 7. CONSIDERAÇÕES FINAIS Neste atigo foi apresentada a implemenatção de uma metodologia de calculo do consumo de potência de um dispositivo, circuito ou sistema embarcado a partir de sua descrição na linguagem SystemC. Para a validação da aplicação da metodologia à linguagem escolhida foram realizados quatro estudos de caso. O primeiro estudo de caso verifica o consumo de potência em um circuito acumulador. Neste estudo de caso são verificados os consumos estático e dinâmico dos registradores e de uma Unidade de Lógica e Aritmética que realiza unicamente somas. O segundo estudo de caso apresenta uma máquina de estado que reconhece o símbolo “111”. Sua implementação envolve simplesmente três registradores e duas portas lógicas. O terceiro estudo de caso envolve a utilização componentes síncronos e assíncronos. Por fim o quarto estudo de caso realiza o cálculo do consumo de potência de um microcontrolador qando este executa um algoritmo de ordenação (quicksort). Os resultados obtidos nos estudos de caso mostraram que a metodologia apresentada em [10] pode ser aplicada a simulações em SystemC. A utilização desta linguagem garante ao projetista a possibilidade de utilização de uma única linguagem para descrição, simulação com cálculo da potencia consumida e síntese. As discrepâncias observadas com a simulação realizadas em CACO-PS e em SystemC estão sendo estudadas e novos estudos de caso estão sendo realizados. 8. REFERÊNCIAS BIBLIOGRÁFICAS Figura 8. Representação gráfica do microcontrolador Femtojava [1] Hyde, C. D. (1998). “Using Verilog HDL to Teach Computer Architecture Concepts”. Em 25th International Symposium on Computer Architecture 6 [2] Marcon, C. A. M., Calazans, N. L. V., Moraes, F. G., Ries, L. H. L. e Hessel, F (2002). “Modelagem e Descrição de Sistemas Computacionais - Um Estudo de Caso de Comparação das Linguagens VHDL e SDL”. Em VIII Workshop IBERCHIP [3] Open SystemC Initiative. “SystemC 2.0.1 Language Reference Manual”. 2003. Disponível em: http://www.systemc.org [4] Synopsys Inc. “SystemC Version 2.0 Users Guide”. 2003. Disponível em: www.systemc.org [5] Carro, L., Corrêa, L., Cardozo, R., Moraes, F. e Bampi, S. (2003). “Exploiting reconfigurability for lowpower control of embedded processors”. Em IEEE International Symposium on Circuits and Systems (ISCAS) [6] Gervini, A. I., Corrêa, E. F., Carro, L. e Wagner, F. R. (2003). “Avaliação de Desempenho, Área e Potência de Mecanismos de Comunicação em Sistemas Embarcados”. Em XXX Seminário Integrado de Software e Hardware (SEMISH) [7] Shiue, W.-T. e Chakrabarti, C. (1999). "Memory Exploration for Low Power, Embedded Systems". Em IEEE International Symposium on Circuits & Systems (ISCAS). [8] Tiwari, V., Malik, S. e Wolfe, A. (1994). "Power Analysis of Embedded Software: a First Step Towards Software Power Minimization". IEEE Transactions on Very Large Scale Integration (VLSI) Systems. Vol. 2, No. 4, pp 437-445. [9] Simunié, T., Benini, L. e De Micheli, G. (1999). “Cycle-Accurate Simulation of Energy Comsumption in Embedded Systems”. Em ACM Transaction on Design Automation Conference (DAC) [10] Beck F., A.C.S., Mattos, J.C.B., Rosa J., L.S., Wagner, F.R. e Carro, L. (2003). “CACO-PS: um avaliador de potência”. Em Seminário Integrado de Software e Hardware (SEMISH) [11] Ito, S., Carro, L. e Jacobi, R. (2001). "Sashimi and FemtoJava: Making Java Work for Microcontroller Applications". IEEE Design & Test of Computers. Vol. 18, No. 5, pp.100-110 [12] Carro, L. e Wagner, F.R. (2003). “Sistemas Computacionais Embarcados”. Em JAI'03 – XXII Jornadas de Atualização em Informática, Capítulo 2. 7