Universidade Católica de Pelotas ANDRÉ MARCELO COELHO DA SILVA TÉCNICAS PARA O AUMENTO DE DESEMPENHO DE ARQUITETURAS DEDICADAS DAS TRANSFORMADAS DIRETAS E DE ESTIMAÇÃO DE MOVIMENTO DO PADRÃO H.264/AVC DE CODIFICAÇÃO DE VÍDEO PELOTAS 2009 ANDRÉ MARCELO COELHO DA SILVA TÉCNICAS PARA O AUMENTO DE DESEMPENHO DE ARQUITETURAS DEDICADAS DAS TRANSFORMADAS DIRETAS E DE ESTIMAÇÃO DE MOVIMENTO DO PADRÃO H.264/AVC DE CODIFICAÇÃO DE VÍDEO Dissertação apresentada no programa de Pós-graduação em informática da Universidade Católica de Pelotas como requisito parcial para a obtenção do grau de mestre em Informática Prof. Orientador: Dr. Eduardo Costa Prof. Co-orientador: Dr. Sérgio Almeida PELOTAS 2009 1 AGRADECIMENTOS Em cada desafio que conseguimos superar é necessário comemorar mas é muito importante olhar para trás para sempre nos lembrarmos das adversidades e como é difícil alcançar o ponto final. É preciso ter garra, fé e dedicação para atingir os objetivos. Existem momentos que temos que tirar forças de onde nem nós mesmos sabíamos que tínhamos. Outras vezes precisamos que outras pessoas nos ajudem, às vezes, com apenas algumas palavras de incentivo. Neste momento de agradecimentos existem várias pessoas que contribuíram de alguma forma para que este trabalho tivesse êxito. Porém existem algumas pessoas que são extremamente importantes em nossas vidas e outras que foram importantes para este trabalho. Na minha vida, são muito importantes os meus pais, Elmo Ribeiro da Silva e Gelsinete Coelho da Silva, por ser neles onde sempre encontro apoio incondicional para realização das minhas tarefas, para tomar as decisões e também compreensão e incentivo nas horas de maior necessidade. Um grande agradecimento a minha irmã Andréia Coelho da Silva pela amizade e companheirismo nas horas de maior necessidade, e minha vó Nair Vargas Coelho por ser a minha segunda mãe. Agradeço também aos meus colegas do mestrado e também aos colegas do LAMIPS que contribuíram de alguma forma para a realização deste trabalho final. Faço aqui um agradecimento especial ao colega João Altermann pela ajuda nesta última etapa do trabalho. E um especial agradecimento ao meu orientador, Prof. Eduardo Costa, e ao meu co-orientador, Prof. Sérgio Almeida, pela dedicação, compreensão e significativas contribuições para a realização deste trabalho. Por fim, agradeço a DEUS por permitir chegar ao fim desta etapa com sucesso. 2 SUMÁRIO LISTA DE FIGURAS .......................................................................................... 5 LISTA DE TABELAS ......................................................................................... 7 LISTA DE ABREVIATURAS E SIGLAS ............................................................ 8 RESUMO.......................................................................................................... 10 ABSTRACT...................................................................................................... 11 1 INTRODUÇÃO .............................................................................................. 12 1.1 Motivação .................................................................................................. 12 1.2 Objetivos ................................................................................................... 13 1.3 Metodologia ............................................................................................... 14 1.4 Contribuições do Trabalho ........................................................................ 15 1.5 Organização do Trabalho .......................................................................... 16 2 CONCEITOS BÁSICOS DA COMPRESSÃO DE VÍDEO ............................ 17 2.1 Espaço de Cores e Sub-Amostragem de Cores ........................................ 17 2.2 Partição do Vídeo Digital ........................................................................... 19 2.3 Redundância de Dados ............................................................................. 21 2.3.1 Redundância Espacial ............................................................................ 22 2.3.2 Redundância Temporal .......................................................................... 22 2.3.3 Redundância Entrópica .......................................................................... 22 2.4 Sumário ..................................................................................................... 23 3 O PADRÃO H.264/AVC ............................................................................... 24 3.1 Histórico do padrão H.264/AVC ................................................................ 24 3.2 Perfis ......................................................................................................... 26 3.3 Formato dos Dados Codificados ............................................................... 27 3.4 Núcleo do Padrão H.264/AVC ................................................................... 28 3.4.1 Módulo de Predição Inter-Quadro .......................................................... 30 3.4.2 Módulo de Predição Intra-Quadro .......................................................... 35 3.4.3 O Módulo das Transformadas Diretas (T) e das Transformadas Inversas T-1 ................................................................... 36 3.4.4 O Módulo da Quantização Direta (Q) e da Quantização Inversa (Q-1) ...................................................................... 37 3.4.5 O Módulo do Filtro de Deblocagem ........................................................ 38 3.4.6 O Módulo da Codificação de Entropia .................................................... 38 3.5 Alguns Trabalhos da Literatura de Desenvolvimento dos Módulos do Padrão H.264/AVC .......................................................... 40 3.6 Sumário ..................................................................................................... 41 4 TRANSFORMADAS DIRETAS (BLOCO T) E ESTIMAÇÃO DE MOVIMENTO DO PADRÃO H.264/AVC ............................................... 42 4.1 O Módulo das Transformadas Diretas (T) ................................................. 42 4.1.1 A Transformada Discreta do Cosseno (DCT) ......................................... 45 4.1.2 A Transformada Hadamard .................................................................... 46 4.2 O Módulo da Estimação de Movimento ..................................................... 47 4.2.1 Algoritmo Diamond Search (PORTO, 2008) ........................................... 52 4.3 Sumário ..................................................................................................... 53 5 CIRCUITOS SOMADORES EFICIENTES ................................................... 54 3 5.1 Somador Carry Save ................................................................................. 54 5.2 O Compressor 4:2 ..................................................................................... 55 5.3 Compressores Hierárquicos 8:2 e 16:2 ..................................................... 58 5.4 Análise Comparativa dos Compressores .................................................. 64 5.6 Sumário ..................................................................................................... 65 6 ESTUDOS DE CASO: MÓDULO T E ESTIMAÇÃO DE MOVIMENTO ....... 66 6.1 Soluções arquiteturais: Módulo T .............................................................. 66 6.1.1 Estudo de caso para a FDCT-2D ........................................................... 66 6.1.1.1 Arquiteturas Propostas Neste Trabalho ............................................... 66 6.1.1.2 Arquitetura proposta por (AGOSTINI, 2007) ....................................... 69 6.1.1.3 Resultados de síntese ......................................................................... 70 6.1.2 Estudo de caso para a Transformada Hadamard 4x4 ............................ 71 6.1.2.1 Implementações de Arquiteturas Combinacionais em FPGA .............. 71 6.1.2.1.1 Arquitetura Combinacional com Somadores/Subtratores Ripple Carry ..................................................................................... 72 6.1.2.1.2 Arquitetura Combinacional com Compressor 4:2 ............................. 73 6.1.2.1.3 Arquitetura Combinacional com Compressor 4:2 e Subtrator Carry-Save ........................................................................ 74 6.1.2.1.4 Arquitetura Combinacional com Compressor 8:2 ............................. 75 6.1.2.1.5 - Arquitetura Combinacional com Compressor 16:2 ......................... 76 6.1.2.1.6 Resultados das Arquiteturas Combinacionais .................................. 77 6.1.2.2 Implementações de Arquiteturas Seriais em FPGA ............................ 78 6.1.2.2.1 Arquitetura Serial com Separabilidade ............................................. 78 6.1.2.2.2 Arquitetura Serial sem Separabilidade ............................................. 81 6.1.2.3 Implementações em ASIC para a Transformada Hadamard 4x4 ........ 83 6.1.2.4 Resultados de Síntese ........................................................................ 84 6.1.3 Arquitetura para Transformada Hadamard 2x2 ...................................... 85 6.1.3.1 - Resultados de Síntese ...................................................................... 86 6.1.4 Validação do Módulo T Completo .......................................................... 87 6.1.5 Comparação com Resultados da Literatura ........................................... 87 6.2 Soluções Arquiteturais: Estimação de Movimento (ME) ............................ 89 6.2.1 Otimização proposta neste trabalho ....................................................... 91 6.2.2 Avaliação dos Resultados ...................................................................... 92 6.2.3 Resultados de Síntese ........................................................................... 93 6.2.4 Comparação com Resultados da Literatura ........................................... 95 7 CONCLUSÕES E TRABALHOS FUTUROS ............................................... 97 7.1 Trabalhos Futuros ..................................................................................... 98 7.1.1 Aplicação dos Somadores Compressores ao Módulo das Transformadas Inversas ......................................................................... 98 7.1.2 Verificação do Consumo de Potência dos Módulos das Transformadas ....................................................................................... 98 7.1.3 Verificação do Aumento do Paralelismo na Arquitetura da ME para Verificação do Uso dos Somadores Compressores ....................... 99 REFERÊNCIAS ............................................................................................. 100 ANEXOS ....................................................................................................... 105 4 LISTA DE FIGURAS Figura 2.1: Mostra da Sub-amostragen no Formato 4:2:0 ............................... 19 Figura 2.2: Possíveis Partições de um Macrobloco ......................................... 20 Figura 2.3: Possíveis Partições de um Sub-Macrobloco ................................. 20 Figura 2.4: Divisão de um Quadro com Várias Partições ................................ 21 Figura 3.1: Estrutura dos Perfis Atuais do Padrão H.264/AVC (ROSA, 2009) 27 Figura 3.2: Seqüência de Unidades NAL ........................................................ 28 Figura 3.3: Diagrama de Blocos do Codificador do Padrão H.264/AVC .......... 29 Figura 3.4: Diagrama de Blocos do Decodificador do Padrão H.264/AVC ...... 30 Figura 3.5: Determinação do Vetor de Movimento para um Bloco .................. 31 Figura 3.6: Quadro do Vídeo Antes da MC ..................................................... 33 Figura 3.7: Quadro do Vídeo Após a MC ........................................................ 34 Figura 3.8: Quadro de Luminância Resídual ................................................... 34 Figura 3.9: Nove modos de predição Intra-Quadro para Blocos de 4x4 Pixels ................................................................................. 35 Figura 3.10: Quatro modos de predição Intra-Quadro para Blocos de 16x16 Pixels ........................................................................... 36 Figura 4.1: Diagrama de Blocos do Módulo da Transformadas Diretas (T) .... 44 Figura 4.2: Ordem de Processamento de Amostras pelo Módulo T ................ 45 Figura. 4.3: Estimação de Movimento com Precisão de Fração de Pixel ........ 49 Figura 4.4: Large Diamond (LDSP) (L) e Small Diamond (SDSP) (S) ............. 52 Figura 4.5(a): Busca por uma aresta ............................................................... 53 Figura 4.5(b): Busca por um vértice ................................................................ 53 Figura 5.1: Exemplo de um Somador Carry Save ........................................... 54 Figura 5.2: Exemplo de Soma de Números de 4 bits Usando a Estrutura Carry Save ..................................................................... 55 Figura 5.3: Estrutura do Compressor 4:2 ........................................................ 56 Figura 5.4: Compressor 4:2 Utilizando Multiplexadores .................................. 58 Figura 5.5: Circuito Somador de 14 bits Utilizando Compressor 4:2 ............... 58 Figura 5.6: Diagrama de Blocos do Circuito Compressor 8:2 .......................... 59 Figura 5.7: Estrutura Hierárquica do Compressor 8:2 ..................................... 59 Figura 5.8: Circuito Somador de 14 Bits Utilizando Compressor 8:2 ............... 61 Figura 5.9: Diagrama de Blocos do Circuito Compressor 16:2 ........................ 61 Figura 5.10: Estrutura Hierárquica do Compressor 16:2 ................................. 62 Figura 5.11: Circuito Somador de 14 bits Utilizando Compressor 16:2 ........... 64 Figura 6.1: Arquitetura para FDCT-2D utilizando compressores 4:2 ............... 67 Figura 6.2: Arquitetura para FDCT-2D utilizando compressores 8:2 ............... 68 Figura 6.3: Arquitetura para FDCT-2D utilizando compressores 16:2 ............. 69 Figura 6.4: Arquitetura para a FDCT-2D proposta por (AGOSTINI, 2007) ...... 70 Figura 6.5: Arquitetura Combinacional com Somadores/Subtratores Ripple Carry (AGOSTINI, 2007) .................................................... 72 Figura 6.6: Arquitetura Combinacional com Compressores 4:2 ...................... 74 Figura 6.7: Arquitetura Combinacional com Compressor 4:2 e Subtrator Carry Save ..................................................................... 75 Figura 6.8: Arquitetura Combinacional com Compressor 8:2 .......................... 76 5 Figura 6.9: Arquitetura Combinacional com Compressor 16:2 ........................ 77 Figura 6.10: Arquitetura Serial com separabilidade Utilizando o Compressor 4:2 ........................................................................ 79 Figura 6.11: Arquitetura Serial sem Separabilidade Utilizando o Compressor 16:2 ...................................................................... 81 Figura 6.12: Arquitetura para a Hadamard 4x4 implementada na Tecnologia ASIC ..................................................................... 83 Figura 6.13: Arquitetura para a Hadamard 4x4 implementada na Tecnologia ASIC ..................................................................... 84 Figura 6.14: Arquitetura para a Transformada Hadamard 2x2 ........................ 86 Figura 6.15: Arquitetura para ME proposta em (PORTO, 2008) ..................... 90 Figura 6.16: Arquitetura da Unidade de Processamento (UP) ........................ 91 Figura 6.17(a) Estrutura da UP da ME com Compressor 4:2 .......................... 92 Figura 6.17(b) Estrutura da UP da ME com Compressor 8:2 .......................... 92 6 LISTA DE TABELAS Tabela 5.1: Verdade do Compressor 4:2 ........................................................ 57 Tabela 5.2: Tabela Verdade do Compressor 8:2 ............................................. 60 Tabela 5.3: Tabela Verdade do Compressor 16:2 ........................................... 63 Tabela 5.4: Resultado de Síntese Para os Compressores .............................. 65 Tabela 6.1: Resultados de Síntese para a FDCT-2D sem Separabilidade ..... 71 Tabela 6.2: Resultados de Área, Atraso e Potência para as Arquiteturas Combinacionais ........................................................ 78 Tabela 6.3: Resultado de Síntese para Transformadas 1-D ........................... 80 Tabela 6.4: Resultado de Síntese da Arquitetura Serial com Separabilidade .............................................................................. 80 Tabela 6.5: Resultado de Síntese da Arquitetura Serial sem Separabilidade .............................................................................. 82 Tabela 6.6: Resultados Transformada Hadamard 4x4 .................................... 85 Tabela 6.7: Resultados de Síntese da Transformada Hadamard 2x2 ............. 87 Tabela 6.8: Resultados para o Módulo T Completo ........................................ 87 Tabela 6.9: Resultados Comparativos com Trabalhos Relacionados ............. 89 Tabela 6.10: Resultados de Síntese para Arquiteturas da ME ........................ 95 Tabela 6.11: Resultados Comparativos .......................................................... 96 7 LISTA DE ABREVIATURAS E SIGLAS 1-D 2-D AC ASIC AVC CABAC CD Codec CAVLC DC DCT DCT-2D DPCM DVD FDCT FDCT-2D FRExt HD HDTV HD-DVD HSI HT IDCT IDCT-2D IEC IHT ISO ITU-T JVT MB MC ME MPEG NAL Q Q−1 QP RAM RBSP RGB SBTVD T T−1 VCEG Uma Dimensão Duas Dimensões Alternate Current Application Specific Integrated Circuit Advanced Video Coding Context-Based Adaptative Binary Arithmetic Coding Compact Disk Codificador/Decodificador Context-Based Adaptative Variable Length Coding Direct Current Discrete Cosine Transform Discrete Cosine Transform in Two-Dimensions Differential Pulse Code Modulation Digital Versatile Disk Forward Discrete Cosine Transform Forward Discrete Cosine Transform in Two-Dimensions Fidelity range Extensions Hard Disk High Definition Digital Television High Density Digital Versatile Disc Hue, Saturation, intensity Hadamard Transform Inverse Discrete Cosine Transform Inverse Discrete Cosine Transform in Two-Dimensions International Electrotechnical Commission Inverse Hadamard Transform International Organization for Standardization International Telecommunication Union - Telecommunication Joint Video Team Macrobloco Motion Compesation Motion Estimation Moving Picture Experts Group Network Abstraction Layer Quantização Quantização Inversa Parâmetro de Quantização Random Access Memory Raw Byte Sequence Payload Red, Green, Blue Sistema Brasileiro de Televisão Digital Transformada Transformada Inversa Video Coding Experts Group 8 VCL YCbCr Video Coding Layer Luminance, Chrominance Blue, Chrominance Red 9 RESUMO A crescente utilização de vídeos digitais na Internet, em dispositivos móveis e também na TV digital faz com que haja um interesse crescente em pesquisas nesta área, tanto na indústria quanto no meio acadêmico. Este trabalho segue esta tendência e tem como proposta estudar aspectos de vídeo digital, compressão de vídeo e também do padrão H.264/AVC de compressão de vídeo para a implementação de arquiteturas dedicadas eficientes em desempenho, isto é, com elevada frequência de operação, dos módulos do codificador do padrão H.264/AVC. Em particular, este trabalho apresenta algumas alternativas arquiteturais para aumento de desempenho de dois módulos do padrão H.264/AVC, que são: Módulo T (composto pelas Transformadas Diretas – Transformadas Hadamard e Transformada Discreta do Coseno) e Estimação de Movimento (ME). A implementação destes módulos foi realizada utilizando técnicas para o aumento de desempenho, tais como o uso de somadores eficientes e pipeline. Uma característica dos somadores eficientes utilizados neste trabalho é o uso elevado de recursos de hardware. Assim, as arquiteturas implementadas neste trabalho também apresentaram esta característica. Os módulos implementados apresentam como principal característica um elevado número de operações aritméticas de soma e subtração para o seu processamento. Desta forma, a motivação deste trabalho consiste em aumentar o desempenho destes módulos, a partir da utilização de circuitos somadores/subtratores eficientes presentes na literatura. Em particular, são utilizados circuitos somadores compressores 4:2, 8:2 e 16:2, pois estes realizam a soma simultânea de 4, 8 e 16 operandos, respectivamente, sem penalidades em área e no caminho crítico. As arquiteturas foram descritas em VHDL e direcionadas para tecnologia ASIC, a validação e resultados foram obtidos através da ferramenta Leonardo Spectrum da Mentor Graphics. Para os estudos de caso utilizados neste trabalho (Transformadas Diretas e Estimação de Movimento), foram feitas comparações com soluções apresentadas na literatura e os resultados mostram que as arquiteturas implementadas neste trabalho obtiveram significativos ganhos em desempenho, quando comparadas com soluções apresentadas na literatura. Palavras-chave: Compressão de Vídeo, Padrão H.264/AVC, Vídeo Digital, Transformadas Diretas, Estimação de Movimento. 10 ABSTRACT TITLE: “TECHNIQUES FOR THE INCREASE OF PERFORMANCE OF FORWARD TRANSFORMS AND MOTION ESTIMATION DEDICATED ARCHITECTURES OF THE H.264/AVC VIDEO CODING STANDARD” The increasing use of digital video on the Internet, devices and also in mobile digital TV has lead to an increasing interest for research in this area, from both industry and academia. This work follows this trend by proposing the investigation of the main aspects of digital video, video compression and also of the H.264/AVC video compression for the implementation of performance efficient dedicated architectures for some modules of the H.264/AVC encoder. In particular, this work presents some architectural alternatives for the increase of performance of two modules of the H.264/AVC, which are: T Module (composed by the Forward Hadamard and Discrete Cosine Transforms) and Motion Estimation (ME). For the implementation of these modules the use of techniques to the increase of performance has been considered, such as the use of efficient adders and pipeline. This efficient adders presents high use of hardware features. Thus, the implemented architectures in this work presented these characteristics too. The main aspect presented by the implemented modules is a large number of arithmetic operations of addition and subtraction for their processing. Thus, the motivation of this work is the increase of performance of these modules, from the use of efficient adder/subtractor circuits that are present in literature. In particular, 4:2, 8:2 and 16:2 adder compressors that perform the simultaneous addition of 4, 8 and 16 operands, respectively, with no penalties in area and the critical path are used. The architectures were described in VHDL and targeted to ASIC technology. The validation of the circuits and the obtained results were performed by using Leonardo Spectrum tool from Mentor Graphics. Comparisons against the solutions of the literature were done and the main results show that the architectures proposed in this work are more efficient. Significant gains in performance are achievable using our solutions for both Forward Transforms and Motion Estimation architectures. Keywords: Video Compression, H.264/AVC Standard, Digital Video, Forward Transforms, Motion Estimation. 11 1 INTRODUÇÃO Vídeos digitais apresentam uma demanda cada vez maior, devido à possibilidade da sua utilização em diversas áreas de aplicações, tais como Web, videoconferências, transmissões em broadcast, e também SBTVD (Sistema Brasileiro de TV Digital) (DTV, 2008), que está em funcionamento em algumas cidades do Brasil desde dezembro de 2007. Para a transmissão eficiente de vídeos digitais, é necessário fazer a compressão das informações, isto é, reduzir o número de bits necessários à sua representação, sem a perda significativa de informações. Esta redução pode ser realizada através da exploração de uma característica existente nas seqüências de vídeo, definida como redundância. Esta propriedade permite que grande parte dos dados necessários para representar um vídeo digital possa ser descartada. Com a finalidade de fazer a compressão eficiente dos vídeos digitais, foi desenvolvido pela ITU-T, o padrão de compressão de vídeo H.264/AVC (WIEGAND, 2003), que é o mais recente padrão de compressão de vídeo, sendo este mais eficiente em relação a outros padrões existentes, tais como MPEG-2 (ITU-T, 1994) e H.263 (ITU, 2000). Esta eficiência de compressão é obtida ao custo de um acréscimo computacional no seu codec (codificador/decodificador), fazendo com que a complexidade computacional de alguns módulos do padrão H.264/AVC tenham um acréscimo significativo em relação aos padrões anteriores. Além da compressão de vídeos para a transmissão via rede de computadores, principalmente a Web, outro ponto importante a ser explorado é o armazenamento adequado das informações. Este aspecto contribui para a otimização de recursos geralmente utilizados para tal finalidade, tais como DVDs, CDs, HDs e etc. Diante do quadro exposto e dos desafios ainda presentes, tem-se que a compressão de vídeo e o padrão H.264/AVC são assuntos que estão sendo amplamente estudados por pesquisadores do meio acadêmico e da indústria e muitas contribuições significativas ainda podem ser dadas no sentido de aumentar a eficiência da transmissão dos vídeos digitais. 1.1 Motivação Além dos vídeos digitais, outro setor que vem apresentando um aumento significativo em termos de utilização são os dispositivos móveis operados por bateria, tais como palmtops, câmeras e filmadoras digitais portáteis, telefones celulares entre outros. Para estes dispositivos, 12 estão sendo cada vez mais utilizadas aplicações com vídeos digitais. Entretanto, para estas aplicações, um fator de extrema importância é possuir um codec eficaz, isto é, que realize as tarefas de codificação/decodificação do vídeo com eficiência de desempenho, pois dispositivos móveis que operem informações de vídeo digital tenderão a ter o tempo de vida útil das suas baterias reduzido. Além disso, estes dispositivos móveis não podem apresentar aquecimento elevado em seus circuitos, para não comprometer o seu funcionamento e a sua utilização pelos usuários. Neste sentido, torna-se importante o projeto e implementação de módulos do padrão H.264/AVC que satisfaçam às exigências de desempenho, de acordo com a taxa de processamento a ser utilizada, pois esta métrica é fator crítico para o projeto do codec do padrão H.264/AVC voltado para a utilização de dispositivos que pretendam trabalhar com vídeos em tempo real, ou seja, processem o mínimo de 30 quadros por segundo. Com isto, este trabalho tem como objetivo aplicar técnicas para o aumento de desempenho a alguns módulos do codificador do padrão H.264/AVC, de tal forma que vários equipamentos que utilizam vídeos digitais possam ser utilizados de forma eficiente. 1.2 Objetivos Este trabalho tem por objetivo estudar e aplicar técnicas para o aumento de desempenho existentes na literatura para o codec do padrão H.264/AVC, tais como o uso de operadores aritméticos eficientes, pipelining, viabilizando a sua utilização em TV digital, dispositivos móveis operados por bateria, etc. Esta linha de estudo vem sendo pesquisada com maior força recentemente em grupos de pesquisa internacionais (UDYAWAR , 2006), (KOZIRI, 2006), (LIN 2006), (KUO 2006), (PARLAK, 2007), (LOPEX, 2008) e (HISHAN, 2009), visto um maior número de equipamentos portáteis que vêm sendo lançados no mercado recentemente, cuja aplicação de vídeos digitais é imediata. Particularmente, as técnicas para o aumento de desempenho são aplicadas a vários módulos integrantes da etapa de compressão de vídeo, dentre os quais se destacam os módulos das transformadas e de estimação de movimento do padrão H.264/AVC. Desta forma, são explorados os seguintes módulos neste trabalho: i) Transformadas Hadamard e Transformada Discreta do Cosseno; ii) Estimação de movimento. 13 Dentre as etapas dos compressores atuais, a mais complexa e que resulta nos melhores resultados de taxa de compressão é a estimação de movimento (ME – Motion Estimation). A ME é responsável por encontrar uma co-relação entre quadros, mapeando a redundância temporal entre os quadros vizinhos de uma cena. O processo de estimação é extremamente complexo, o que torna indispensáveis arquiteturas de hardware dedicadas eficientes para este fim, quando se deseja trabalhar com vídeos de alta resolução em tempo real. Por outro lado, os algoritmos das Transformadas Hadamard 4x4 e 2x2 e Transformada Discreta do Cosseno (DCT), que fazem parte integrante do bloco T do padrão H.264/AVC, agregam um grande número de operações aritméticas. Desta forma, torna-se importante a implementação de arquiteturas dedicadas destes algoritmos, com operadores aritméticos eficientes, que possam reduzir a complexidade computacional dos cálculos realizados por estes módulos. 1.3 Metodologia Em um estudo inicial, tornou-se possível observar que alguns módulos do codec do padrão H.264/AVC apresentam um excelente estudo de caso para a aplicação de operadores aritméticos eficientes presentes na literatura (COSTA, 2002). O primeiro estudo de caso feito foi na Transformada Hadamard 4x4 presente no módulo das transformadas diretas (T). Neste primeiro experimento foram desenvolvidas sete arquiteturas combinacionais para a transformada Hadamard 4x4, sendo cinco arquiteturas paralelas e duas arquiteturas seriais direcionadas para a tecnologia FPGA (Field Programmable Gate Array). As arquiteturas foram desenvolvidas em linguagem de descrição de hardware VHDL (Very High Speed Integrated Circuits Hardware Description Language) e sintetizadas na ferramenta Quartus II da Altera para a obtenção de resultados de uso de recursos de hardware e frequência de operação. Em particular, o módulo das transformadas diretas (T), que além da Transformada Hadamard (FHAD – Forward Hadamard Transform) é formado também pela Transformada Discreta do Cosseno (FDCT – Forward Discrete Cosine Transform) e o módulo da Estimação de Movimento (ME – Motion Estimation), apresentam um elevado número de operações aritméticas em seus algoritmos. Desta forma, este trabalho explora a utilização de circuitos somadores eficientes que possam realizar estas operações no menor tempo possível. Neste contexto, os circuitos somadores compressores estão presentes na literatura como circuitos eficientes para a realização de somas simultâneas de vários operandos (WEINBERGER, 1981). Neste trabalho são utilizados circuitos somadores compressores 4:2, 8:2 e 16:2 em arquiteturas dedicadas para os módulos citados anteriormente. 14 Após a verificação dos resultados obtidos com o estudo inicial, foram realizadas implementações de todas as transformadas que compõe o módulo T, a integração destas transformadas para a implementação do módulo T completo e também o desenvolvimento do módulo de estimação de movimento. Estas arquiteturas foram direcionadas para a tecnologia ASIC (Application Specific Integrated Circuit) TSMC 0,18um CMOS standard cells. As arquiteturas foram descritas em VHDL e a ferramenta Leonardo Spectrum da Mentor Graphics foi utilizada para a síntese e obtenção dos resultados de área utilizada e atraso dos circuitos. 1.4 Contribuições do Trabalho A partir do estudo realizado, para a exploração das diferentes alternativas arquiteturais dos módulos das Transformadas Diretas e de Estimação de Movimento do padrão H.264/AVC, com técnicas para o aumento de desempenho, apresentam-se as seguintes contribuições: - Exploração arquitetural das diferentes arquiteturas específicas para os algoritmos propostos em (AGOSTINI, 2007). Neste trabalho citado, foram especificadas arquiteturas para os módulos das Transformadas Direta e Inversa. Neste trabalho, foram utilizadas técnicas para o aumento de desempenho nas arquiteturas implementadas, especificamente da Transformada Hadamard 4x4. Em particular, foram aplicados operadores aritméticos eficientes nestas arquiteturas para a redução da complexidade computacional dos cálculos realizados por estes circuitos. Os principais resultados estão apresentados em (SILVA, 2009) - Validação do bloco T do padrão H.264/AVC. Além das Transformadas Hadamard, o bloco T do padrão H.264/AVC é composto pela Transformada Discreta do Cosseno (DCT). Desta forma, nesta parte do trabalho houve a validação completa do bloco T, verificando-se o impacto do aumento de desempenho que é obtido quando da aplicação das técnicas propostas em todos os blocos das transformadas. Para tal, todos os módulos das transformadas foram implementados e foram realizadas comparações de desempenho entre as diferentes configurações propostas. (ALTERMANN, 2009) - Exploração arquitetural e aplicação de técnicas para o aumento de desempenho em algoritmos do bloco de estimação de movimento. Em (PORTO, 2008), apresentam-se arquiteturas dedicadas para realizar o processo de estimação de movimento. Este algoritmo, chamado Diamond Search, apresenta em sua estrutura um elevado número de operações aritméticos. Desta forma, o objetivo 15 nesta parte do trabalho foi a investigação do impacto em aumento de desempenho, na utilização de operadores aritméticos mais eficientes neste algoritmo heurísticos que foi implementado em hardware dedicado (SILVA 2009) (PORTO 2010). 1.5 Organização do Trabalho Este trabalho foi dividido da seguinte forma. No capítulo 2 é apresentada uma breve introdução aos conceitos de compressão de vídeo e também sobre vídeo digital. O capítulo 3 é dedicado ao histórico do padrão de compressão de vídeo H.264/AVC. No capítulo 4 é feita uma abordagem das principais características dos módulos do padrão H.264/AVC que foram utilizados neste trabalho como estudos de caso. O capítulo 5 é direcionado para o estudo realizado sobre os somadores compressores 4:2, 8:2 e 16:2. No capítulo 6 são mostradas as arquiteturas dedicadas propostas neste trabalho com o uso dos somadores compressores, bem como os resultados obtidos com estas estruturas. Finalmente, no capítulo 7 são apresentadas as conclusões obtidas com o trabalho, assim como as principais idéias para trabalhos futuros. 16 2 CONCEITOS BÁSICOS DA COMPRESSÃO DE VÍDEO Este capítulo apresenta, resumidamente, alguns conceitos básicos sobre vídeos digitais, compressão de vídeos digitais e também sobre a sua forma de representação. 2.1 Espaço de Cores e Sub-Amostragem de Cores A representação digital de um vídeo colorido está associada à interpretação das cores pelo sistema visual humano. O sistema humano de visão possui elementos sensíveis à luz chamados bastonetes e cones. Os bastonetes são sensíveis à intensidade luminosa, enquanto os cones são sensíveis às cores primárias (GONZÁLES, 2003). Em função desta estrutura do sistema visual humano, todas as cores são vistas como combinações variáveis das três cores primárias: vermelho (R - red), verde (G - green) e azul (B - blue). O sistema visual humano é capaz de discernir milhares de cores distintas a partir de combinações de intensidades distintas das cores primárias. Por outro lado, o sistema visual humano não consegue distinguir mais do que duas dúzias de tons de cinza que, na verdade, indicam a intensidade luminosa da imagem (GONZÁLES, 2003). Existem muitas formas de representar as cores de forma digital. Um sistema para representar cores é chamado de espaço de cores e a definição do espaço de cor a ser utilizado para representar um vídeo é essencial para a eficiência da codificação deste vídeo. São vários os espaços de cores usados para representar imagens digitais, tais como: RGB, HSI e YCbCr (SHI, 1999). O espaço de cores RGB é um dos mais comuns, tendo em vista que é este o espaço de cores utilizado nos monitores coloridos. O RGB representa, em três matrizes distintas, as três cores primárias captadas pelo sistema visual humano: vermelho, verde e azul. Daí advém o nome deste espaço de cores (do inglês red, green e blue - RGB). No espaço de cores YCbCr as três componentes utilizadas são luminância (Y), que define a intensidade luminosa ou o brilho, crominância azul (Cb) e crominância vermelha (Cr) (MIANO, 1999). Os componentes R, G e B possuem um elevado grau de correlação, tornando difícil o processamento de cada uma das informações de cor de forma independente. Por isso, a compressão de vídeos é aplicada para espaços de cores do tipo luminância e crominância, como o YCbCr (RICHARDSON, 2002). Outra vantagem do espaço de cor YCbCr sobre o espaço RGB é que no espaço YCbCr a informação de cor está completamente separada da informação de brilho. Deste modo, estas 17 informações podem ser tratadas de forma diferenciada pelos compressores de imagens estáticas e vídeos. O sistema visual humano possui cerca de 240 milhões de bastonetes e 13 milhões de cones (GONZALES, 2003). Deste modo, o sistema visual humano é muito mais sensível a informações de luminância do que as informações de crominância. Desta forma, é conveniente que os padrões de compressão de imagens estáticas e vídeos explorarem esta característica psicovisual humana para aumentar a eficiência de codificação, o que se dá através da redução da taxa de amostragem dos componentes de crominância em relação aos componentes de luminância (RICHARDSON, 2002). Esta operação é chamada de sub-amostragem de cores e é realizada sobre o espaço de cores YCbCr nos padrões de compressão de vídeos atuais. Existem várias formas de relacionar os componentes de crominância com o componente de luminância para realizar a sub-amostragem. Os formatos mais comuns são o 4:4:4, o 4:2:2 e o 4:2:0. No formato 4:4:4, para cada quatro amostras de luminância (Y), existem quatro amostras de crominância azul (Cb) e quatro amostras de crominância vermelha (Cr). Por isso, os três componentes de cor possuem a mesma resolução e existe uma amostra de cada elemento de cor para cada pixel da imagem e, assim, a sub-amostragem não é aplicada. No formato 4:2:2, para cada quatro amostras de Y na direção horizontal, existem apenas duas amostras de Cb e duas amostras de Cr. Neste caso, as amostras de crominância possuem a mesma resolução vertical das amostras de luminância, mas possuem metade da resolução horizontal. No formato 4:2:0, para cada quatro amostras de Y, existe apenas uma amostra de Cb e uma amostra de Cr. Neste caso, as amostras de crominância possuem metade da resolução horizontal e metade da resolução vertical do que as amostras de luminância. A nomenclatura 4:2:0 é usada por motivos históricos, pois os números não representam a relação lógica entre os componentes de cor, a qual deveria ser 4:1:1 (RICHARDSON, 2003). A sub-amostragem de cor aumenta significativamente a eficiência da compressão, uma vez que parte da informação da imagem é simplesmente descartada, sem causar impacto visual perceptível ao olho humano. Considerando o formato 4:2:0 como exemplo, uma vez que cada componente de crominância possui exatamente um quarto das amostras presentes no componente de luminância, então um vídeo YCbCr no formato 4:2:0 irá utilizar exatamente a metade das 18 amostras necessárias para um vídeo RGB ou YCbCr no formato 4:4:4. Isso implica em uma taxa de compressão de 50%, considerando apenas a sub-amostragem. O padrão H.264/AVC considera que os dados do vídeo de entrada estão no espaço de cores YCbCr (PURI, 2004). Sub-amostragens de cor nos formatos 4:2:0, 4:2:2 e 4:4:4 são permitidos, a Figura 2.1 mostra o formato 4:2:0 que é o mais utilizado. Os círculos com preenchimento em branco são amostras de luminância (Y), enquanto os círculos em cinza e preto, representam as amostras de Crominância vermelha (Cr) e Crominância azul (Cb) respectivamente. Figura 2.1: Mostra da Sub-amostragen no Formato 4:2:0 2.2 Partição do Vídeo Digital Um vídeo digital é formado por uma seqüência de quadros (frames), que, por sua vez, são formados por pontos (pixels). Cada quadro do vídeo é dividido em slices, que são divididos em macroblocos. Os macroblocos podem ser divididos em sub-macroblocos e blocos. O padrão H.264/AVC é o primeiro que prevê a utilização de macroblocos com tamanhos variáveis (16x16, 16x8, 8x16 ou 8x8 pixels). Uma partição 8x8 é chamada sub-macrobloco, e um sub-macrobloco com partição 8x8 pode ser particionado em blocos de 8x8, 8x4, 4x8 ou 4x4 pixels (PURI, 2004). As Figuras 2.2 e 2.3 demonstram esta divisão. 19 Figura 2.2: Possíveis Partições de um Macrobloco Figura 2.3: Possíveis Partições de um Sub-Macrobloco A escolha do tamanho da partição depende de alguns fatores, porém nas áreas do quadro do vídeo digital onde se tem mais movimento, o tamanho de partição escolhido deve ser menor do que aqueles escolhidos para áreas onde se tem um menor movimento. Isto ocorre devido ao fato de se tentar reduzir ao máximo o resíduo gerado pela etapa de predição. O resíduo é a diferença dos elementos de luminância entre o quadro de referência e o quadro de vídeo atual (que está sendo codificado), este resíduo passará pelo módulo das transformadas após a etapa de predição para eliminar informações que não são relevantes para o olho humano. A Figura 2.4 mostra um quadro de resíduos gerados sem compensação de movimento, ou seja, através da predição intra-quadro, onde o codificador escolhe a melhor partição de acordo com as mudanças existentes entre quadros, onde a menos mudanças a partição escolhida é 16x16 pixels, enquanto em áreas com mais mudanças partições menores são selecionadas. 20 Figura 2.4: Divisão de um Quadro com Várias Partições Em um vídeo digital existe muita redundância na informação decorrente da similaridade existente entre pontos vizinhos e também entre quadros vizinhos. Pontos vizinhos são pontos que pertencem ao mesmo quadro e que são espacialmente vizinhos. Quadros vizinhos são quadros pertencentes ao mesmo vídeo e que são temporalmente vizinhos. A compressão de vídeos é uma técnica que utiliza algoritmos (codecs) para diminuir o tamanho de uma imagem através da redução destas informações redundantes que formam a imagem (SILVA, 2006). 2.3 Redundância de Dados O objetivo da compressão de vídeo é eliminar as informações que são redundantes em um vídeo digital, e assim, diminuir o número de bits necessários para a sua representação. Os padrões de compressão de vídeo exploram justamente uma característica dos vídeos digitais que são os vários tipos de redundância. Existem basicamente três tipos de redundâncias que são exploradas na compressão de vídeos (AGOSTINI, 2007), são elas: 21 2.3.1 Redundância Espacial A redundância espacial é, também, chamada de redundância intra-quadro ou redundância interpixel e advém da correlação existente entre os pixels espacialmente distribuídos em um quadro. Esta correlação pode ser percebida, tanto no domínio espacial, quanto no domínio das freqüências. Esta correlação é visualmente percebida no domínio espacial quando são observados pixels vizinhos em um quadro, que tendem a possuir valores semelhantes. Neste caso, a redundância pode ser reduzida através da operação chamada de codificação intra-quadro, presente em alguns padrões de codificação de vídeo atuais. No domínio das freqüências a operação realizada para reduzir a redundância espacial é chamada de quantização. Para aplicar a quantização, antes as informações da imagem devem ser transformadas do domínio espacial para o domínio das freqüências. A quantização é uma divisão inteira dos coeficientes gerados pela transformação e reduz grande parte dos coeficientes à zero. Esta operação é irreversível, pois o resto da divisão não é armazenado e, deste modo, a quantização gera perdas no processo de codificação. Mas é importante ressaltar que estas perdas tendem a interferir de forma nula ou pouco significativa na qualidade perceptual da imagem. 2.3.2 Redundância Temporal A redundância temporal, também chamada de redundância inter-quadros, é causada pela correlação existente entre quadros temporalmente próximos em um vídeo. Na verdade, a redundância temporal poderia ser classificada como apenas mais uma dimensão da redundância espacial, como faz (GONZALES, 2003). Muitos blocos de pixels simplesmente não mudam de valor de um quadro para outro em um vídeo, como por exemplo, em um fundo que não foi alterado de um quadro para outro. Outros pixels apresentam uma pequena variação de valores causada, por exemplo, por uma variação de iluminação. Por fim, também é possível que o bloco de pixels simplesmente tenha se deslocado de um quadro para o outro, como por exemplo, em um movimento de um objeto em uma cena. Todos os padrões atuais de codificação de vídeo visam reduzir a redundância temporal. A exploração eficiente da redundância temporal conduz a elevadas taxas de compressão, o que é fundamental para o sucesso dos codificadores. 2.3.3 Redundância Entrópica A redundância entrópica está relacionada com as probabilidades de ocorrência dos símbolos codificados. A entropia é uma medida da quantidade média de informação transmitida por símbolo do vídeo (SHI, 1999). A quantidade de informação nova transmitida por um símbolo 22 diminui na medida em que a probabilidade de ocorrência deste símbolo aumenta. Então, os codificadores que exploram a redundância entrópica têm por objetivo transmitir o máximo de informação possível por símbolo codificado e, deste modo, representar mais informações com um número menor de bits. A codificação de entropia, como é chamada, utiliza diferentes técnicas e algoritmos de compressão sem perdas para atingir este objetivo. Além destes três tipos de redundância existe um outro tipo de redundância também explorada pelo padrão H.264/AVC, que diz respeito às características do sistema visual humano, que fazem com que não consigamos captar alguns tipos de informações na imagem. Além disso, algumas informações da imagem, como o brilho, por exemplo, são mais importantes para o sistema visual humano do que outras, como a crominância. Este tipo de redundância de informação é chamado de redundância psicovisual. Este tipo de redundância é explorada pelo padrão na sub-amostragem de cores utilizadas pelo vídeo digital, pois utilizando um sub-espaço de amostragem do tipo YCbCr 4:2:0, já existe um eliminação das informações de cor do vídeo, fazendo com que o vídeo já esteja representado com uma compressão referente a este tipo de redundância. 2.4 Sumário Neste capítulo foram abordados alguns conceitos básicos sobre a compressão de vídeo como: partições de macroblocos, espaço de cores e sub-amostragem de cores, além dos tipos de redundâncias existentes em vídeos digitais. No próximo capítulo serão abordados os principais pontos relacionados ao padrão H.24/AVC de compressão de vídeo, descrevendo o histórico, conceitos e as características dos principais módulos constituintes do padrão. 23 3 O PADRÃO H.264/AVC Este capítulo traz um breve histórico e alguns conceitos além dos principais módulos do codificador e do decodificador do padrão H.264/AVC de compressão de vídeo. 3.1 Histórico do padrão H.264/AVC O padrão de compressão de vídeo H.264/AVC, foco deste trabalho, é o mais novo padrão de compressão de vídeo e foi desenvolvido com o objetivo de dobrar a taxa de compressão em relação aos demais padrões existentes até então. O padrão H.264/AVC foi desenvolvido pelo JVT (ITU, 2000) que foi formado a partir de uma união entre os especialistas do VCEG da ITU-T (ITU, 2003) e do MPEG da ISO/IEC (ISO, 1993). A primeira versão do H.264/AVC foi aprovada em 2003. O padrão H.264/AVC foi desenvolvido por um período de aproximadamente quatro anos. As raízes deste padrão estão no projeto H.26L da ITU-T, que foi iniciado pelo VCEG (ITU, 2005), que construiu a chamada para propostas no início de 1998 e que criou o primeiro rascunho deste novo padrão em agosto de 1999. O objetivo do projeto H.26L era dobrar a eficiência de codificação atingida pelo padrão H.263 (ITU, 2000). Antes do padrão H.264/AVC surgir, alguns outros padrões já haviam sido criados e já estavam consolidados, servindo de base para o desenvolvimento do H.264/AVC. O primeiro padrão relevante para a construção do H.264/AVC foi o H.261 da ITU-T (ITU, 1990). Este padrão lançou as bases do que é usado até hoje na maioria dos padrões de compressão de vídeo: DPCM com estimação de movimento na direção temporal, transformada discreta do coseno, aplicada ao resíduo, e quantização linear seguida de codificação por entropia. Após o padrão H.261, surgiu o padrão MPEG-1 da ISO/IEC (ISO, 1993) seguido do padrão MPEG-2 da ISO/IEC, que também foi padronizado pela ITU-T como H.262 (ITU, 1994). Este padrão se tornou um padrão popular e é muito usado até a atualidade em diversas aplicações. Apesar do grande sucesso do padrão MPEG-2, a evolução dos padrões de compressão de vídeo não parou. O padrão H.263 (ITU, 2000) foi lançado e incorporou alguns avanços obtidos pelos padrões MPEG1 e MPEG-2, bem como técnicas novas que vinham sendo pesquisadas intensamente tanto pela indústria quanto pela academia. Em 2001 o grupo MPEG da ISO/IEC finalizou o desenvolvimento do seu mais recente padrão, conhecido como MPEG-4 Parte 2 (ISO, 1999). Então, ainda neste ano, o MPEG 24 construiu uma nova chamada de propostas, similar à do H.26L da ITU-T, para melhorar ainda mais a eficiência de codificação atingida pelo MPEG-4. Então o VCEG, da ITU-T resolveu submeter seu rascunho em resposta à chamada de propostas do MPEG e propôs a união de esforços para completar o trabalho. Analisando as respostas para sua chamada de propostas, o MPEG chegou a conclusões que afirmaram as escolhas de desenvolvimento realizadas pelo VCEG no H.26L: • A estrutura de compensação de movimento com a transformada discreta do coseno (DCT) era melhor do que as outras. • Algumas ferramentas de codificação de vídeo que foram excluídas no passado (do MPEG-2, do H.263 ou do MPEG-4 Parte 2) por causa da sua complexidade computacional, poderiam ser reexaminadas para inclusão no próximo padrão, devido aos avanços na tecnologia de hardware. • Para maximizar a eficiência de codificação, a sintaxe do novo padrão não poderia ser compatível com os padrões anteriores. Então, para permitir um avanço mais acelerado na construção do novo padrão e para evitar duplicação de esforços, o ITUT e o ISO/IEC concordaram em unir esforços para desenvolverem, em conjunto, a próxima geração de padrão para codificação de vídeo e concordaram em usar o H.26L como ponto de partida. Então, foi criado, em dezembro de 2001, o JVT (ITU, 2005), formado por especialistas do VCEG e do MPEG. O JVT tinha o objetivo de completar o desenvolvimento técnico do padrão até o ano de 2003. A ITU-T decidiu adotar o padrão com o nome de ITU-T H.264/AVC e a ISO/IEC decidiu adotar o padrão com o nome de MPEG-4 parte 10 - AVC (Advanced Video Coding Codificação de Vídeo Avançada). O padrão H.264/AVC teve seu rascunho final (ITU, 2003) aprovado em outubro de 2003 (SULLIVAN, 2005). Em julho de 2004, o JVT adicionou algumas novas funcionalidades ao padrão H.264/AVC através de uma extensão do padrão chamada de Fidelity Range Extensions (FRExt) (ITU, 2005). 25 3.2 Perfis O padrão H.264/AVC contém um grande conjunto de ferramentas de codificação de vídeo, contudo, não se faz necessária a implementação de todas as ferramentas para todas as aplicações. Por exemplo, as ferramentas de resiliência à erros, podem não serem necessárias para armazenamento de vídeos ou CDs. Se todos os decodificadores fossem obrigados a implementar todas as ferramentas, eles seriam desnecessariamente muito complexos. Assim, o padrão define subconjuntos de ferramentas de codificação, que são implementadas de acordo com a classe de aplicação. Um decodificador pode escolher por implementar somente um subconjunto (perfil) de ferramentas. Primeiramente o padrão definiu três perfis: Baseline, Main e Extended. O perfil Baseline é direcionado a aplicações como vídeotelefonia, videoconferência e vídeo sem fio. O perfil Baseline suporta codificação intra-quadro e inter-quadro (usando somente slices I e P) e uma codificação de entropia com códigos de comprimento de palavra variável adaptativos ao contexto (CAVLC). O perfil Main é focado na transmissão de televisão e no armazenamento de vídeo (AGOSTINI, 2005). Slices do tipo I (intra), são slices formados por macroblocos que foram codificados utilizando a predição intra-quadros. Os slices do tipo P (Preditivos), são os slices formados por macroblocos do tipo I e P, macroblocos do tipo P foram codificados através da predição interquadro e utilizam apenas um quadro do vídeo como referência. Os slices do tipo B (Bipreditivos), podem conter macroblocos do tipo I e B, os do tipo B são formados através da codificação inter-quadro e possuem até dois quadros como referência. Estes três perfis inicialmente propostos pelo padrão H.264/AVC não incluíram suporte para vídeos com qualidade mais elevada, como as necessárias em ambientes profissionais. Para responder às exigências deste tipo de aplicação, uma continuação do projeto JVT foi realizada para adicionar novas extensões para as capacidades do padrão original. Estas extensões foram chamadas de extensões para alcance de fidelidade (fidelity range extensions - FRExt). O FRExt produziu um grupo de quatro novos perfis chamados coletivamente de perfis High (SULLIVAN, 2004). A Figura 3.1 mostra a estrutura de divisão entre os perfis do padrão H.264/AVC. O perfil High (HP) inclui vídeo com 8 bits por amostra e com relação de cor 4:2:0. O perfil High 10 (Hi10P) suporta vídeo a 10 bits por amostra, também com uma relação de cor 26 4:2:0. O perfil High 4:2:2 (H422P) inclui suporte à relação de cor 4:2:2 e vídeos a 10 bits por amostra. Finalmente, o perfil High 4:4:4 (H444P) dá suporte à relação de cor 4:4:4 (ou seja, sem nenhuma subamostragem), suporte a vídeo com até 12 bits por amostra e, adicionalmente, suporta a codificação sem perdas em regiões do vídeo. Extended Slices SP e SI Partição de dados Grupo de Slices e ASO Main Predição ponderada High Transformada 8x8 High 4:2:2 Formato 4:2:2 Predição Intra 8x8 Slices B Slices I Monocromático Quantização adaptativa High 10 Slices P Slices Redundantes CAVLC CABAC Amostras Até 10 bits Baseline Figura 3.1: Estrutura dos Perfis Atuais do Padrão H.264/AVC (ROSA, 2009) 3.3 Formato dos Dados Codificados O H.264/AVC faz uma distinção entre e a Camada de Codificação de Vídeo (VCL) e a Camada de Abstração de Rede (NAL). A saída do processo de codificação é o dado VCL (uma seqüência de bits que representam os dados do vídeo codificado) que são mapeados para a unidade NAL para uma posterior transmissão ou armazenamento. Cada unidade NAL contém um Raw Byte Sequence Payload (RBSP), que é um conjunto de dados correspondentes ao dado do vídeo codificado ou são informações de cabeçalho. Uma seqüência de vídeo codificado é representado por uma seqüência de unidades NAL, como mostra a Figura 3.2, e pode ser transmitida através de uma rede baseada em pacotes, com uma transmissão em bitstream ou armazenada em um arquivo. O propósito de especificação separada entre a VCL e a NAL, é de fazer uma clara distinção entre as características de codificação (VCL) das características de transporte (NAL). 27 Figura 3.2: Seqüência de Unidades NAL 3.4 Núcleo do Padrão H.264/AVC O padrão H.264/AVC atingiu seu objetivo de alcançar as mais elevadas taxas de processamento dentre todos os padrões existentes. Mas para isso, foi necessário um grande aumento na complexidade computacional das operações dos codecs que seguem o padrão H.264/AVC em relação aos demais padrões disponíveis na atualidade. Este aumento de complexidade impede, pelo menos na tecnologia atual, a utilização de codecs H.264/AVC implementados em software quando as resoluções são elevadas e/ou quando se deseja tempo real, com 30 quadros por segundo, por exemplo. A complexidade do problema via software somado pelo enorme interesse comercial que reside neste padrão, têm impulsionado equipes de pesquisa e desenvolvimento ao redor do mundo a tratarem deste tema visando otimizações algorítmicas e/ou implementações em hardware para que os requisitos das aplicações sejam atendidos. Existem muitas aplicações potenciais para codecs H.264/AVC, que vão desde aparelhos celulares à televisão digital e, por isso, a indústria está extremamente ativa nesta área e algumas soluções para HDTV já estão disponíveis, principalmente para decodificadores (que são mais simples). Estas soluções comerciais costumam conter muitos segredos industriais, de modo que muitas destas soluções não estão reportadas em detalhes na literatura. Do ponto de vista da academia, existem muitas equipes espalhadas pelo mundo trabalhando com o H.264/AVC, buscando soluções de software e/ou hardware para tentar resolver o problema da complexidade elevada do padrão. Vários trabalhos têm sido publicados nos últimos anos, mas a área encontra-se ainda repleta de problemas sem solução e, conseqüentemente, muitas contribuições inovadoras poderão ser descobertas e implementadas. A Figura 3.3 apresenta o codificador. Existem, neste modelo, dois quadros do vídeo sendo utilizados simultaneamente. Além do quadro atual, que está sendo comprimido, também é utilizado um quadro de referência anteriormente processado. Os quadros são divididos em diversas partes, normalmente chamadas de macroblocos, para serem processados utilizando a codificação inter-quadros ou intra-quadros. A chave seletora na Figura 3.3 representa a decisão tomada pelo hardware de controle do codificador sobre qual modo de codificação deve ser 28 utilizado para cada bloco. A codificação Intra-quadros não depende de blocos de quadros anteriores e é realizada considerando apenas as informações contidas no quadro. Deste modo, na codificação Intra-quadros é explorada a redundância espacial. A codificação Inter-quadros é mais utilizada e são construídos a partir do quadro atual e de quadros previamente codificados. Após um bloco do quadro atual ser codificado, pela codificação intra-quadro ou pela codificação inter-quadros, é realizada uma subtração entre os valores do bloco original e os resultados da codificação. Esta diferença é chamada de resíduo. O resíduo, então, é enviado para os módulos responsáveis por reduzir a redundância espacial no domínio das freqüências. A primeira operação nesta direção é a transformada (módulo T na Figura 3.3). O módulo T transforma a informação do domínio espacial para o domínio das freqüências. Neste domínio, a Quantização pode ser aplicada, reduzindo a redundância espacial presente nos resíduos. Por fim, a codificação de entropia reduz a redundância entrópica, que está relacionada à forma como os dados são codificados. Figura 3.3: Diagrama de Blocos do Codificador do Padrão H.264/AVC (RICHARDSON, 2003) Como as perdas de informação, que geram a diferença entre o quadro atual original e o quadro atual reconstruído, acontecem no estágio de quantização, a imagem deve ser reconstruída a partir deste ponto. A codificação e decodificação de entropia são desnecessárias para a reconstrução do quadro atual justamente porque estas etapas não geram perdas. Então, é aplicada a operação inversa da quantização e, após a quantização inversa, é aplicada a transformada inversa, gerando os resíduos reconstruídos. Aos resíduos é somado o resultado da codificação intra-quadro ou inter-quadros do bloco reconstruído. Finalmente, o bloco reconstruído está pronto 29 e pode ser armazenado para ser utilizado pela codificação inter-quadros do próximo quadro ou pode ser utilizado diretamente pela codificação intra-quadro dos próximos blocos do quadro atual. A Figura 3.4 mostra o decodificador do padrão H.264/AVC. Como a codificação de entropia não gera perdas de informação, a operação de decodificação de entropia gera exatamente o mesmo resultado gerado pela saída da quantização no codificador. Após a decodificação de entropia, as amostras remontadas são entregues para a quantização inversa e para a transformada inversa, reconstruindo o resíduo. Estas operações são idênticas às apresentadas no codificador. A decodificação inter-quadros utiliza o quadro de referência para localizar os blocos de referência. Estes blocos são, então, somados aos resíduos, para gerar os blocos reconstruídos. Finalmente, os blocos reconstruídos são armazenados para serem usados como referência para a decodificação do próximo quadro e para a visualização do vídeo decodificado. A decodificação intra-quadro utiliza os blocos reconstruídos do quadro atual para reconstruir os blocos codificados pelo codificador inter-quadros. De maneira similar à codificação inter-quadros, os macroblocos que passam pela decodificação intra-quadro são somados aos resíduos e armazenados para serem usados como referência e para visualização do vídeo. Figura 3.4: Diagrama de Blocos do Decodificador do Padrão H.264/AVC (RICHARDSON, 2003) 3.4.1 Módulo de Predição Inter-Quadro Neste módulo estão contidos os módulos de estimação de movimento (ME – Motion Estimation) e compensação de movimento (MC – Motion Compensation), que juntos realizam um processo de predição de um array retangular de pixels, que pode ser um macrobloco ou bloco, através da escolha de um outro array retangular similar de algum quadro de referência que 30 já foi previamente codificado, e mapeando esta escolha através de um vetor de movimento (MV). Como já foi dito anteriormente no padrão H.264/AVC este array retangular pode ter os seguintes tamanhos: 4x4, 4x8, 8x4, 8x8, 16x8, 8,16 e 16x16 pixels. O módulo da estimação de movimento está presente apenas nos codificadores. Este módulo é o que apresenta a maior complexidade computacional dentre todos os módulos de um codificador H.264/AVC (PURI, 2004). Este grande custo computacional é função das inovações inseridas neste módulo do padrão, que tiveram o objetivo de atingir elevadas taxas de compressão. Residem nos módulos da ME e MC as principais fontes de ganhos do H.264/AVC em relação aos demais padrões de compressão de vídeo (RICHARDSON, 2003). Além do uso de blocos de tamanho variável para realizar a ME e a MC. O H.264/AVC também prevê o uso de múltiplos quadros de referência, que não precisam ser somente os quadros I ou P imediatamente anteriores ou posteriores. Também é uma inovação o uso de novas opções para a bi-predição, como a predição ponderada e direta para os slices do tipo B. Além disso, os vetores de movimento podem apontar para fora da borda do quadro. Por fim, a predição de vetores de movimento com base nos vetores vizinhos também é uma novidade (ITU-T, 2005), (RICHARDSON, 2003) e (WIEGAND, 2003). Figura 3.5: Determinação do Vetor de Movimento para um Bloco A estimação de movimento deve prover as ferramentas de codificação capazes de localizar, nos quadros de referência, qual macrobloco mais se assemelha ao macrobloco atual. Assim que o macrobloco é encontrado, a ME deve gerar um vetor indicando a posição deste macrobloco no quadro de referência. Este vetor é chamado de vetor de movimento e deve ser 31 inserido junto com a codificação do macrobloco. A Figura 3.5 ilustra um quadro de referência e um quadro atual. No quadro de referência está destacada a área de pesquisa e o bloco que está sendo pesquisado. Para a simplificação do processo, a realização da estimação de movimento é considerado apenas o componente de luminância do macrobloco. Cada componente de crominância possui a metade da resolução horizontal e vertical do componente de luminância, então os componentes horizontal e vertical de cada vetor de movimento são divididos por dois para serem aplicados aos blocos de crominância (AGOSTINI, 2007). A compensação de movimento é o processo de compensação para o deslocamento de objetos movidos de um quadro para outro. O Compensador de Movimento (MC) no codificador H.264/AVC é uma etapa precedida pela etapa de Estimação de Movimento (ME). É função da compensação de movimento, a partir do vetor de movimento gerado na ME, localizar os blocos de melhor casamento na memória de quadros anteriormente codificados (quadros passados e/ou futuros) e montar o quadro predito. Este quadro será subtraído do quadro atual para gerar o quadro de resíduos que passará pelas transformadas existentes no módulo T (transformada discreta do cosseno - DCT, transformada Hadamard 4x4 e transformada Hadamard 2x2) que é foco deste trabalho. As Figuras 3.6, 3.7 e 3.8 mostram o mesmo quadro de um vídeo antes e depois da compensação de movimento e também um quadro de resíduo das luminâncias, utilizando uma partição de macrobloco de 16x16 pixels (SILVA, 2006). 32 Figura 3.6: Quadro do Vídeo Antes da MC Na Figura 3.7 ficam nítidas as bordas dos blocos de 16x16 pixels, após a reconstrução da imagem pelo compensador de movimento. Isto acontece devido ao fato do "casamento" entre blocos vizinhos não acontecer perfeitamente, fazendo com que seja gerado o chamado Efeito de Bloco. Para suavizar este efeito é utilizado um filtro de deblocagem, este filtro é detalhado na seção 3.4.5. 33 Figura 3.7: Quadro do Vídeo Após a MC Figura 3.8: Quadro de Luminância Resídual 34 3.4.2 Módulo de Predição Intra-Quadro A predição intra-quadro é realizada através da interpolação de valores dos pixels das bordas de blocos espacialmente vizinhos que foram anteriormente codificados. Esta interpolação é realizada direcionalmente, com múltiplos modos, sendo cada um deles empregado em uma direção espacial diferente, o padrão H.264/AVC define nove modos diferentes de predição intraquadro (PURI, 2005) para blocos de luminância 4x4, estes nove modos estão mostrados na Figura 3.8, onde a direção espacial é indicada pela direção da seta (AGOSTINI, 2007). Contudo, a predição intra-quadro pode ocorrer com blocos de luminância com tamanho de 16x16 pixels. Neste caso, existem quatro modos possíveis de se realizar a predição, conforme está apresentado na Figura 3.9. Os modos 0 e 1 são simples cópias na vertical ou na horizontal das amostras reconstruídas das bordas. O modo 2 é o modo DC e é formado por uma média simples dos elementos das bordas, cujo resultado é copiado para todas as posições do bloco. O modo 3 aplica uma função linear que considera as amostras horizontais e verticais (H e V na Figura 3.9) das bordas. Figura 3.9: Nove modos de predição Intra-Quadro para Blocos de 4x4 Pixels 35 Na Figura 3.9, que envolve a predição Intra-Quadro 4x4, nos modos 0 (vertical) e 1 (horizontal) o bloco predito é construído pela cópia das amostras vizinhas A-D e I-L. O modo 2 (DC) faz uma média das amostras A-D e I-L e copia o resultado para todas as amostras do bloco predito. Os modos diagonais (3 a 8) são calculados por interpolações lineares (usando os valores das amostras vizinhas), dependendo das direções e da posição da amostra no bloco predito. Figura 3.10: Quatro modos de predição Intra-Quadro para Blocos de 16x16 Pixels Na Figura 3.10, que envolve a predição Intra-Quadro 16x16, no modo 0, o macrobloco predito é construído pela cópia das amostras vizinhas contidas em H.. O modo 1 é similar ao modo 0, mas copia as amostras em V. O modo 2 (DC) realiza uma média das amostras contidas em H e V e copia o resultado para todas as amostras do macrobloco predito. O modo 3 é o mais complexo, pois necessita a geração prévia de parâmetros de ajuste antes do cálculo da predição para cada amostra do macrobloco predito. Estes parâmetros de ajuste estão relacionados com as coordenadas x,y do macrobloco e com os valores de H e V que são previamente calculados em função das coordenadas x,y do macrobloco (DINIZ, 2009). Deve-se observar que os modos de predição para amostras de crominância são semelhantes aos modos Intra 16x16, porém os números dos modos são alterados (modo 0 – DC, modo 1 – horizontal, modo 2 – vertical, modo 3 – plano). Além disso, os modos de predição Intra-Quadro para crominância são aplicados em blocos 8x8. 3.4.3 O Módulo das Transformadas Diretas (T) e das Transformadas Inversas T-1 O módulo T, que será o alvo deste trabalho, é responsável pelas transformadas diretas e está presente apenas nos codificadores H.264/AVC. As entradas para o módulo T são blocos 4x4 de resíduos gerados pela etapa de predição. A FDCT 2-D (Transformada Discreta do Cosseno Direta bi dimensional) é aplicada a todas as amostras de entrada, tanto de luminância quanto de 36 crominância. O cálculo da FDCT 2-D é aplicado sobre todos os dados de entrada, mas, no caso de amostras com informação de crominância ou com informação de luminância, cuja predição tenha sido do tipo intra-quadro 16x16, é necessário a realização de um cálculo extra. Em ambos os casos, aplica-se a transformada Hadamard 2-D direta sobre os coeficientes DC resultantes da FDCT 2-D. Esta segunda transformada, trata-se de uma inovação do padrão H.264/AVC e tem por objetivo atingir ainda mais compressão em áreas homogêneas do vídeo. Os coeficientes DC dos blocos de luminância cuja predição tenha sido intra-quadro 16x16 são submetidos a uma transformada Hadamard 4x4 direta. Por outro lado, uma transformada Hadamard 2x2 direta é aplicada a todos os coeficientes DC dos blocos de crominância. A transformada Hadamard 4x4 direta definida pelo padrão H.264/AVC é aplicada apenas sobre os elementos DC dos blocos 4x4 (resultantes da aplicação da FDCT 2-D) de um macrobloco 16x16 de luminância que tenha utilizado a predição intra-quadro 16x16. Maiores detalhes deste bloco das transformadas serão abordados no Capítulo 4. As operações das transformadas inversas (bloco T-1) são muito semelhantes às operações das transformadas diretas. As transformadas Hadamard 2x2 e Hadamard 4x4 são calculadas diretamente sobre os coeficientes DC provenientes da etapa de quantização, antes da etapa de quantização inversa. Após estas operações, os coeficientes são entregues à etapa de quantização inversa para então serem processado pela etapa inversa da Transformada Discreta do Coseno Inversa (IDCT 2-D). Para coeficientes de crominância ou de luminância, quando a predição selecionada é Intra 16x16, a transformada Hadamard 4x4 inversa é aplicada sobre os coeficientes DC dos blocos de luminância, enquanto que, para os blocos de crominância, aplica-se a Hadamard 2x2 inversa sobre os blocos 2x2 de coefciientes DC de crominância. 3.4.4 O Módulo da Quantização Direta (Q) e da Quantização Inversa (Q-1) O módulo Q realiza a quantização direta e a correção da escala do cálculo das transformadas. Este módulo está presente apenas no codificador H.264/AVC. A quantização é também chamada de scaling no padrão H.264/AVC. O fator de escala para cada elemento em cada bloco varia em função do parâmetro de quantização (QP – Quantization Parameter) associado com o macrobloco que contém o bloco, e com uma função de posição do elemento dentro do bloco. Um algoritmo de controle no codificador do padrão controla o valor do parâmetro de quantização (PURI, 2004). 37 O módulo Q-1 realiza a quantização inversa e a correção da escala do cálculo das transformadas. Alguns autores defendem que não é correto chamar este bloco de quantização inversa, uma vez que a quantização direta é um processo irreversível. Deste modo, estes autores utilizam o termo rescaling ao invés do termo quantização inversa (AGOSTINI, 2007). O módulo Q-1 está presente nos codificadores e nos decodificadores H.264/AVC, como pode ser visto nas Figuras 3.1 e 3.2. 3.4.5 O Módulo do Filtro de Deblocagem Este filtro é mandatório nos decodificadores, mas opcional nos codificadores de vídeo (de acordo com o padrão H.264/AVC). Este filtro se encontra no laço de codificação interquadros (ver Figura 3.3), tendo como objetivo tornar mais suave o efeito de blocos do quadro reconstruído antes dele ser usado para a predição do tipo Inter-quadros de um macrobloco ou para ser exibido. Este efeito de bloco pode ser visualizado na Figura 3.7. O filtro de deblocagem opera sobre um macrobloco após a compensação de movimento e da codificação residual, ou sobre um macrobloco após a predição intra-quadro e a codificação residual, dependendo se o macrobloco é codificado através da codificação intra-quadro ou interquadro. O resultado na saída do filtro de deblocagem é armazenado para ser usado como quadro de referência, exceção para aquelas figuras que não serão usadas como quadro de referência. O filtro atua nas bordas do macrobloco e do bloco, a operação do filtro de deblocagem é adaptativa em relação a um conjunto de vários fatores, entre eles estão o parâmetro de quantização do macrobloco atual e dos macroblocos vizinhos, a magnitude do vetor de movimento e o tipo de codificação do macrobloco. Também são levados em consideração os valores dos pixels que serão filtrados, tanto do macrobloco atual como os valores dos macroblocos vizinhos. 3.4.6 O Módulo da Codificação de Entropia Na codificação de entropia, que está presente nos codificadores e decodificadores o padrão H.264/AVC introduz algumas ferramentas que aumentam bastante a sua eficiência de codificação. Nos níveis hierárquicos superiores (quadros,etc.), os elementos sintáticos são codificados usando códigos binários fixos ou de comprimento variável. A partir do nível de slices ou abaixo (macroblocos, blocos, etc.), os elementos sintáticos são codificados usando a 38 codificação aritmética adaptativa ao contexto (CABAC) (RICHARDSON, 2003) ou códigos de comprimento variável (VLC). No caso do uso de VLC, a informação residual (coeficientes das transformadas quantizados) é codificada usando a codificação de comprimento variável adaptativa ao contexto (CAVLC) (RICHARDSON, 2003), enquanto que as demais unidades de codificação são codificadas usando códigos de comprimento variável com construção regular, como a codificação Exp-Golomb (SALOMON, 2000). A opção pelo CABAC não está disponível nos perfis baseline e extended. A principal inovação introduzida na codificação de entropia do padrão H.264/AVC, tanto na codificação aritmética quanto na codificação VLC é o uso de codificação adaptativa baseada em contextos. Nela, a maneira com que são codificados os diversos elementos sintáticos depende do elemento a ser codificado, da fase em que se encontra o algoritmo de codificação e dos elementos sintáticos que já foram codificados (AGOSTINI, 2007). A especificação do padrão H.264/AVC define apenas a sintaxe do bitstream e o processo de decodificação. O processo de codificação é deixado de fora do escopo do padrão para permitir maior flexibilidade para as implementações. Mas o controle do codificador é um problema chave para a compressão, pois ele determina quais as decisões de codificação serão tomadas para cada vídeo processado (WIEGAND, 2003) e uma das decisões que o codificador necessita tomar é sobre qual o tipo de codificação utilizar (CABAC ou CAVLC). É muito importante que as decisões tomadas sejam as melhores possíveis, pois com escolhas sub-ótimas, alguns dos benefícios trazidos pelo H.264/AVC podem ser perdidos (PURI, 2004). Independente da decisão tomada pelo codificador o decodificador deve estar apto para atender a todas. A codificação/decodificação aritmética requer operações aritméticas para gerar as faixas, o que faz com que a codificação aritmética (CABAC) seja bem mais complexa computacionalmente do que os códigos de comprimento variável (CAVLC). Esta complexidade elevada deve ser tratada tanto pelo codificador quanto pelo decodificador H.264/AVC e é um custo adicional associado ao uso do CABAC. Por outro lado, os ganhos em eficiência de codificação com a utilização do CABAC são significativos, 15% mais eficiente. Assim, o compromisso entre complexidade e eficiência de codificação deve ser avaliado para a tomada de decisão de qual tipo de codificador será utilizado na codificação de entropia dos codecs H.264/AVC. 39 3.5 Alguns Trabalhos da Literatura de Desenvolvimento dos Módulos do Padrão H.264/AVC Como já foi citado neste trabalho existe muita pesquisa sendo realizada sobre o padrão H.264/AVC, tanto pela comunidade acadêmica quanto pela indústria, pois, o H.264/AVC está sendo adotado como o padrão para as mais diversas aplicações, desde a TV Digital, onde as informações da imagem do vídeo serão transmitidas na forma digital (bit) ao invés da forma analógica tradicional, até o Blu-Ray que é um formato de disco óptico da nova geração para vídeo de alta definição e armazenamento de dados de alta densidade e que compete para se converter no padrão de discos ópticos sucessor do DVD tendo como seu rival o HD-DVD. Portanto esta seção tem como objetivo mostrar alguns trabalhos de pesquisa que estão sendo realizados na área e que permitem a utilização deste padrão em várias aplicações. São apresentados alguns trabalhos de pesquisa para cada um dos blocos do padrão H.264/AVC ,mostrados nas Figuras 3.1 e 3.2. No trabalho de (JIN, 2007), é proposta uma execução em pipeline para a codificação Intra-Quadro 4x4, a fim de reduzir as dependências entre blocos consecutivos. Além disso, o trabalho cita que esta execução da predição Intra-Quadro com pipeline pode ser integrado com outras operações da codificação Intra-Quadro, permitindo uma execução em paralelo. O trabalho também mostra que com esta implementação o tempo de execução é reduzido em até 41% quando comparado com trabalhos anteriores. Em (HWANGBO, 2007), uma arquitetura para a transformada inversa 2-D do decodificador do H.264/AVC é proposta. A arquitetura utiliza um bloco de multiplicação e permutação de matrizes. Pela utilização da permutação de matrizes, a matriz da IDCT é regularizada e a transformada Hadamard inversa é inserida na IDCT com uma menor modificação. Com isto, esta arquitetura proposta eliminou o array de registradores de transposição para fazer a transformada direta 2-D possível com a latência mínima de um ciclo de clock. No trabalho de (AZEVEDO, 2007), é apresentado o desenvolvimento de uma arquitetura para a compensação de movimento bi-preditiva para o decodificador do H.264/AVC (MoCHA). O projeto da arquitetura caracterizou uma hierarquia de memória para reduzir a largura de banda e o número de ciclos de acesso a memória. A arquitetura usa um datapath simples para processar 40 áreas com referências bi-preditivas e processa amostras de luminância e chrominância em paralelo. Em (CHAO, 2007), é proposta uma arquitetura de decodificação combinada e o projeto de transformada flexível com um alto throughput para a decodificação do resíduo dos decodificadores do H.264/AVC. A quantização inversa é combinada com a CAVLC para conseguir uma simplificação no decodificador. Além disso, é também proposta uma arquitetura para a transformada flexível que realiza a computação de todas as transformadas que são utilizadas no decodificador do padrão H.264/AVC. Assim, todas as transformadas são realizadas na mesma arquitetura. Este trabalho de dissertação de mestrado tem como objetivo dar uma contribuição para o desenvolvimento do padrão H.264/AVC com técnicas para o aumento de desempenho dos blocos das Transformadas e de Estimação de Movimento. 3.6 Sumário Este capítulo apresentou as principais características do padrão H.264/AVC. Foi abordado o histórico do padrão, assim como os principais perfis, que incluem as principais ferramentas do padrão, de acordo com a aplicação. Foram também mostradas as principais características dos principais módulos que compõem o codificador e o decodificador do padrão H.264/AVC. O próximo capítulo será dedicado ao estudo das transformadas diretas e da estimação de movimento do padrão H.264/AVC, que são os principais alvos de estudo deste trabalho. 41 4 TRANSFORMADAS DIRETAS (BLOCO T) E ESTIMAÇÃO DE MOVIMENTO DO PADRÃO H.264/AVC Dadas as elevadas taxas de compressão de dados necessárias para a utilização das novas tecnologias, qualquer sistema de codificação de vídeo moderno terá que fazer uso da compensação/estimação de movimento para minimizar a redundância temporal em seqüências de vídeo. A redundância temporal (também chamada de redundância inter-quadros) é causada pela correlação existente entre quadros temporalmente próximos em um vídeo. Contudo, ao contrário do que acontece nas aplicações de emissão e armazenamento de vídeo, os requisitos em termos de desempenho impostos por estas aplicações não permitem o uso de métodos ótimos de estimação de movimento, tal como o algoritmo de pesquisa exaustiva. Desta forma, torna-se necessária a pesquisa de algoritmos que possam atender aos requisitos de reduzida complexidade computacional com aspectos de eficiência na qualidade do vídeo digital em alta definição. Neste trabalho, será utilizado como ponto de partida o algoritmo de estimação de movimento proposto em (PORTO, 2008), que é baseado no algoritmo de busca Diamond Search. Além da estimação de movimento, a etapa de predição intra-quadro é outra inovação introduzida pelo padrão H.264/AVC, pois é realizada no domínio espacial. O módulo das transformadas (chamado de bloco T) aparece no caminho crítico da codificação intra-quadro. os algoritmos das Transformadas Hadamard 4x4 e 2x2 e Transformada Discreta do Cosseno (DCT), que fazem parte integrante do bloco T do padrão H.264/AVC, agregam um grande número de operações aritméticas. Desta forma, torna-se importante a implementação de arquiteturas dedicadas destes algoritmos, com operadores aritméticos eficientes, que possam reduzir a complexidade computacional dos cálculos realizados por estes módulos. A seguir são apresentados conceitos das transformadas presentes no módulo T do padrão H.264/AVC, bem como os principais conceitos relativos à etapa de estimação de movimento. 4.1 O Módulo das Transformadas Diretas (T) Como dito anteriormente, a predição intra-quadro é mais uma inovação do padrão H.264/AVC. Após um bloco do quadro atual ser codificado pela codificação intra-quadro ou pela codificação inter-quadros, é realizada uma subtração entre os valores do bloco original e os resultados da codificação. Esta diferença é chamada de resíduo. O resíduo é enviado para os módulos responsáveis por reduzir a redundância espacial no domínio das freqüências. 42 A redundância espacial advém da correlação existente entre os pixels espacialmente distribuídos em um quadro. Esta correlação pode ser percebida, tanto no domínio espacial, quanto no domínio das freqüências. No domínio espacial, esta correlação é visualmente percebida quando são observados pixels vizinhos em um quadro, que tendem a possuir valores semelhantes. Neste caso, a redundância pode ser reduzida através da operação chamada de codificação intraquadro. No domínio das freqüências a operação realizada para reduzir a redundância espacial é chamada de quantização. Para aplicar a quantização, antes as informações da imagem devem ser transformadas do domínio espacial para o domínio das freqüências. A primeira operação nesta direção é o módulo T (módulo das transformadas) que transforma a informação do domínio espacial para o domínio das freqüências. Após, a quantização pode ser aplicada, reduzindo a redundância espacial presente nos resíduos. No bloco da quantização ocorre a eliminação de informação que não é perceptível ao olho humano, ou mesmo a eliminação de informação desnecessária para o perfeito entendimento do vídeo. O módulo T, que será o alvo deste trabalho e está apresentado na Figura 4.1, é responsável pelas transformadas diretas e está presente apenas nos codificadores H.264/AVC. As entradas para o módulo T são blocos 4x4 de resíduos gerados pela etapa de predição. A FDCT 2D (Transformada Discreta do Cosseno Direta bi dimensional) é aplicada a todas as amostras de entrada, tanto de luminância quanto de crominância. O cálculo da FDCT 2-D é aplicado sobre todos os dados de entrada, mas, no caso de amostras com informação de crominância ou com informação de luminância, cuja predição tenha sido do tipo intra-quadros 16x16, é necessário a realização de um cálculo extra. Em ambos os casos, aplica-se a transformada Hadamard 2-D direta sobre os coeficientes DC resultantes da FDCT 2-D. Esta segunda transformada, trata-se de uma inovação do padrão H.264/AVC e tem por objetivo atingir ainda mais compressão em áreas homogêneas do vídeo. Os coeficientes DC dos blocos de luminância, cuja predição tenha sido intra-quadros 16x16, são submetidos a uma transformada Hadamard 4x4 direta. Por outro lado, uma transformada Hadamard 2x2 direta é aplicada a todos os coeficientes DC dos blocos de crominância. A transformada Hadamard 4x4 direta definida pelo padrão H.264/AVC é aplicada apenas sobre os elementos DC dos blocos 4x4 (resultantes da aplicação da FDCT 2-D) de um macrobloco 16x16 de luminância que tenha utilizado a predição intra-quadros 16x16. 43 Figura 4.1: Diagrama de Blocos do Módulo da Transformadas Diretas (T) A Figura 4.2 mostra como o bloco T separa as 16x16 amostras de luminância (Y) e as 8x8 amostras de crominância (Cb e Cr) para as transformadas. Inicialmente, o macrobloco de luminância (Y na Figura 4.2) passa pela FDCT 2-D. Se o modo é intra-quadro 16x16, então, como foi explicado, os coeficientes DCs das matrizes 4x4 resultantes da FDCT 2-D passam pela Hadamard 4x4 direta. Neste caso, primeiramente é enviado para saída o bloco -1 na Figura 4.2, com os resultados da Hadamard 4x4 direta, e depois os elementos AC são o enviados para a saída (blocos 0 a 15 na Figura 4.2). Se o modo não é intra-quadro 16x16, então os blocos 0 a 15 são enviados diretamente para a saída e a Hadamard 4x4 não é aplicada. Seguindo os 16 blocos de luminância, são processados quatro blocos de crominância Cb e quatro blocos de crominância Cr. Os blocos de crominância passam pela FDCT 2-D e, sob os elementos DC dos resultados, é aplicada a Hadamard 2-D 2x2. Então é enviado para a saída o bloco 16 na Figura 4.2, com os resultados da Hadamard 2x2 para o componente Cb, depois é enviado o bloco 17, com os resultados da Hadamard 2x2 para Cr. Finalmente, os coeficientes AC de crominância são enviados para a saída, primeiro os de Cb (blocos 18 a 21) e depois os de Cr (blocos 22 a 25) (AGOSTINI, 2005). 44 Figura 4.2: Ordem de Processamento de Amostras pelo Módulo T A seguir são apresentados os principais conceitos de cada uma das transformadas presentes no módulo T do padrão H.264/AVC. 4.1.1 A Transformada Discreta do Cosseno (DCT) Como mostrado em (KHAYAM, 2003) a DCT 2-D direta (DCT em duas dimensões) é uma extensão direta da FDCT 1-D (Forward DCT 1-D). Esta transformada é aplicada a todas as amostras de entrada, tanto de luminância quanto de crominância. A FDCT 2-D do padrão H.264/AVC é uma aproximação inteira da DCT 2-D real. Esta aproximação foi realizada para reduzir a complexidade do cálculo e evitar erros de casamento entre o codificador e o decodificador, ou seja, evitar que sejam realizados cálculos diferentes para a codificação e a decodificação de um mesmo quadro do vídeo. O cálculo da FDCT 2-D é aplicado sobre todos os dados de entrada, tanto de luminância (blocos 4x4) quanto de crominância (blocos 2x2), e a sua aproximação é definida de acordo com a Equação 4.1 (AGOSTINI, 2007). (4.1) 45 Na Equação 4.1, X é a matriz 4x4 de entrada, Cf é a matriz da FDCT 1-D inteira, CfT é a transposta da matriz da FDCT e Ef é a matriz de fatores de escala. O símbolo na matriz Ef são constantes de aproximação da matriz da Transformada do Coseno e são representadas pela Equação 4.2. (4.2) 4.1.2 A Transformada Hadamard No caso de amostras com informação de crominância ou com informação de luminância, cuja predição tenha sido do tipo intra-quadro 16x16, um cálculo adicional com a transformada Hadamard é realizado sobre os coeficientes DC resultantes da FDCT 2-D. A transformada Hadamard é uma inovação do padrão H.264/AVC e foi inserida com o objetivo de atingir ainda mais compressão em áreas homogêneas do vídeo. A transformada Hadamard explora uma correlação residual que ainda permaneça sobre os coeficientes da FDCT 2-D (RICHARDSON, 2002). Os coeficientes DC dos blocos de luminância cuja predição tenha sido intra-quadro 16x16 são submetidos a uma transformada Hadamard 4x4 direta. Por outro lado, uma transformada Hadamard 2x2 direta é aplicada sob os coeficientes DC dos blocos de crominância. Então, os 16 elementos DC dos 16 blocos do macrobloco irão formar a matriz 4x4 WD de entrada para a Hadamard direta 4x4, como mostra a Equação (4.3). Na Equação 4.3, YD representa o bloco de resíduos DC transformados pela Hadamard 4x4. (4.3) 46 Como pode ser observado na equação 4.3, os elementos das matrizes possuem apenas valores -1 e 1. Deste modo, apenas somas e subtrações são necessárias para realizar os cálculos relativos a esta transformada. A divisão por dois realizada em todos os elementos da matriz de resultados é um simples deslocamento de uma casa binária para a direita (AGOSTINI, 2007). A transformada Hadamard 2x2 é aplicada apenas para amostras DC de crominância. Esta transformada é utilizada tanto para Cb quanto para Cr. Em função da relação de entrada 4:2:0 para Y, Cb e Cr, cada macrobloco possui 16x16 amostras de luminância, 8x8 amostras de Cb e 8x8 amostras de Cr. As amostras de crominância passam pela FDCT 2-D em blocos de 4x4 amostras. Então, cada matriz 8x8 de entrada é formada por quatro matrizes 4x4. Os quatro elementos DC das quatro matrizes resultantes da FDCT 2-D passam pela Hadamard 2-D 2x2. O cálculo da Hadamard 2x2 definido pelo padrão H.264/AVC está apresentado em (4.4). Pode ser observado na fórmula abaixo que os cálculos da Hadamard 2x2 sobre as amostras DC de Cb e Cr são muito simples, consistindo de poucas somas e subtrações. Assim como na Equação 4.3, WD representa o bloco de resíduos DC. Já o termo WQD representa o bloco de resíduos DC transformados pela Hadamard 2x2. O módulo T, sendo formado pelas três transformadas que estão apresentadas, deve sincronizar a operação entre elas, de modo a gerar o fluxo correto de dados na sua saída. (4.4) 4.2 O Módulo da Estimação de Movimento O módulo da estimação de movimento está presente apenas na etapa de codificação de vídeo. Este módulo é o que apresenta a maior complexidade computacional dentre todos os módulos de um codificador H.264/AVC (PURI, 2004). Este grande custo computacional é função das inovações inseridas neste módulo do padrão, que tiveram o objetivo de atingir elevadas taxas de compressão. Para a simplificação do processo, para a realização da estimação de movimento é considerado apenas o componente de luminância do macrobloco, pois, cada componente de 47 crominância possui a metade da resolução horizontal e vertical do componente de luminância, então os componentes horizontal e vertical de cada vetor de movimento são divididos por dois para serem aplicados aos blocos de crominância. A principal inovação do H.264/AVC no ponto de vista da estimação de movimento está na possibilidade de utilização de tamanhos de blocos variáveis para realizar a estimação de movimento. Ao invés de usar um macrobloco inteiro na estimação de movimento, o padrão H.264/AVC permite o uso de partições de macrobloco e partições de sub-macroblocos. As partições de macroblocos possuem tamanhos de 16x16, 8x16, 16x8 e 8x8 e as partições de submacroblocos são permitidas somente se a partição de macrobloco selecionada foi a de 8x8. Neste caso, as quatro partições 8x8 do macrobloco podem ser divididas em mais quatro formas que podem ter o tamanho 8x8, 4x8, 8x4 ou 4x4, como já foi apresentado anteriormente nas Figuras 2.1 e 2.2. Este método de particionar macroblocos em sub-blocos de tamanho variável é conhecido como compensação de movimento estruturada em árvore. Cada bloco de crominância é dividido da mesma maneira que os blocos de luminância, exceto pelo tamanho da partição, que terá exatamente a metade da resolução horizontal e vertical da partição de luminância. Por exemplo, uma partição de 8x16 de luminância corresponde a uma partição de 4x8 de crominância. Um vetor de movimento é necessário para cada partição de macrobloco ou sub-macrobloco. Cada vetor de movimento precisa ser codificado e transmitido junto com as informações do vídeo codificado (bitstream), bem como o tipo de partição escolhida. A escolha de um tamanho de partição grande (16x16, 16x8, 8x16) implica na utilização de um número menor de vetores de movimento e também uma quantidade menor de bits é necessária para indicar o tipo de partição utilizada. Por outro lado, o resíduo gerado pode conter uma quantidade significativa de energia em áreas com muitos detalhes. A escolha de um tamanho de partição pequeno (8x4, 4x4) pode gerar um resíduo com quantidade de energia mínima depois da compensação de movimento, mas esta escolha requer a utilização de um número maior de vetores de movimento, além da necessidade de identificar a partição de sub-macrobloco escolhida. Assim é possível perceber que a escolha do tamanho da partição possui um impacto significativo no desempenho da compressão (RICHARDSON, 2003). 48 Em geral, uma partição grande é apropriada para áreas mais homogêneas do quadro e uma partição menor tende a ser mais apropriada para áreas com muitos detalhes. O tamanho de partição é escolhido no algoritmo do codificador a partir de alguma métrica que conduza a uma codificação mais eficiente, isto é, que analise o compromisso entre a geração de um resíduo mínimo e a geração de um número mínimo de vetores de movimento. A melhor escolha é realizada tomando por base os resultados da análise para todos os tamanhos de partição de cada macrobloco. Então, é escolhido aquele tamanho de partição que apresentar a maior eficiência de codificação. Pode-se concluir que a complexidade computacional desta operação é bastante elevada, uma vez que os cálculos da estimação de movimento são realizados para vários tamanhos de partição diferentes e apenas uma destas partições é escolhida. Por isso, a estimação de movimento é o módulo mais crítico na implementação de codificadores H.264/AVC. Uma outra característica importante da estimação de movimento do padrão H.264/AVC é que ela prevê uma precisão de ¼ de pixel para os vetores de movimento. Normalmente, os movimentos que acontecem de um quadro para o outro não estão restritos a posições inteiras de pixel. Assim, se são utilizados apenas vetores de movimento com valores inteiros, normalmente não é possível encontrar casamentos bons. Por isso, o padrão H.264/AVC prevê a utilização de vetores de movimento com valores fracionários de ½ pixel e de ¼ de pixel. Na Figura 4.3 é apresentado um exemplo da precisão do vetor de movimento com valores fracionários. Na Figura 4.3, um bloco 4x4 no quadro atual (a) é predito de uma região do quadro de referência na vizinhança da posição do bloco atual. Se as componentes horizontal e vertical do vetor de movimento são inteiras (b), existem amostras relevantes do bloco. Se uma ou ambas as componentes do vetor são valores fracionários (c), as amostras de predição são geradas pela interpolação entre amostras adjacentes no quadro de referência (RICHARDSON, 2003). Figura. 4.3: Estimação de Movimento com Precisão de Fração de Pixel 49 A estimação de movimento deve prover um algoritmo eficiente capaz de localizar, nos quadros de referência, qual macrobloco mais se assemelha ao macrobloco atual. Assim que o macrobloco é encontrado, a ME deve gerar um vetor indicando a posição deste macrobloco no quadro de referência. Este vetor é chamado de vetor de movimento e deve ser inserido junto com a codificação do macrobloco. Os algoritmos de busca para a estimação de movimento determinam a forma como o melhor casamento (best matching), para o bloco do quadro atual, será buscado dentro da área de pesquisa do quadro de referência. O algoritmo de busca tem influência direta na complexidade computacional da estimação, bem como na qualidade dos vetores gerados. Podem-se dividir os algoritmos de estimação em dois grandes grupos: algoritmos ótimos e sub-ótimos. Algoritmos ótimos analisam todas as posições dentro da área de pesquisa para gerar o vetor que represente a menor diferença entre as regiões pesquisadas. Algoritmos sub-ótimos utilizam determinados métodos de busca que eliminam alguns cálculos, reduzindo a complexidade e gerando vetores que podem não ser os que resultam no menor erro. O critério de similaridade (critério de distorção) é a maneira como as diferenças entre as regiões comparadas são avaliadas. Os critérios podem considerar desde a simples diferença aritmética entre as regiões até cálculos que tentam fazer uma relação com o resultado visual da comparação (RICHARDSON, 2002). Dentre os critérios mais utilizados pode-se citar o erro médio quadrático MSE (Mean Square Error), o menor erro absoluto MAE (Minimum Absolute Error) (RICHARDSON, 2002) e a soma das diferenças absolutas SAD (Sum of Absolute Differences) (RICHARDSON, 2002). O SAD é o critério de similaridade mais comumente utilizado para os algoritmos de estimação de movimento, devido à sua simplicidade. O SAD calcula a distorção entre regiões comparadas como sendo o somatório das diferenças absolutas, para cada ponto do bloco atual e do bloco candidato da área de pesquisa (KUHN, 1999). A função para o cálculo do SAD é dada de acordo com a Equação (4.5): (4.5) 50 onde: • SADx,y representa o SAD para a posição (x,y). • R representa amostras do quadro reconstruído. • P representa amostras do quadro original. • N é o tamanho do bloco. O primeiro passo, para calcular o SAD para o bloco de posição (x,y), é calcular o módulo da diferença entre as amostras do bloco de referência e do bloco da área de pesquisa. Esse cálculo é repetido para todas as amostras do bloco de tamanho NxN, sendo que os resultados intermediários são acumulados, e o resultado final desta acumulação é o valor resultante de SAD para o bloco candidato da área de pesquisa. O resultado do SAD é sempre positivo, pois a acumulação é feita através do somatório dos módulos das diferenças (ZANDONAI, 2002). Como são necessárias apenas somas, subtrações e acumulações este critério é largamente utilizado em aplicações em hardware. Daqui para frente neste trabalho, toda vez que for mencionado critério de similaridade ou resultado de erro para qualquer algoritmo, estaremos sempre nos referindo ao resultado de SAD. O SAD será o critério adotado para todas as avaliações dos algoritmos apresentados neste trabalho. Pode-se citar para a etapa de estimação de movimento os seguintes algoritmos: busca completa (Full Search - FS) (BHASKARAN, 1999) e (LIN, 2005), Three Step Search (TSS) (JING, 2004), Diamond Search (DS) (KUHN, 1999) e (YI, 2005), One at a Time Search (OTS) (RICHARDSON, 2002), Hexagon Based Search (HS) (ZHU, 2002) e Dual Cross Search (DCS) (BANH, 2004). Dos algoritmos citados, apenas o algoritmo Full Search pode ser considerado um algoritmo ótimo, pois ele avalia todas as posições possíveis da área de pesquisa para determinar o melhor resultado. Os demais algoritmos se enquadram na classe de algoritmos sub-ótimos, que utilizam determinadas heurísticas para reduzir o número de cálculos na obtenção do melhor casamento entre os blocos. Em (PORTO, 2008) foi realizado um trabalho mostrando que o algoritmo Diamond Search foi o mais eficiente entre os algoritmos citados. Desta forma, foi implementado um hardware dedicado para esta estrutura, cujos detalhes são mostrados no capítulo seis deste estudo. O objetivo deste trabalho é aumentar o desempenho desta arquitetura a partir do uso de somadores compressores. 51 4.2.1 Algoritmo Diamond Search (PORTO, 2008) O algoritmo Diamond Search possui dois padrões diamante que são usados na etapa inicial e final do algoritmo. A Figura 4.4 ilustra os padrões Large Diamond Search Pattern (LDSP) e o padrão Small Diamond Search Pattern (SDSP). O padrão LDSP consiste em nove comparações e é utilizado na etapa inicial da pesquisa. Já o padrão SDSP consiste em quatro comparações e é utilizado na etapa final da pesquisa, com o intuito de refinar o resultado obtido na etapa anterior (KUHN, 1999). Figura 4.4: Large Diamond (LDSP) (L) e Small Diamond (SDSP) (S) O algoritmo começa aplicando o padrão LDSP ao centro da área de pesquisa. Caso o valor de menor erro seja encontrado no centro, o algoritmo aplica o padrão SDSP para refinar o resultado obtido. Caso contrário, um novo LDSP é aplicado à posição de menor erro da etapa anterior. Esta posição pode pertencer a uma aresta ou a um vértice do diamante. As Figuras, 4.5(a) e 4.5(b) representam, respectivamente, a busca por uma aresta e a busca por um vértice. No caso da busca por uma aresta, mais três valores são calculados para formar um novo diamante em torno da nova origem. Quando o novo centro é um vértice do diamante, mais cinco valores são calculados para formar o novo diamante em torno do centro. Caso o menor erro não seja encontrado no centro do novo diamante, a etapa de busca será repetida, seja ela por uma aresta ou por um vértice. Quando o menor erro for encontrado para o centro do diamante o padrão SDSP é aplicado. Então mais quatro valores imediatamente ao redor do centro serão calculados e a posição com o menor erro será a escolhida. 52 Figura 4.5(a): Busca por uma aresta Figura 4.5(b): Busca por um vértice Novamente não se pode determinar o número de operações do algoritmo. O algoritmo Diamond Search pode começar a sua busca em uma direção e desviar a pesquisa ao longo do processo, o que pode evitar que o algoritmo caia em um mínimo local. 4.3 Sumário Este capítulo apresentou detalhes e as principais características de dois módulos do padrão H.264/AVC, que são alvo deste trabalho. Foram mostrados os principais aspectos do bloco T (que é composta das Transformadas Diretas) e do bloco de Estimação de Movimento. Estes blocos são compostos de um grande número de operações aritméticas de soma e subtração. Para a realização destas operações de forma eficiente, utiliza-se neste trabalho, circuitos somadores Carry Save (CSA) e somadores compressores que realizam a soma de mais de dois operandos simultaneamente de forma eficiente. No próximo capítulo serão mostrados os principais aspectos dos somadores eficientes utilizados neste trabalho. 53 5 CIRCUITOS SOMADORES EFICIENTES Vários circuitos somadores são apresentados na literatura no sentido de acelerar a propagação do carry ao longo dos módulos somadores. Neste trabalho, explora-se a soma de vários operandos simultaneamente, com o menor caminho crítico possível, como forma de acelerar os cálculos das Transformadas Diretas e da Estimação de Movimento. São utilizados circuitos somadores Carry Save e somadores compressores que podem realizar soma simultânea de n valores de operandos. A seguir, são apresentados alguns conceitos de circuitos somadores Carry Save e circuitos somadores compressores, bem como as suas estruturas básicas. Em relação ao somador compressor, é apresentado o compressor 4:2, que permite realizar a soma de 4 valores simultaneamente. Após, apresenta-se a extensão desta estrutura para compressores 8:2 e 16:2, que são estruturas que realizam a soma de 8 e 16 operandos simultaneamente. 5.1 Somador Carry Save O somador Carry Save tem como principal finalidade somar mais de dois números de uma vez. O seu princípio de funcionamento é baseado na idéia de calcular separadamente a soma e o carry. Após, somá-los separadamente, com o valor de carry multiplicado por dois (deslocamento à esquerda), alcançando assim a soma total. Esta estrutura tem como vantagem conseguir somar vários números mais rapidamente. O somador Carry Save (CSA) tem a característica de efetuar a soma de três números simultaneamente. A idéia básica é que três números possam ser reduzidos para dois, como um compressor 3:2, como mostra o exemplo da Figura 5.1 (PARHAMI, 1999). Figura 5.1: Exemplo de um Somador Carry Save 54 Como pode ser observado na Figura 5.1, somente na recombinação do carry com a soma é utilizado um somador onde o carry é propagado. Apenas na última linha de soma é que existe a propagação normal do carry a partir da utilização de somadores do tipo Ripple Carry (RCA). A Figura 5.2 mostra um exemplo de adição de seis números usando o somador Carry Save. Figura 5.2: Exemplo de Soma de Números de 4 bits Usando a Estrutura Carry Save Como é mostrado na Figura 5.2, o somador Carry Save é apresentado como um bloco com três entradas e duas saídas. Neste caso, os somadores completos full-adder não dependem de outras somas para efetuar sua operação. Cada somador recebe três números e produz dois como saída, tal que 2*C+S=P+Q+R. De fato, pode-se então converter o problema de computação P+Q+R para 2*C+S sem esperar carry algum. Os módulos x2 mostrados na Figura 5.1 não requerem lógicas adicionais, sendo somente necessário a interconexão apropriada dos blocos. A soma final M+2N representa uma soma normal de dois números. O somador Carry Save se torna bastante rápido devido ao fato de simplificar as saídas de carry ao invés de propagar para a esquerda. 5.2 O Compressor 4:2 Em (WEINBERGER, 1981) foi apresentada uma estrutura de soma de números chamada 4-2 Carry-Save module na qual era possível a realização da soma simultânea de quatro 55 números. Esta estrutura foi posteriormente aperfeiçoada por (OKLOBDZIJA, 1996). Esta estrutura contém uma combinação de células de somadores completos em conexão truncada na qual possibilita uma rápida compressão dos produtos parciais. Como mostra a Figura 5.3, um compressor 4:2 possui cinco entradas e três saídas. Figura 5.3: Estrutura do Compressor 4:2 As cinco entradas e a saída da soma possuem o mesmo peso(j), e as saídas Cout e Carry possuem peso maior (j+1). Além disto, a saída Cout não é função de Cin (que faz com que não ocorra a propagação do sinal de carry). Para esta implementação as saídas da soma (sum), do carry intermediário (Cout) e do carry de saída (carry) são expressas pelas Equações (5.1), (5.2) e (5.3) (PARHAMI, 1999). Sum=[(A B) C] D] Cin Cout=A• B + A •C + B• C Carry=[(A B) C] • (D + Cin) + D •Cin (5.1) (5.2) (5.3) O compressor 4:2 descrito pelas equações acima possui um caminho crítico dado pela soma dos atrasos de 4 portas lógicas XOR conectadas em série, como mostra a Equação (5.1). A Figura 5.3 mostra que este compressor pode ser implementado utilizando dois somadores completos em série, o que reforça o caminho crítico composto pelas 4 portas lógicas XOR. A implementação desta estrutura torna as somas dos produtos parciais mais rápidas devido à maior compressão dos termos de soma. A Tabela verdade de um compressor 4:2 é mostrada na Tabela 5.1. 56 De fato, o resultado de uma operação de soma usando compressor 4:2 é dado por: Sum + 2(Cout + carry). Como pode ser visto em um exemplo da Tabela 5.1, com todos os valores de entrada em nível lógico 1 (inclusive o termo Cin), o resultado será dado por 111 que é equivalente a: [1+2(1+1)]=5. Para haver o resultado correto, deve haver uma recombinação dos resultados parciais de Cout e carry através de um meio somador. Tabela 5.1: Verdade do Compressor 4:2 Um aperfeiçoamento na estrutura de um circuito compressor 4:2, usando multiplexador (OKLOBDZIJA, 1996) é mostrado na Figura 5.4. Esta estrutura possui um caminho critico com seu valor de atraso máximo dado por três portas XOR, o que representa um caminho crítico menor do que o mostrado na estrutura da Figura 5.3. Outra vantagem deste tipo de estrutura é o fato de que o circuito multiplexador e a porta XOR podem ser otimizados no nível de transistores utilizando portas de transmissão (PRASAD, 2001). A Figura 5.5 apresenta um exemplo de utilização de compressores 4:2 em uma soma de 4 números de 14 bits. Deve-se observar que são necessários halfadders (HA) e fulladders (FA) para a recombinação dos valores parciais das somas anteriores, visto que há a propagação de 57 carry de um módulo de soma do compressor para o próximo bloco. Uma linha de pipeline, introduzida entre os compressores e a linha de soma dos resultados parciais dos compressores, é usada para o aumento de desempenho dos circuitos compressores. Figura 5.4: Compressor 4:2 Utilizando Multiplexadores Figura 5.5: Circuito Somador de 14 bits Utilizando Compressor 4:2 5.3 Compressores Hierárquicos 8:2 e 16:2 A partir do projeto do compressor 4:2, foram feitas implementações de outras estruturas para a realização de um maior número de somas simultâneas. Nesta etapa, utiliza-se a extensão do compressor 4:2 para a realização dos compressores 8:2 e 16:2 que permitem a soma simultânea de até 8 e 16 valores respectivamente. A Figura 5.6 apresenta o compressor 8:2 e a Figura 5.7 mostra o diagrama em blocos do compressor 8:2 a partir da utilização de compressores 4:2. 58 Figura 5.6: Diagrama de Blocos do Circuito Compressor 8:2 Figura 5.7: Estrutura Hierárquica do Compressor 8:2 O compressor 8:2 é composto por treze entradas, sendo oito delas primárias (A, B, C, D, E, F, G e H) e cinco entradas de carry de entrada - Cin (Cin0, Cin1, Cin2, Cin3 e Cin4). A estrutura do compressor apresenta sete saídas, sendo duas primárias (Sum e carry) e cinco para carry de saída - Cout (Cout0, Cout1, Cout2, Cout3 e Cout4). Assim como no compressor 4:2, o compressor 8:2 tem suas entradas e a saída Sum com mesmo peso (j) e as saídas restantes com peso (j+1). A representação para a obtenção dos valores de soma a partir dos valores de entrada é mostrada na Equação 5.4. 59 Soma = Sum + 2(Cout0 + Cout1 + Cout2 + Cout3 + Cout4 + Carry) (5.4) Quando todas as entradas estiverem em nível lógico 1, inclusive todas as entradas de Cin, a soma deverá ser 13, ou seja, Soma = 1 + 2(1+1+1+1+1+1) = 13. Observa-se na Tabela 5.2 que para a entrada (j) igual a 13, a saída com peso (j+1) é igual a 6 e a saída Sum com peso j é igual a 1. A interpretação deste resultado está estabelecida no fato de que o valor 6 multiplicado por 2 (peso j+1 =2) é somado ao valor de Sum de valor igual a 1 (peso j = 1). O mesmo raciocínio é utilizado para os demais valores da Tabela 5.2. Tabela 5.2: Tabela Verdade do Compressor 8:2 A Figura 5.8 mostra um exemplo de soma de 8 números de 14 bits a partir da utilização de blocos compressores 8:2. Da mesma forma, como mostrado anteriormente para o compressor 4:2, são utilizados halfadders e fulladders para a realização das somas dos resultados parciais dos módulos compressores. 60 Figura 5.8: Circuito Somador de 14 Bits Utilizando Compressor 8:2 A partir do projeto de compressores 8:2, foi possível a expansão do circuito compressor para realizar a adição de 16 operandos simultaneamente. A Figura 5.9 mostra o diagrama de blocos do compressor 16:2 e a Figura 5.10 representa a estrutura hierárquica do compressor 16:2 com a utilização de compressores 8:2 e 4:2. Figura 5.9: Diagrama de Blocos do Circuito Compressor 16:2 61 Figura 5.10: Estrutura Hierárquica do Compressor 16:2 O compressor 16:2 é composto por 29 entradas, sendo dezesseis delas primárias (A, B, C, D, E, F, G, H, I, J, L, M, N, O, P e Q) e treze entradas de carry de entrada - Cin (Cin0, Cin1, Cin2, Cin3, Cin4, Cin5, Cin6, Cin7, Cin8, Cin9, Cin10, Cin11 e Cin12). A estrutura também apresenta quinze saídas, sendo duas primárias (Sum e carry) e treze para carry de saída - Cout (Cout0, Cout1, Cout2, Cout3, Cout4, Cout5, Cout6, Cout7, Cout8, Cout9, Cout10, Cout11 e Cout12). Para a obtenção dos valores de soma, a partir dos valores de entrada, faz-se necessário também o uso de uma equação representativa, dada na Equação 5.5. Soma = Sum + 2(Cout0 + Cout1 + ... + Cout11 + Cout12 + Carry) (5.5) Se por exemplo, todas as entradas estiverem em nível lógico 1, inclusive todas as entradas de Cin, a soma deverá apresentar um valor igual a 29. Desta forma, de acordo com a equação 5.5: Soma = 1+2(1+1+1+1+1+1+1+1+1+1+1+1+1+1) = 29. Assim como para o compressor 8:2, observa-se na Tabela 5.3 a influência dos pesos nos resultados apresentados na Tabela 5.1. Por exemplo, para o valor de entrada igual a 29, o resultado de soma é obtido a partir do valor de saída igual a 14, que deve ser multiplicado por 2 (devido ao peso j+1), somado ao valor Sum igual a 1 (devido ao peso j). 62 Tabela 5.3: Tabela Verdade do Compressor 16:2 A Figura 5.11 apresenta um exemplo de soma de 16 operandos de 14 bits a partir da utilização de compressores 16:2. Mais uma vez observa-se a necessidade da utilização de uma última linha de meio somador (HA) e somadores completos (FA) para a recombinação das somas dos valores de carry gerados pelos blocos dos compressores 16:2. 63 Figura 5.11: Circuito Somador de 14 bits Utilizando Compressor 16:2 5.4 Análise Comparativa dos Compressores Nesta seção são apresentados resultados de síntese em FPGA mapeados para o dispositivo EP1S20F780C5 da Altera (ALTERA, 2008) para os compressores 4:2, 8:2 e 16:2 respectivamente. A Tabela 5.4 mostra resultados de área e atraso dos circuitos compressores. Como era esperado, o compressor 4:2 apresenta os melhores resultados de área e atraso. Entretanto, deve-se observar na Tabela 5.4 que a diferença de atraso entre os compressores 4:2 e 8:2 não é significativa. Este resultado é interessante, visto que o compressor 8:2 pode ser utilizado para uma maior quantidade de somas simultâneas de operandos com um reduzido valor de atraso. Esta mesma relação é mantida quando é comparado o atraso do compressor 8:2 ao atraso do compressor 16:2, o que torna atrativo o uso deste compressor para aplicações que requerem uma maior quantidade de operações de soma, visto que este circuito pode realizar uma grande quantidade de somas simultâneas com um valor de atraso relativamente baixo quando comparado aos outros compressores. Além disso, os compressores 8:2 e 16:2 são implementados a partir de blocos compressores 4:2 que apresenta um reduzido caminho crítico. Para valores de área (elementos lógicos), os compressores mantêm uma proporção de crescimento, visto que além do aumento de área existente entre os compressores há também um aumento no número de entradas e saídas de carry, Cin e Cout nas arquiteturas. Os valores de consumo de área obtidos mostram um aumento nos compressores 8:2 e 16:2 em relação ao compressor 4:2. Com estes resultados, observa-se que é necessário considerar a aplicação alvo onde será(ão) inserido(s) o(s) compressor(s), para que se possa observar a melhor relação custo 64 vs. benefício do número de entradas a serem somadas com o tempo gasto nestas operações e escolher a melhor alternativa para ser utilizada. Caso o foco do projeto seja desempenho, pode-se ter o compressor 16:2 como o mais indicado, pois realiza mais somas simultâneas em um ciclo de relógio, com um atraso relativamente reduzido. Porém, quando a meta do projeto visa a utilização menor de hardware, deve-se utilizar o compressor 4:2. Tabela 5.4: Resultado de Síntese Para os Compressores Elementos Lógicos Atraso Compressor (LUTs) (ns) 4:2 72 24,807 8:2 177 29,592 16:2 402 32,722 5.6 Sumário Neste capítulo foram apresentados os principais conceitos sobre circuitos somadores compressores. Foi possível observar a possibilidade de expansão destes circuitos compressores a partir da estrutura básica de um compressor 4:2. Este estudo serve como base para a aplicação destes compressores em circuitos que envolvam um grande número de operações de soma e subtração. Neste trabalho, os blocos das Transformadas Diretas e a Estimação de Movimento do padrão de compressão de vídeo do padrão H.264/AVC são usados como estudos de caso para a aplicação dos somadores compressores. No próximo capítulo serão apresentadas as implementações destas arquiteturas com o uso destes compressores, bem como os seus resultados de síntese. 65 6 ESTUDOS DE CASO: MÓDULO T E ESTIMAÇÃO DE MOVIMENTO Este capítulo apresenta os estudos de caso utilizados para o uso de somadores eficientes para o aumento de desempenho das arquiteturas implementadas. Foram utilizados dois estudos de caso referentes aos blocos operacionais no padrão H.264/AVC de compressão de vídeo, que são: módulo das transformadas diretas e o módulo da estimação de movimento. Estes blocos foram escolhidos em função do grande número de operações aritméticas agregadas aos algoritmos. No caso, são utilizados circuitos somadores compressores 4:2, 8:2 e 16:2 que realizam operações simultâneas de 4, 8 e 16 operandos respectivamente. A seguir são apresentados detalhes dos módulos e as alternativas arquiteturais utilizadas com a inclusão dos somadores compressores. 6.1 Soluções arquiteturais: Módulo T Na implementação das arquiteturas das transformadas que compõe o módulo T (FDCT2D, Transformada Hadamard 4x4 e Transformada Hadamard 2x2) foram feitos estudos particulares em cada transformada para identificar qual somador compressor se comporta melhor em cada caso. Por este motivo, em cada transformada foram estudados diferentes somadores compressores na implementação do módulo T. Assim, nas próximas seções deste trabalho serão mostrados os estudos individuais feitos para cada transformada. Após, será mostrada o resultado obtido com a implementação completa do módulo T. 6.1.1 Estudo de caso para a FDCT-2D Para a arquitetura da FDCT-2D foram feitas três implementações sem separabilidade utilizando diferentes somadores compressores. Todas as implementações foram projetadas seguindo o algoritmo definido na Equação 4.1. A partir dos resultados obtidos com as três implementações foi feita a escolha de qual alternativa arquitetural será utilizada na implementação do módulo T. Na FDCT-2D todas as entradas possuem 8 bits e as saídas 14 bits. As três implementações foram comparadas com a arquitetura descritas na literatura (AGOSTINI, 2007). 6.1.1.1 Arquiteturas Propostas Neste Trabalho A primeira arquitetura desenvolvida para implementar a FDCT 2-D, está apresentada na Figura 6.1 e utiliza somadores compressores 4:2 (CA 4-2). A arquitetura da FDCT 2-D foi projetada em um pipeline de quatro estágios. Interno a cada compressor 4:2 foi inserido um estágio de pipeline. Este estágio de pipeline foi inserido entre a linha de compressores e a linha 66 de somadores utilizada para fazer a recombinação dos resultados parciais de soma e carry dos compressores (ver figura 5.5). Além disso, a arquitetura possui mais um estágio implementado com registradores, indicado na Figura 6.1 com o retângulo tracejado. Assim, cada estágio necessita de somente um ciclo de relógio para realizar os seus cálculos. Nesta arquitetura, foram utilizados 16 somadores compressores 4:2 em cada coluna. Os pequenos quadrados com shifters para a esquerda representam os blocos de multiplicação por 2 que são necessários de acordo com o algoritmo da transformada. Estas multiplicações são feitas com o deslocamento de uma posição do operando binário para esquerda. As entradas possuem 8 bits de largura e 14 bits na saída e a latência da arquitetura é de 4 ciclos de relógio. Figura 6.1: Arquitetura para FDCT-2D utilizando compressores 4:2 A segunda versão arquitetural explorada, apresentada na Figura 6.2, utiliza oito somadores compressores 8:2 (CA 8-2). A arquitetura foi projetada em um pipeline de dois estágios. Novamente, um estágio do pipeline é interno ao compressor 8:2. O segundo estágio está localizado entre a coluna dos compressores 8:2 e a coluna de somadores (como pode ser visto na Figura 6.2). Esta coluna de somadores foi necessária para finalizar os cálculos de transformada 67 conforme o algoritmo apresentado na Equação 4.1. Nesta arquitetura a latência é de 2 ciclos de relógio. A última alternativa foi utilizando o compressor 16:2 (CA 16-2). Nesta versão foram empregados 16 somadores compressores 16:2 que sozinhos realizam o cálculo completo da FDCT-2D. Assim, a arquitetura apresenta somente um estágio de pipeline. Este estágio é interno aos compressores 16:2, apresentando uma latência de um ciclo de relógio. A Figura 6.3 mostra esta arquitetura. Figura 6.2: Arquitetura para FDCT-2D utilizando compressores 8:2 68 Figura 6.3: Arquitetura para FDCT-2D utilizando compressores 16:2 6.1.1.2 Arquitetura proposta por (AGOSTINI, 2007) Para validar os resultados de implementação obtidos com as três versões para a FDCT-2D proposta neste trabalho foi feita uma comparação de resultados com a arquitetura descrita na literatura proposta por (AGOSTINI, 2007). Esta arquitetura foi projetada em um pipeline de quatro estágios, sendo que cada estágio utiliza 16 ciclos de relógio para finalizar as suas operações. Como pode ser observado na Figura 6.4, apenas um operador é utilizado por estágio de pipeline. A latência da arquitetura sem separabilidade é de 64 ciclos de relógio e são utilizados 8 bits na entrada e 14 bits na saída. 69 Figura 6.4 – Arquitetura para a FDCT-2D proposta por (AGOSTINI, 2007) 6.1.1.3 Resultados de síntese A Tabela 6.1 mostra os resultados obtidos com as três implementações. Com o uso de apenas um somador aritmético por estágio de pipeline a arquitetura original atingiu o menor uso dos recursos de área, porém obteve o segundo pior resultado em frequência de operação ganhando somente da arquitetura CA 4-2. O estudo proposto neste trabalho é focado em aumentar o desempenho dos módulos do padrão H.264/AVC. Portanto, os resultados mostram um ganho significativo no aumento de desempenho da FDCT-2D quando são utilizados o compressor 8:2 e o compressor 16:2. Na arquitetura CA 8-2 a frequência de operação foi um pouco maior que a arquitetura CA 16-2 devido à frequência do compressor 8:2 ser maior que a frequência do compressor 16:2. Outro fator importante foi a inserção do pipeline nas arquiteturas, os resultados mostram que essa técnica é mais eficaz para a arquitetura CA 8-2, pois, apresentou o melhor resultado de frequência devido ao caminho crítico desta arquitetura ser composto somente pelo somador interno do compressor 8:2. Contudo, a CA 16-2 foi a escolhida para implementar a FDCT-2D no módulo T devido ao fato de que a diferença entre as freqüências de operação serem muito baixas e a CA 162 apresentar a sua latência de apenas um ciclo de relógio. O throughput é calculado em função do número de amostras por segundo. Por exemplo, para a arquitetura da Transformada Discreta do 70 Coseno (CA 16-2), que opera 16 amostras em uma frequência de operação de 432,9 MHz, a taxa é de 6.92G amostras por segundo (432.9,62MHz*16 = 6.92G amostras/s). Tabela 6.1: Resultados de Síntese para a FDCT-2D sem Separabilidade Área Throughput Arquitetura Latência Frequência (MHz) (# de gates) (amostras/s) Original (AGOSTINI,2007) 6375 4 398,40 6.37G CA 4-2 10247 4 377,35 6.03G CA 8-2 12083 2 434,78 6.95G *CA 16-2 17027 1 432,90 6.92G 6.1.2 Estudo de caso para a Transformada Hadamard 4x4 A transformada Hadamard 4x4 foi o ponto de partida dos estudos com os somadores compressores nos módulos do padrão H.264/AVC. Por este motivo, para esta transformada particularmente, foram feitas várias implementações. Primeiramente foram realizadas implementações em FPGAs, a fim de verificar o desempenho destes somadores neste módulo do padrão. Após, também foram realizadas implementações das arquiteturas, que obtiveram melhor desempenho em FPGA, na tecnologia ASIC. Nesta seção são apresentados resultados obtidos a partir do uso de compressores nas arquiteturas dedicadas da Transformada Hadamard 4x4 Direta, tanto para as implementações em FPGA bem como para as implementações em ASIC. 6.1.2.1 Implementações de Arquiteturas Combinacionais em FPGA Para FPGA foram feitas as seguintes implementações: arquitetura serial com separabilidade, arquitetura serial sem separabilidade e arquitetura paralela combinacional, explorando a utilização dos compressores 4:2, 8:2 e 16:2. As arquiteturas combinacionais processam 16 amostras de entrada por ciclo de relógio, realizando seus cálculos no mesmo ciclo. Consequentemente, suas amostras de saída também serão entregues no mesmo ciclo de relógio. Particularmente, foram implementadas as seguintes arquiteturas combinacionais dedicadas para a Transformada Hadamard: Arquitetura Combinacional com Compressor 4:2, Arquitetura Combinacional com Compressor 4:2 e Subtrator Carry Save, Arquitetura Combinacional com Ripple Carry, Arquitetura Combinacional com Compressor 8:2 e finalmente a Arquitetura Combinacional com Compressor 16:2. 71 Todas as versões foram descritas em VHDL sintetizadas na ferramenta Quartus II e mapeadas para o dispositivo Stratix EP1S20F780C5 ambos da Altera. Embora os resultados obtidos neste trabalho tenham sido direcionados para FPGA, tem-se como foco na continuação deste trabalho de mestrado, a obtenção destes resultados voltados para ASIC. Os resultados em FPGA servem como parâmetro inicial de análise de comportamento das arquiteturas em relação a esta tecnologia. Os resultados obtidos com estas implementações foram comparados com as arquiteturas descritas em (AGOSTINI, 2007), que utilizam o somador Macro Function otimizado para FPGA, para realizar as operações de soma e subtração. 6.1.2.1.1 Arquitetura Combinacional com Somadores/Subtratores Ripple Carry Quando o projeto de hardware é focado para implementações em ASIC, é necessário encontrar uma alternativa para o uso dos somadores nesta tecnologia, pois o uso de somadores Macro Function são direcionados apenas para aplicações em FPGA. Entre os somadores descritos na literatura, o que é utilizado como referência é o somador Ripple Carry. Este somador possui a desvantagem de que em cada etapa da soma é necessário utilizar o carry da etapa anterior e isto gera um grande atraso devido à propagação de carry por todos os bits de soma como mostra a Figura 6.5. Figura 6.5: Arquitetura Combinacional com Somadores/Subtratores Ripple Carry (AGOSTINI, 2007) 72 Esta versão arquitetural tem como finalidade a comparação de comportamento de um somador que é muito empregado em aplicações ASIC. A arquitetura desta implementação é a mesma implementada por (AGOSTINI, 2007). 6.1.2.1.2 Arquitetura Combinacional com Compressor 4:2 A primeira alternativa combinacional explorada para a Transformada Hadamard utiliza o compressor 4:2 de 14 bits para realizar a soma de quatro operandos de entrada. Esta operação resulta em uma saída de 16 bits. Com isto, para realizar a próxima adição de quatro números é necessário o uso de compressores 4:2 de 16 bits. Para os casos onde é necessário realizar subtrações, foi utilizado nesta arquitetura um circuito responsável pelo complemento de dois dos operandos de entrada, representado na Figura 6.6 pelos retângulos menores posicionados na entrada da arquitetura. Este circuito realiza a inversão bit a bit do operando de entrada, e após o soma com o valor ”1”, gerando assim o resultado em complemento de dois. E este resultado servirá de entrada para o compressor, onde será realizada a soma com os outros números para o cálculo da subtração. Nesta alternativa arquitetural foram empregados complementadores de 14 e 16 bits. A inclusão do circuito complementador pode gerar um acréscimo no consumo de potência e no atraso da arquitetura, pois a inversão bit a bit de um operando tem como consequência o aumento na atividade de chaveamento do circuito, resultando assim, no aumento de consumo de potência do circuito. O somador utilizado no módulo de complemento de dois foi do tipo Ripple Carry. Este somador implica no aumento do atraso do circuito, devido à propagação interna do carry neste operador aritmético. Na Figura 6.6, a divisão por 2 (conforme a Equação 4.3 do algoritmo), está representada pela indicação “>>” nos retângulos. 73 Figura 6.6: Arquitetura Combinacional com Compressores 4:2 6.1.2.1.3 Arquitetura Combinacional com Compressor 4:2 e Subtrator Carry-Save Uma alternativa arquitetural proposta neste trabalho leva em consideração a subtração dos operandos sem a necessidade dos módulos para realizar o complemento de dois. Esta arquitetura é mostrada na Figura 6.7. Nesta nova arquitetura, são empregados circuitos subtratores Carry Save para a realização de subtração de três operandos. Os somadores/subtratores Carry Save possuem uma estrutura interna otimizada, que propagam o carry de um estágio de soma na diagonal. Isto faz com que o atraso diminua quando comparado a somadores/subtratores tradicionais do tipo Ripple Carry. Para realizar a implementação desta arquitetura foi necessário fazer uma manipulação nos cálculos dos valores. Um exemplo desta manipulação pode-se verificar no cálculo do operando b4 da Figura 6.7. Nas arquiteturas que utilizam os módulos de complemento a dois para realizar a subtração, este operando é calculado da seguinte maneira: b4 = W0 + W4 – W8 – W12. Com a manipulação, o cálculo de b4 é realizado através da soma dos quatros operandos de entrada e após é feita a subtração desta soma pelo dobro dos valores de W8 e W12. Assim, o cálculo de b4 é dado da seguinte maneira: b4 = W0 + W4 + W8 + W12 – 2*W8 – 2*W12. Como já dito anteriormente esta alternativa foi estudada a fim de eliminar o módulo de complemento de 74 dois utilizado nas outras arquiteturas e também possibilitou o uso de um subtrator eficiente, no caso, o Carry Save. Figura 6.7: Arquitetura Combinacional com Compressor 4:2 e Subtrator Carry Save 6.1.2.1.4 Arquitetura Combinacional com Compressor 8:2 A terceira alternativa arquitetural explorada neste trabalho, utiliza o compressor 8:2 na estrutura combinacional. Para atender à configuração de entradas paralelas, foi necessária a utilização de 16 compressores 8:2 para a realização das somas das 16 amostras. Assim, para a obtenção da saída final (S) da transformada, foi necessária a utilização de uma barreira de somadores Ripple Carry na saída dos compressores 8:2 como mostra a Figura 6.8. Esta arquitetura utiliza também o módulo de complemento de dois para a realização da subtração dos operandos. Mais uma vez, a divisão por 2 do algoritmo está representada por “>>” nos retângulos. 75 Figura 6.8: Arquitetura Combinacional com Compressor 8:2 6.1.2.1.5 - Arquitetura Combinacional com Compressor 16:2 A quarta e última alternativa arquitetural explorada, utiliza o compressor 16:2 na estrutura combinacional. A principal vantagem desta alternativa é o fato de não utilizar uma barreira de somadores após os compressores para calcular a saída final (S), como é o caso da implementação anterior que utiliza o compressor 8:2. Na alternativa da Figura 6.9, o compressor 16:2 realiza o cálculo total da transformada fazendo a soma das dezesseis amostras de entrada e gerando o resultado final após o deslocamento á direita (divisão por 2). 76 Figura 6.9: Arquitetura Combinacional com Compressor 16:2 6.1.2.1.6 Resultados das Arquiteturas Combinacionais A Tabela 6.2 apresenta os resultados de área e atraso das arquiteturas combinacionais implementadas. A arquitetura com o menor uso dos recursos de hardaware foi a que utiliza os somadores Macro Function, pois este somador é otimizado para FPGA. Isto pode ser comprovado a partir dos resultados das arquiteturas com somadores Ripple Carry e com o compressor 4:2 e subtrator Carry Save que apresentam maiores valores de área em relação à arquitetura com somador Macro Function, pois estes somadores não são otimizados para FPGA. Entretanto, a exploração arquitetural feita com o compressor 4:2 e subtrator Carry Save mostrouse mais eficaz (com menos recursos de hardware) do que a arquitetura com somador Ripple Carry. As alternativas com os compressores 8:2 e 16:2 aumentaram significantemente o uso de recursos de hardware. Isto devido ao fato destes compressores serem implementados a partir dos 77 compressores 4:2, que utilizam multiplexadores e portas XOR na sua estrutura interna. Nota-se que a arquitetura com compressor 8:2 utiliza mais recursos de hardware do que a arquitetura com compressor 16:2. Isto se explica pelo fato da arquitetura com compressor 8:2 utilizar uma barreira de somadores, que não é necessária na implementação com compressor 16:2. Tabela 6.2: Resultados de Área e Atraso para as Arquiteturas Combinacionais Arquitetura LUTS Atraso(ns) Combinacional Com Compressor 4:2 2.792 33,674 Com Compressor 4:2 e 1.654 27,795 Subtrator Carry-Save Com Somador/Subtrator Ripple Carry 1.754 33,155 Com Compressor 8:2 5.295 34,794 Com Compressor 16:2 4.854 36,201 Com somador Macro Function 1.360 12,141 (AGOSTINI, 2007) Além de apresentar menor valor de área, a arquitetura com somador Macro Function foi a que apresentou o menor atraso entre todas as alternativas. Isto se deve ao fato deste somador, otimizado para FPGA, ser mais eficiente, pois possui uma cadeia de propagação do carry eficiente que faz com que o atraso da arquitetura com este somador seja menor do que as outras alternativas. Entretanto, em relação às arquiteturas que não utilizam o somador Macro Function, a arquitetura que apresentou o melhor resultado de atraso foi aquela com compressor 4:2 e subtrator Carry Save. Isto mostra a eficiência do subtrator Carry Save que propaga o carry na diagonal. Dentre as arquiteturas apenas com compressores a arquitetura com o pior atraso foi a que utiliza compressor 16:2, como mostra a Tabela 6.2. Isto se explica pelo fato deste compressor possuir compressores 8:2 e 4:2 no seu caminho crítico. 6.1.2.2 Implementações de Arquiteturas Seriais em FPGA Esta seção apresenta as implementações das arquiteturas seriais com o uso dos compressores. São apresentadas duas alternativas arquiteturais, sendo estas: serial com separabilidade e serial sem separabilidade. 6.1.2.2.1 Arquitetura Serial com Separabilidade Esta arquitetura apresenta a propriedade de separabilidade, isto é, a transformada Hadamard 4x4 2-D é dividida em duas etapas de uma dimensão (1-D), onde o resultado da 78 primeira é transposto e a segunda transformada é então aplicada. Os valores de entradas são entregues serialmente, ou seja, uma amostra a cada ciclo de relógio. A Figura 6.10 mostra a arquitetura proposta com o uso do compressor 4:2. Figura 6.10: Arquitetura Serial com separabilidade Utilizando o Compressor 4:2 Com o uso dos compressores 4:2, a arquitetura da transformada Hadamard 1-D opera em 4 ciclos de relógio para a finalização de seus cálculos, enquanto que na arquitetura original esta operação levava 8 ciclos de relógio. Isto ocorre devido ao fato do compressor 4:2 realizar o cálculo de quatro valores de soma simultaneamente para a sua entrada de dados. Para a operação de subtração foram conectados, circuitos que realizam o complemento de dois, em cada saída dos buffers ping-pong, como mostram os pequenos retângulos entre o buffer ping-pong e os multiplexadores da Figura 6.10. Também são utilizados circuitos multiplexadores conectados nas entradas do compressor, os quais são responsáveis por fazer a seleção entre o valor original ou complementado. O processo realizado pelo buffer de transposição é formado por duas memórias de 16 posições com 16 bits. Estas memórias funcionam de maneira intercalada, isto é, quando os resultados da primeira Hadamard estão sendo escritos no buffer 1, o buffer 2 está mandando os resultados para a segunda Hadamard 1-D. Logo que se encerre o processo de escrita nas 16 posições, o processo é invertido, fazendo com que o buffer 1 (com os resultados da primeira Hadamard 1-D) dê início à entrega dos valores para o buffer 2. A Tabela 6.4 apresenta os valores de comparação dos diferentes módulos que compõem a arquitetura serial com separabilidade. Primeiramente, foram obtidos resultados para a Transformada 1-D. Com estes valores conclui-se que a arquitetura implementada apresenta uma maior freqüência de operação para a primeira e segunda Hadamard comparada com a arquitetura de (AGOSTINI, 2007), como mostra a Tabela 6.3. Isso ocorre devido a realização dos cálculos da Hadamard 1-D serem realizados em 79 quatro ciclos de relógio. Além disso, a arquitetura proposta utiliza somente um buffer e um compressor para realizar o cálculo da transformada Hadamard 1-D, enquanto que na arquitetura original são necessários dois buffers e dois somadores. Esta diminuição de requisitos de hardware por parte da arquitetura implementada tem conseqüências na redução de área e também do caminho crítico da arquitetura proposta. Arquiteturas 1ª Had 1-D (Implementada) 1ª Had 1-D (AGOSTINI, 2007) Buffer de Transposição 2ª Had 1-D (Implementada) 2ª Had 1-D (AGOSTINI, 2007) Tabela 6.3: Resultado de Síntese para Transformadas 1-D Elementos Memória Frequência Lógicos (LUTs) (bits) (MHz) Latência (ciclos) 206 0 357,78 4 232 0 253,04 8 37 512 319,18 16 234 0 341,53 4 262 0 203,92 8 Embora a arquitetura implementada para a primeira e para segunda Hadamard tenha apresentado melhores resultados de freqüência de operação, este mesmo fato não ocorre quando da implementação da arquitetura da Transformada Hadamard 4x4 em duas dimensões (2-D). Observa-se neste caso, que a arquitetura original apresenta os melhores resultados em termo de freqüência de operação, como pode ser observado na Tabela 6.4. Isto pode ter ocorrido devido ao melhor mapeamento interno do componente FPGA para esta arquitetura ao conectar-se os módulos da transformada. Entretanto, deve-se observar que a arquitetura implementada apresenta a menor utilização de recursos de hardware em relação à arquitetura original. Outro aspecto importante a ser destacado é a menor quantidade de ciclos de relógio utilizada pela arquitetura implementada, devido ao fato de utilizar compressores 4:2 que realizam a soma simultânea de 4 operandos. Tabela 6.4: Resultado de Síntese da Arquitetura Serial com Separabilidade Elementos Frequência Latência Arquitetura Memória Lógicos (LUTs) (MHz) (ciclos) Implementada 456 512 97,26 24 (AGOSTINI, 514 512 183,04 32 2007) 80 6.1.2.2.2 Arquitetura Serial sem Separabilidade Outra arquitetura dedicada implementada para a Transformada Hadamard 4x4 Direta foi a arquitetura serial sem separabilidade. A motivação para o estudo desta arquitetura deve-se ao fato da solução da arquitetura original de (AGOSTINI, 2007) apresentar uma latência elevada. Neste caso, o uso de compressores pode reduzir de forma significativa o número de ciclos de relógio. Para esta arquitetura, torna-se interessante a utilização do compressor 16:2, visto que o uso deste tipo de compressor pode acelerar as operações de soma e subtração, considerando que a estrutura deste possibilita a soma simultânea de dezesseis números. A utilização deste compressor reduz a arquitetura para um compressor 16:2, dezesseis multiplexadores e complementadores, um buffer ping-pong e deslocador à direita, como mostra a Figura 6.11. Figura 6.11: Arquitetura Serial sem Separabilidade Utilizando o Compressor 16:2 Os valores para a entrada desta arquitetura também são entregues serialmente, isto é, a cada ciclo de relógio, o (buffer ping-pong) de dezesseis posições, recebe uma nova amostra. 81 Nesta arquitetura são utilizados os circuitos que realizam o complemento de dois, assim também como multiplexadores para a seleção das entradas complementadas. A arquitetura é constituída de um (buffer ping-pong) de 16 posições, representado na Figura 6.11 pelo retângulo numerado de 0 à 15, armazenando toda a matriz 4x4 de entrada. Assim que as 16 amostras de entrada são recebidas o (buffer ping-pong) as transfere para as entradas dos circuitos de complemento de dois e para os multiplexadores. Essa característica da soma de 16 amostras simultaneamente faz com que sejam necessários 16 ciclos de relógio para a realização dos cálculos da Transformada Hadamard. Com isto, esta solução arquitetural possui uma menor latência do que a arquitetura original que opera em 64 ciclos de relógio, como pode ser observado na Tabela 6.5. Tabela 6.5: Resultado de Síntese da Arquitetura Serial sem Separabilidade Frequência Latência Arquiteturas LUTs (MHz) (ciclos) Implementada 1047 288,1 16 (AGOSTINI, 2249 146,11 64 2007) Como pode ser observado na Tabela 6.5, a arquitetura com compressor 16:2 apresenta um menor uso de recursos de hardware. Isso acontece devido à redução do número de (buffers ping-pong) e de somadores. Esta redução também propicia a redução do caminho crítico do circuito, fazendo com que a arquitetura com compressor 16:2 apresente uma maior freqüência de operação. Esta maior freqüência aliada a um menor número de ciclos de relógio confere a esta arquitetura um grande desempenho, quando comparada com a arquitetura original. Portanto, esta seção apresentou as alternativas arquiteturais para a Transformada Hadamard Direta 4x4. Foram abordadas sete implementações, sendo estas voltadas para arquiteturas seriais: uma serial com separabilidade e uma serial sem separabilidade e quatro arquiteturas combinacionais. Foram obtidos resultados de área, freqüência de operação e atraso para as arquiteturas descritas, com a síntese sendo realizada com a ferramenta (Quartus II) da Altera. A partir deste estudo, o trabalho atingiu o seu objetivo inicial de verificar o comportamento das arquiteturas dedicadas da Transformada Hadamard, quando do uso de circuitos somadores compressores 4:2, 8:2 e 16:2. Este estudo serviu como embasamento para as futuras implementações de arquiteturas voltadas para ASIC. 82 6.1.2.3 Implementações em ASIC para a Transformada Hadamard 4x4 Nesta seção são descritas as três versões arquiteturais implementadas para a transformada Hadamard 4x4. Para as implementações ASIC, foram apenas implementadas arquiteturas combinacionais. Os compressores 4:2, 8:2 e 16:2 que foram utilizados neste estudo, incluem uma barreira de pipelines internamente entre a linha de compressores e a linha de somadores para a recombinação dos resultados parciais de soma e carry. Os somadores utilizados na estrutura interna dos compressores (somadores usados na linha de recombinação dos resultados parciais de soma e carry) foram implementados com o operador “+” da biblioteca Standard cells da ferramenta Leonardo Spectrum. Portanto, como o projeto é otimizado para desempenho, a ferramenta utiliza o somador Carry Look Ahead. Além disso, as entradas da transformada Hadamard 4x4 têm uma largura de 14 bits e suas saídas com 17 bits. No caso das implementações utilizando o compressor 4:2 foi inserida uma coluna de registradores entre as colunas de compressores. Assim, esta arquitetura foi desenvolvida com um pipeline de um estágio como mostra a Figura 6.12. Figura 6.12: Arquitetura para a Hadamard 4x4 implementada na Tecnologia ASIC Na arquitetura com compressor 8:2 também foi inserida uma barreira de registradores entre a coluna de compressores 8:2 e a coluna de somadores para realizar a implementação em pipeline. Neste caso, também foi utilizado o operador “+” (tanto internamente nos compressores 83 como nos somadores externos). Estes somadores são implementado com o Carry Look Ahead, como dito anteriormente. A Figura 6.13 mostra a arquitetura para esta versão arquitetural. Figura 6.13: Arquitetura para a Hadamard 4x4 implementada na Tecnologia ASIC A arquitetura utilizando o compressor 16:2 não sofreu alteração comparada a implementação direcionada para FPGA já mostrada na Figura 6.9. 6.1.2.4 Resultados de Síntese Todas as arquiteturas foram descritas em linguagem de descrição de hardware – VHDL. Para a síntese das arquiteturas foi utilizada a ferramenta Leonardo Spectrum para a tecnologia standard cell TSMC 0.18um. A Tabela 6.6 apresenta os resultados de síntese para a arquitetura proposta por (AGOSTINI, 2007) da transformada Hadamard 4x4 e também para as soluções desenvolvidas com o compressor 4:2, compressor 8:2 e compressor 16:2. A latência, área (em 84 termos de números de portas lógicas), frequência de operação, são apresentados para a arquitetura original e para as três novas arquiteturas propostas. Estas três novas arquiteturas para a transformada Hadamard 4x4 são: com compressor 4:2 (CA 4-2), com compressor 8:2 (CA 8-2) e com compressor 16:2 (CA 16-2). Como observado na Tabela 6.6, as três novas arquiteturas implementadas para a transformada Hadamard 4x4 apresentaram maior uso de área que a arquitetura original proposta em (AGOSTINI, 2007). Isto mostra que os compressores não são a melhor escolha quando o projeto está direcionado para utilizar poucos recursos de área. Contudo, este trabalho é focado em desempenho e neste requisito a arquitetura CA 8-2 obteve melhores resultados em termos de frequência de operação e latência, quando comparada com a arquitetura original e a arquitetura com compressor 4-2. Este resultado se deve ao fato desta arquitetura utilizar apenas uma coluna de compressores 8:2, enquanto que a arquitetura CA 4-2 utilizar duas colunas de compressores e A arquitetura CA 16-2 apresentou uma frequência de operação menor que a arquitetura original. Isto devido ao fato do compressor 16:2 utilizado na arquitetura CA 16-2 apresentar um caminho critico maior que o compressor 8:2. Porém, esta implementação (CA 16-2) obteve um dado relevante: a latência de 1 ciclo de relógio. Esta baixa latência deve-se ao fato de o compressor 16:2 que é utilizado nesta implementação realizar a soma dos 16 operandos de entrada, que são necessários para gerar um resultado final, de uma só vez. Tabela 6.6: Resultados da Transformada Hadamard 4x4 Área Frequência Throughput Arquitetura Latência (# de gates) (MHz) (Amostras/s) (AGOSTINI, 2007) 9991 4 384,61 6.15G CA 4-2 17084 4 278,55 4.45G *CA 8-2 19769 2 390,62 6.24G CA 16-2 30030 1 353,35 5.65G 6.1.3 Arquitetura para Transformada Hadamard 2x2 Como pôde ser visto na Equação 4.4, a matriz de entrada com os elementos DC que determina o cálculo da transformada Hadamard 2x2 é composta somente por quatro operandos. Assim, para obter o resultado final de cálculo desta transformada é necessário implementar somente adições e algumas subtrações, utilizando-se no máximo quatro operandos. Tendo em vista esta característica da transformada Hadamard 2x2, implementou-se somente uma alternativa arquitetural, mostrada na Figura 6.14, utilizando o somador compressor 4:2. Para esta 85 transformada a utilização dos compressores que adicionam mais de quatro operandos como o compressor 8:2 e o compressor 16:2, não faz sentido. Esta arquitetura é bastante simples, além do compressor 4:2 a arquitetura possui módulos de complemento de dois utilizados quando se faz necessário a realização de subtrações. As entradas são de 14 bits e a saída é representada em 16 bits. Figura 6.14: Arquitetura para a Transformada Hadamard 2x2 6.1.3.1 - Resultados de Síntese As duas arquiteturas foram descritas em linguagem de descrição de hardware – VHDL. Para a síntese das arquiteturas foi utilizada a ferramenta Leonardo Spectrum para a tecnologia standard cell TSMC 0.18um. A Tabela 6.7 apresenta os resultados de síntese para a arquitetura original da transformada Hadamard 2x2 (AGOSTINI, 2007) e também para a nova solução desenvolvida com o uso do compressor 4:2 (CA 4-2). A latência, área (em números de portas lógicas), frequência de operação, são apresentados para a arquitetura original e para a nova arquitetura proposta. A arquitetura CA 4-2 proposta apresentou maior uso de recursos de hardware do que a arquitetura original. Por outro lado, a nova arquitetura desenvolvida apresentou maior frequência de operação, 467,29 MHz, contra 431,03 MHz obtida pela arquitetura proposta em (AGOSTINI, 2007). Além disso, a latência da nova arquitetura é de somente 1 ciclo de relógio e este resultado, juntamente com a maior frequência de operação, fazem desta arquitetura uma eficiente alternativa para a transformada Hadamard 2x2 (com maior throughput, como pode ser visto na Tabela 6.7. 86 Tabela 6.7: Resultados de Síntese da Transformada Hadamard 2x2 Frequência Área Latência (MHz) (# de gates) AGOSTINI, 2007 1170 2 431,03 *CA 4-2 1984 1 467,29 Arquitetura Throughput (amostras/s) 1.72G 1.87G 6.1.4 Validação do Módulo T Completo As arquiteturas desenvolvidas foram descritas em VHDL e sintetizadas para a tecnologia standard cell TSMC 0.18um. A síntese foi gerada usando a ferramenta Leonardo Spectrum. A Tabela 6.8 mostra os resultados de síntese para as arquiteturas das transformadas propostas e para a implementação completa do módulo T. Estes resultados são apresentados em termos de número de gates usadas, frequência máxima, latência com pipeline e throughput. Tabela 6.8: Resultados para o Módulo T Completo 2x2 FHAD Área Frequência Latência Throughput (gates) (MHz) (ciclos) (amostras/s) 17027 432.9 1 6.92 G 1984 467.2 1 1.86 G 4x4 FHAD 20710 390.6 2 6.24 G Modulo T 43107 390.6 - 6.24 G Arquitetura 4x4 FDCT A frequência de operação do módulo será a mesma da transformada Hadamard 4x4, pois, esta transformada possui o maior caminho critico entre as transformadas que compõe o módulo T. O custo de área do módulo T é igual à soma das gates das três transformas mais os dois buffer (de luminância e crominância, conforme a Figura 4.1). Para atingir esta alta frequência foi necessário o uso de pipeline em pontos estratégicos para reduzir o caminho critico. A arquitetura proposta neste trabalho opera em modo intra 16x16 e pode processar um macrobloco em 27 ciclos de relógio e com a frequência máxima de operação, a arquitetura proposta pode processar 2782 HD1080p (1920x1080 pixels) quadros por segundo. Para alcançar real time (30 quadros por segundo) a arquitetura necessita de somente 0.24 MHz. 6.1.5 Comparação com Resultados da Literatura Até o momento, várias arquiteturas VLSI para as transformadas do módulo T foram apresentadas, mas existem poucos trabalhos com o modulo T completo para o padrão 87 H.264/AVC. Assim como este trabalho de TFG, em (PORTO, 2007), apresenta-se uma implementação completamente paralela para o modulo T direcionada para FPGA, usando operadores aritméticos da biblioteca Xilinx. Esta arquitetura pode alcançar 303.63 MHz com uma latência de macrobloco de 31 ciclos de relógio. Outras arquiteturas multi-transformadas foram propostas na literatura atual. Em (AGOSTINI, 2006), a arquitetura multi-transformada processa todas as transformadas do modulo T e também está apta a selecionar o nível de paralelismo desejado. No trabalho (WANG, 2003) é proposta uma arquitetura que pode processar todas as transformadas 4x4 do módulo T (FDCT e Hadamard) com uso de recursos de hardware de 6538 gates e thoughput de 320M amostras/s operando numa frequência de 80 MHz. A arquitetura proposta em (KUAN, 2006) é composta por uma multi-transformada sem memória transposta e pode alcançar 1.6G amostras/s com uma frequência de 200MHz. Outra multi-transformada proposta em (WEI, 2008) opera a 200 MHz processando 16 amostras por ciclo. A arquitetura proposta em (PORTO, 2007) foi sintetizada em FPGA. Para realizar uma comparação justa com o trabalho de (PORTO, 2007), reproduzimos esta arquitetura em versão ASIC usando operados aritméticos da biblioteca utilizada, chamada Rp. Como mostra a Tabela 6.9 nossa arquitetura foi comparada com trabalhos relacionados da literatura atual. A solução (PORTO, 2007) é uma arquitetura dedicada ao modulo T. Outras comparações são com arquiteturas multi-transformadas. Desta forma, os resultados de latência de macrobloco foram estipulados do mesmo modo que feito neste trabalho. Nossa arquitetura alcançou alta frequência de operação comparada com (AGOSTINI, 2006), (WANG, 2003), (KUAN, 2006) e (WEI, 2008), e portanto, um maior throughput. Comparado com a solução de (PORTO, 2007), nossa arquitetura alcançou a mesma frequência de operação, mas pode processar um macrobloco com menor quantidade de ciclos de relógio (27 contra 31). A utilização de somadores compressores para encontrar o máximo de paralelismo acarreta em maior custo de área, ou seja, realizar maior número de somas simultâneas implica em maior custo de recursos de área na nossa arquitetura. 88 Tabela 6.9: Resultados Comparativos com Trabalhos Relacionados ARQUITETURAS (PORTO, (AGOSTINI, (WANG, (KUAN, (WEI, 2007) 2006) 2003) 2006) 2008) Processo (µm) Área (gates) Frequência (MHz) Throughput (amostras/s) Latência do MB (ciclos) Proposta 0.18 0.35 0.35 0.18 0.18 0.18 20310 18353 6538 6482 11038 43107 390.6 218.7 80 100 200 390.6 6.24G 3.5G 320M 800M 3.2G 6.24G 31 100 100 - 27 27 Um alto throughput e baixa latência são importantes requisitos para o desempenho geral do codificador do H.264/AVC. Isto porque o módulo de predição usa o bloco intra atual para gerar o próximo bloco intra predito, mas o bloco atual deve ser processado pelo módulo T e pela quantização para ser usado no módulo de predição (AGOSTINI, 2007). Baseado nestes requisitos a arquitetura proposta neste trabalho possui alto desempenho, quando comparada com trabalhos relacionados da literatura. 6.2 Soluções Arquiteturais: Estimação de Movimento (ME) As arquiteturas desenvolvidas nesta parte do trabalho são baseadas em (PORTO, 2008). Esta arquitetura é mostrada na Figura 6.15. A arquitetura possui um módulo de memória, que reúne um conjunto de memórias internas para armazenar os blocos que são candidatos a bloco de referência e o bloco do quadro atual que é bloco para o qual a estimação está sendo realizada. São utilizadas nove unidades de processamento (UP), onde cada UP é responsável por calcular o SAD para um bloco candidato. A Figura 6.15 também apresenta o módulo de controle e o comparador. O comparador recebe o resultado de SAD calculado pelas nove UPs e encontra o menor resultado. Cada UP processa oito amostras em paralelo. Isso significa que uma linha inteira do bloco de 16x16 sub-amostrado (o bloco sub-amostrado possui 16 linhas de oito amostras) é processada em paralelo. A Figura 6.16 lustra a arquitetura de uma UP de oito amostras. Este bloco consiste em uma árvore de somadores em pipeline. Primeiramente, as oito amostras do 89 bloco atual e do bloco candidato são subtraídas. Após, o módulo da diferença entre as amostras é somado e o resultado final da acumulação das diferenças, para todas as amostras da linha, é armazenado no registrador de saída. A UP tem uma latência de quatro ciclos de relógio e, com o pipeline completo, ela pode calcular uma linha de bloco candidato a cada ciclo de relógio. Um conjunto somador/acumulador é utilizado nas saídas das UPs para armazenar os resultados intermediários de cada bloco candidato. Ao todo, 16 acumulações são necessárias para gerar o resultado final do SAD para um bloco candidato, sendo uma acumulação para cada linha do bloco. As UPs recebem os dados das memórias de bloco candidato (CBM) e da memória do bloco atual (CB). Cada UP recebe uma palavra da CBM e uma palavra da CB e calcula a diferença entre as oito amostras presentes em cada uma destas palavras. Figura 6.15: Arquitetura para ME proposta em (PORTO, 2008) 90 B0 abs R0 B1 abs R1 B2 abs R2 B3 abs R3 B4 abs R4 B5 abs R5 B6 abs R6 B7 abs R7 Figura 6.16: Arquitetura da Unidade de Processamento (UP) 6.2.1 Otimização proposta neste trabalho Neste trabalho foram proposta duas novas arquiteturas para a ME, onde a principal inovação encontra-se localizada nas noves UPs existentes na arquitetura original. A UP desenvolvida em (PORTO, 2008) utiliza uma árvore de somadores com um pipeline de quatro estágios. Cada UP pode processar oito amostras em paralelo e isto permite que uma linha de 16x16 do bloco sub-amostrado seja processada em paralelo. Então, oito acumulações podem ser usadas para gerar o resultado final do SAD de cada bloco, sendo uma acumulação por linha. Igualmente a arquitetura original apresentada anteriormente, a solução proposta também processa oito amostrars em paralelo. A principal diferença entre estas arquiteturas para UPs é o tipo de somadores utilizados. A arquitetura proposta usa somadores compressores eficientes para calcular as adições da UP. A Figura 6.17(a) mostra a arquitetura para a UP com compressor 4:2. Dois compressores 4:2 são usados para realizar a soma de oito operandos que estão disponibilizados na saída da primeira coluna de registradores. Os valores calculados pelos compressores 4:2 representam os módulos da diferença de cada par de operandos de entrada. O resultado final da UP é calculado pela soma dos resultados produzidos pelas saídas de cada compressor 4:2. Portanto, o fato de quatro somas simultâneas serem realizadas pelo compressor 4:2, permite a eliminação de uma coluna de somadores, como pode ser comparado nas Figuras 91 6.14 e 6.17(a). Assim, a solução arquitetural proposta permite a redução de um ciclo de relógio quando comparada à solução original. Com a intenção de aumentar o desempenho da UP, foi proposto uma solução arquitetural com o uso dos compressores 8:2, como pode ser visto na Figura 6.17(b). Nesta arquitetura, oito amostras podem ser processadas simultaneamente pelo compressor 8:2, e isto, comparado com a solução original, permite a eliminação de duas colunas da árvore de somadores. Assim, a UP com compressor 8:2 reduz o cálculo em dois ciclos de relógio. Como pode ser visto na Figura 6.17(b) após a primeira coluna de registradores, somente um compressor 8:2 é necessário para calcular o resultado final. Figura 6.17 Estrutura da UP da ME (a) com Compressor 4:2; (b) com Compressor 8:2 6.2.2 Avaliação dos Resultados A arquitetura original e as duas arquiteturas propostas (usando compressor 4:2 e compressor 8:2) utilizam 26 ciclos de relógio para preencher toda a memória e iniciar o cálculo do SAD. A arquitetura original das UPs tem uma latência de quatro ciclos, enquanto que as arquiteturas com o compressor 4:2 e com o compressor 8:2 têm uma latência de três e dois ciclos 92 respectivamente. Todas as versões necessitam de sete ciclos a mais para calcular o SAD de um bloco. O comparador usa cinco ciclos para escolher o menor SAD. Assim, 42 ciclos de relógio são necessários para processar o primeiro LDSP na arquitetura original. O SDSP necessita de 20 ciclos para calcular o SAD para quatro blocos candidatos de SDSP. Então, no melhor caso, a arquitetura original pode gerar um vetor de movimento em 62 ciclos. A arquitetura desenvolvida com UPs utilizando o compressor 4:2 usa 41 ciclos de relógio para processar a primeira LDSP, e 19 ciclos para calcular o SDSP. Assim, no melhor caso, esta arquitetura pode gerar um vetor de movimento em 60 ciclos de relógio. A segunda arquitetura, usando o compressor 8:2 nas UPs, utiliza somente 40 ciclos de relógio para calcular o primeiro LDSP e 18 ciclos para processar a SDSP. Então, no melhor caso, esta arquitetura usa 58 ciclos de relógio para gerar um vetor de movimento. O algoritmo da arquitetura original utiliza em média três interações para encontrar o melhor caso. Dez ciclos de relógio são necessários para a latência da memória. A UP original usa mais 11 ciclos, enquanto que a UP com compressor 4:2 utiliza 10 ciclos e a UP com compressor 8:2 usa 9 ciclos de relógio. Então, cada interação na arquitetura original da ME utiliza 26 ciclos de relógio, enquanto as soluções com o compressor 4:2 e 8:2, utilizam 25 e 24 ciclos, respectivamente. Todas as alternativas foram implementadas utilizando o controle dinâmico de iteração (DIC). Esta inovação foi introduzida para limitar o número máximo de iterações que o algoritmo pode executar para gerar um vetor de movimento. Nestas arquiteturas, o DIC permite 20 ciclos para cada geração de vetor de movimento. Este número foi definido através de uma análise em software realizada em (PORTO, 2008), que concluiu que o algoritmo não utilizava mais do que 14 iterações para gerar um vetor de movimento. Então, considerando o pior caso, a arquitetura original utiliza um máximo de 582 ciclos para gerar um vetor de movimento. As arquiteturas com compressor 4:2 e com o compressor 8:2 utilizam 560 e 538 ciclos respectivamente. 6.2.3 Resultados de Síntese As arquiteturas foram implementadas em linguagem de descrição de hardware – VHDL. Para a síntese das arquiteturas foi utilizada a ferramenta Leonardo Spectrum para a tecnologia 93 standard cell TSMC 0.18um. A Tabela 6.10 apresenta os resultados de síntese para a arquitetura original da ME e também para as soluções desenvolvidas com o compressor 4:2 e com o compressor 8:2. A latência, área (em termos de números de portas lógicas), frequência de operação e número de quadros por segundo (fps) para HDTV, considerando o pior caso e o caso médio, são apresentados para a arquitetura original e para as duas novas arquiteturas propostas (ME com compressor 4:2 e ME com compressor 8:2). O caso médio para o calculo de fps foi obtido através de implementação em software do algoritmo (PORTO, 2008). O algoritmo utiliza em média três interações no segundo passo de interação. O número de interações que o algoritmo realiza no caso médio foi obtido através da implementação em software. Esse número de interações também foi utilizado para o cálculo de fps nas arquiteturas com os compressores. O pior caso está definido pelo DIC, e todas as arquiteturas permitem 20 interações para cada geração de vetor de movimento. Como observado na Tabela 6.10, a arquitetura da ME com o compressor 4:2 e a arquitetura com o compressor 8:2 são mais eficientes que a arquitetura original proposta em (PORTO, 2008). Particularmente, a arquitetura para ME com o compressor 4:2 é a que apresenta a maior frequência de operação entre as arquiteturas. Isto se deve ao fato do somador compressor 4:2 usado nas UPs da ME possuir um caminho crítico menor que o caminho crítico do somador compressor 8:2 usado na segunda alternativa para as UPs implementadas. A arquitetura das UPs com o compressor 4:2 apresenta uma latência de 60 ciclos de relógio. Com isto, esta arquitetura pode processar 63 quadros por segundo para HDTV 1080p no pior caso. Este valor foi obtido através do cálculo realizado com o período da arquitetura multiplicado pelo número de vetores do quadro e pelo número de ciclos gasta para processar um vetor de movimento. Esse será o tempo total necessário para processar um quadro do vídeo. Após, basta somente fazer a divisão de 1 segundo pelo valor anteriormente calculado para termos o número de quadros por segundo que a arquitetura processa. Por outro lado, quando três interações são necessárias para calcular um vetor de movimento, a arquitetura pode processar 240 quadros por segundo. A arquitetura da ME com compressor 8:2 apresenta uma menor freqüência de operação do que a arquitetura com compressor 4:2. Contudo, a arquitetura com compressor 8:2 apresenta dois ciclos de relógio a menos (58 contra 60 da arquitetura com compressor 4:2). Esta diferença de freqüência de operação entre as duas arquiteturas não é significante. Então, a arquitetura para 94 ME com compressor 8:2 alcança os melhores resultados para o processamento de quadros por segundo HDTV 1080p (65 quadros por segundo no pior caso e 269 quadros por segundo no caso médio). Outro importante ponto a ser observado na Tabela 6.10 é o maior número de portas lógicas apresentado pela arquitetura com compressor 4:2. Foi observado que o uso separado de dois compressores 4:2 contribuiu para o alto número de portas lógicas apresentada pela arquitetura que utiliza o compressor 4:2. Contudo, quando utilizado um somador mais complexo, como o compressor 8:2, a arquitetura utiliza uma única coluna de somadores e perde uma coluna de registradores. Isto contribui para o menor número de portas lógicas apresentada pela arquitetura que utiliza o compressor 8:2. Tabela 6.10: Resultados de Síntese para Arquiteturas da ME Arquitetura ME com ME com Parâmetros Original (Porto, compressor 4:2 compressor 8:2 2008) Latência UP 11 10 9 (ciclos de clock) Área 28.087 29.702 28.858 (# de gates) Frequência 272.6 287.3 283.0 (MHz) HDTV 1080p fps 58 63 65 (pior caso) HDTV 1080p fps 240 263 269 (caso médio) 6.2.4 Comparação com Resultados da Literatura As versões standard cell da arquitetura da ME foram comparadas com outras implementações publicadas na literatura. A Tabela 6.11 mostra a comparação das arquiteturas para a ME implementadas neste trabalho com implementações apresentadas em (LI, 2005), (GAEDKE, 2007) e (HE, 2007). 95 Solução Tabela 6.11: Resultados Comparativos Área Frequência Processo (K gates) (MHz) HDTV (FPS) (LI, 2005) 0.18µm 17.5 200 23 (GAEDKE, 2007) 90nm 1200 334 25 (HE, 2007) 0.25µm 1020 100 46 (PORTO, 2008) (pior caso) 0.18µm 28.8 272 57 0.18µm 29.7 287 63 0.18µm 28.0 283 65 ME com compressor 4:2 (pior caso) ME com compressor 8:2 (pior caso) As arquiteturas apresentadas em (GAEDKE, 2007) e (HE, 2007) usam o algorimo Full Search e foram desenvolvidas para aplicações HDTV. As arquiteturas para a ME desenvolvidas neste trabalho apresentaram uma significante redução em termos de resulatdos de área quando comparadas a (GAEDKE, 2007) e (HE, 2007), onde mais de 30 vezes menos área foi utilizado. Contudo, as arquiteturas desenvolvidas apresentaram um uso de recursos de hardware um pouco maior que a arquitetura (LI, 2005). O fato das arquiteturas propostas e também a arquitetura de (PORTO, 2008) serem baseadas em algoritmos rápidos, e considerar uma pequena área de pesquisa, torna estas arquiteturas mais eficientes do que as de (LI, 2005), (GAEDKE, 2007) e (HE, 2007). As arquiteturas deste trabalho apresentaram maior throughput, inclusive quando não alcançou a maior frequencia de operação entre as soluções standard cells. As arquiteturas utilizando compressor 4:2 e compressor 8:2 também apresentaram a melhor relação entre uso de recursos de hardware e throughput entre todos os trabalhos comparados. Particularmente, a arquitetura para a ME com compressor 8:2 apresentou o melhor resultado de taxa de processamento, com um incremento muito pequeno na utilização de gates, em comparação com a arquitetura de (PORTO, 2008) 96 7 CONCLUSÕES E TRABALHOS FUTUROS Esta dissertação apresentou soluções arquiteturais de alto desempenho para dois módulos do padrão H.264/AVC: o módulo das transformadas diretas (T) e o módulo de estimação de movimento. Uma ampla avaliação inicial sobre a viabilidade de inclusão se somadores eficientes nos módulos do padrão foi desenvolvida, que serviu como base para escolher os módulos e os somadores que melhor serviam para a realização das implementações em hardware. O trabalho apresentado nesta dissertação foi dividido em três grandes etapas: i) estudo de somadores eficientes, principalmente os somadores compressores 4:2, 8:2 e 16:2, ii) avaliação dos módulos do padrão H.264/AVC nos quais poderiam ser aplicados estes somadores com sucesso e iii) desenvolvimento arquitetural. Na primeira etapa, uma ampla pesquisa foi realizada sobre os principais somadores eficientes existentes na literatura. Além dos compressores, somadores como Ripple Carry e Carry Look Ahead também foram utilizados. Com este estudo inicial, foi verificado que os somadores que melhor atendem aos requisitos de desempenho são os somadores compressores. O estudo dos compressores começou pelo compressor 4:2, foram feitas simulações para a comparação com outros somadores que indicaram o melhor desempenho do compressor 4:2 para a adição simultânea de quatro operandos. A partir destes resultados foi realizado o desenvolvimento dos compressores 8:2 e 16:2 para serem usados na adição simultânea de 8 e 16 operandos, respectivamente. Na segunda etapa desta dissertação, foi realizada uma ampla investigação nos módulos do padrão H.264/AVC para localizar situações de aplicabilidade dos somadores investigados. Nesta etapa foi identificado que o módulo das transformadas diretas do padrão, por conter as transformadas FDCT-2D, transformada Hadamard 4x4 e transformada Hadamard 2x2, que realizam os seus cálculos basicamente utilizando somas e subtrações, seriam um excelente estudo de caso. Além deste, o módulo de estimação de movimento foi escolhido por ser um módulo que apresentou o maior número de inovações no padrão e também por ser um módulo com elevada complexidade computacional e, portanto, a exigência de desempenho ser alta. Neste módulo, a unidade de processamento (UP) para o cálculo do SAD é composta por uma árvore de somadores. Desta forma, os somadores compressores foram também empregados neste módulo. 97 Na terceira etapa do trabalho foram desenvolvidas as diversas arquiteturas de hardware para as transformadas, tanto para ASIC como FPGA, e também para a estimação de movimento. As primeiras arquiteturas desenvolvidas para a transformada Hadamard 4x4 foram descritas em VHDL e sintetizadas para FPGA da Altera. Após foram feitas as descrições voltadas para ASIC das arquiteturas da FDCT-2D, Hadamard 4x4, Hadamard 2x2 e estimação de movimento. Os resultados de síntese para todas as arquiteturas foram apresentados e mostraram que as arquiteturas desenvolvidas obtiveram um alto desempenho, quando do uso dos somadores compressores. Os resultados obtidos na implementação dos módulos da transformada direta e da estimação de movimento obtiveram resultados muito satisfatórios, inclusive com o reconhecimento de publicações em importantes eventos da área, como pode ser visto nas referências bibliográficas. 7.1 Trabalhos Futuros Esta seção sugere algumas idéias de futuros trabalhos que darão prosseguimento à linha de pesquisa seguida nesta dissertação de mestrado. 7.1.1 Aplicação dos Somadores Compressores ao Módulo das Transformadas Inversas Como trabalhos futuros, pretende-se desenvolver com aumento de desempenho outros módulos do padrão H.264/VAC, como o módulo das transformadas inversas (T-1). Como as matrizes de cálculo das transformadas inversas são muito próximas às transformadas diretas, pretende-se aplicar os somadores eficientes também a este módulo. 7.1.2 Verificação do Consumo de Potência dos Módulos das Transformadas Um dos principais aspectos dos circuitos somadores compressores é a possibilidade de redução do consumo de potência. Isto pelo fato dos compressores serem compostos por portas lógicas XOR e circuitos multiplexadores (MUX). Como estes circuitos podem ser desenvolvidos com transistores de passagem, logo os somadores compressores podem ser bem otimizados quando desenvolvidos com esta metodologia. Desta forma, pretende-se verificar o impacto no consumo de potência dos módulos das transformadas direta e inversa, quando do uso dos somadores compressores. 98 7.1.3 Verificação do Aumento do Paralelismo na Arquitetura da ME para Verificação do Uso dos Somadores Compressores Visto que os compressores permitem fazer a soma de muitos operandos simultaneamente e que as memórias para o armazenamento dos blocos candidato e atual são muito pequenas (9216 bits no total) a questão central seria verificar se não daria para paralelizar ainda mais o hardware (fazer mais interações por ciclo de relógio) no sentido de verificar qual seria o impacto disto em desempenho e consumo de potência. 99 REFERÊNCIAS AGOSTINI, L. V. Desenvolvimento de Arquiteturas de Alto Desempenho Dedicadas à Compressão de Vídeo Segundo o Padrão H.264/AVC. 2005. Proposta de Tese de Doutorado — UFRGS, Porto Alegre/Rs. AGOSTINI L.; ET ALL, “High Throughput Multitransform and Multiparallelism IP for H.264/AVC Video Compression Standard” IEEE INTERNATIONAL SYMPOSIUM ON CIRCUITS AND SYSTEMS, KOS ISLAND, 2006. AGOSTINI, L. V. “Desenvolvimento de Arquiteturas de Alto Desempenho Dedicadas à Compressão de Vídeo Segundo o Padrão H.264/AVC”. 2007. Tese de Doutorado — UFRGS, Porto Alegre/RS. ALTERA. www.altera.com, Acessado em: junho, 2008. [S.l: s.n.], 2008. ALTERMANN, J.; COSTA, E.; ALMEIDA, S.; SILVA, A. “High Performance Architecture for the Forward Transforms Module of the H.264/AVC HVideo Compression Standard”. IN: ISCAS, 2009. AZEVEDO, A.; ZATT, B.; AGOSTINI, L.; BAMPI, S. ”MoCHA: a Bi-Predictive Motion Compensation Hardware for H.264/AVC Decoder Targeting HDTV”. [S.L.]: IN: IEEE International Symposium on Circuits and Systems, 2007. 4P. CHAO, Y.; WEI, S.; YANG, J.; LIU, B. ”Combined Decoding and Flexible Transform Designs for Effective H.264/AVC Decoders”. [S.L.]: IN: IEEE International Symposium on Circuits and Systems, 2007. 4P. COSTA, E. A. C. DA. “Operadores Aritméticos de Baixo Consumo para Arquiteturas de Circuitos DSP”. 2002. Tese de Doutorado — UFRGS, Porto Alegre/RS. DINIZ, C. “Arquitetura de Hardware Dedicada para a Predição Intra-Quadro em codificadores do Padrão H.264/AVC de Compressão de Vídeo”. Dissertação de Mestrado. PPGC – UFRGS. 2009. DTV. www.dtv.org.br, Acesado em: junho, 2008. [S.L.: S.N.], 2008. GAEDKE, K.; BORSUM, M.; GEORGI, M.; KLUGER, A.; LE GLANIC, J.; BERNARD, P. “Architecture and VLSI Implementation of a programmable HD Real-Time Motion Estimator.” IEEE International Symposium on Circuits and Systems, NEW ORLEANS, USA, 2007. PP. 1609-1612. GONZALES, R.; WOODS, R. “Processamento de Imagens Digitais”. São Paulo: Edgar Blücher, 2003. 100 HE, W.; MAO, Z. “An Improved Frame-Level Pipelined Architecture for High Resolution Video Motion Estimation” IEEE International Symposium On Circuits And Systems, NEW ORLEANS, USA, 2007. PP. 1381-1384 HISHAN, C.; KOMAL, K.; AND MISHRA, A. “Low Power and Less Area Architecture for Integer Motion Estimation”. International Journal of Electronics, Circuits and Systems, 3:1, pp. 11-17, 2009. HWANGBO, W.; KIM, J.; KYUNG, C. ”A High-Performance 2-D Inverse Transform Architecture for the H.264/AVC Decoder”. [S.L.]: IN: IEEE International Symposium on Circuits and Systems, 2007. 4P. ISO/IEC. ”Coding of Moving Pictures and Associated Audio for Digital Storage Media up to About 1.5Mbits/s - Part 2: Video”. [S.L.: S.N.], 1993. ISO/IEC. ”MPEG-4 Part 2 (01/99): Coding of Audio Visual Objets - part 2: Visual”.[S.L.: S.N.], 1999. ITU-T. ”Recommendation H.261 v1(11/90): Video Codec for Audiovisual Services at px64 Kbit/s”. [S.L.: S.N.], 1990. ITU-T; ISO/IEC. ”ITU-T Recommendation H.262 and ISO/IEC 13818-2(MPEG-2): Generic Coding of Moving Pictures and Associated Audio Information - Part 2: Video”. [S.L.: S.N.], 1994. ITU-T. ”Recommendation H.263 Communication”. [S.L.: S.N.], 2000. (11/2000): Video Coding for Low Bit Rate ITU-T. ”Recommendation H.264 (05/03): Advanced Video Coding for Generic Audio visual Services”. [S.L.: S.N.], 2003. ITU-T. ”Recommendation H.264 (03/05): Advanced Video Coding for Generic Audio visual Services”. [S.L.: S.N.], 2005. JIN, G.; JUNG, J.; LEE, H. ”An Efficient Pipelined Architecture for H.264/AVC Intra Frame Processing”. [S.L.]: IN: IEEE International Symposium on Circuits and Systems, 2007. 4P. KHAYAM, S. ”The Discrete Cosine Transform (DCT): Theory and Application”. Department of Electrical & Computer Engineering, Michigan State University, 2003. KOZIRI, M.; STAMOULIS, G.; KATSVOUNIDIS, I. “A Low-Power VLSI Architecture for Intra and Inter Prediction”. In: H.264. ISCAS, 2006. KUAN-HUNG C.; JIUN-IN G.; JINN-SHYAN W. ‘A high-performance direct 2-D Transform Coding IP Design for MPEG-4AVC/H.264.’ Ieee Transactions on Circuits and Systems for Video Technology, VOLUME 16, ISSUE 4, APRIL 2006 PP. 472-483. 101 KUHN, P. M. “Algorithms, Complexity Analysis and VLSI Architectures for MPEG-4 Motion Estimation.” SPRINGER, JUNE 1999. KUO, C-CHUNG; LEI, S-FANG. “Design of a Low Power Architecture for CABAC Encoder.” In: H.264. ISCAS 2006. LI, T.; LI, S.; SHEN, C. “A Novel Configurable Motion Estimation Architecture for HighEfficiency MPEG-4/H.264 Encoding” IEEE Asia and South Pacific Design Aut. Conf., Shanghai, CHINA, 2005, PP 1264-1267. LIN, H-YAO; LU, Y-HONG; LIU, B-DA; YANG, J-FERR. “Low Power Design of H.264 CAVLC Decoder”. ISCAS 2006. LOPEZ, S.; CALLICO, G.; TOBAJAS, F.; LOPEZ, J. AND SARMIENTO, R. “A Flexible Template for H.264/AVC Block Matching Motion Estimation Architectures.” IEEE Transactions on Consumer Electronics, vol. 54, pp. 845-851, May 2008. MIANO, J. Compressed Image File Formats: JPEG, PNG, GIF, XBM, BMP. NEW YORK ASSISON-WESLEY, 1999. OKLOBDZIJA, V.; VILLEGER, D.; LIU, S. A Method for Speed Optimized Partial Product Reduction and Generation of Fast Parallel Multipliers and Alghorimic Approach. [S.L.]: IEEE Transaction on Computers, VOL.45, N◦ 3, 1996. PARHAMI, B. Computer Arithmetic: Algorithmis and Hardware Designs. [S.L.]: OXFORD UNIVERSITY PRESS, 1999. PARLAK, M.; HAMZAOGLU, I. A Low Power Implementation of H.264 Adaptive Deblocking Filter Algorithm. Second IEEE NASA/ESA Conference on Adaptive Hardware and Systems (AHS 2007). 2007. PORTO, R.; PORTO, M.; BAMPI, S.; AGOSTINI, L “High Throughput Architecture for Forward Transform Module of H.264/AVC Video Coding Standard” IEEE International Conference on Electronics, Circuits and Systems, 2007. ICECS 2007. PORTO, M.; BAMPI, S.; SUSIN, A.; AGOSTINI, L. “Architectural Design for the New QSDS with Dynamic Iteration Control Motion Estimation Algorithm Targeting HDTV.” In: SBCCI 2008, Gramado, Brasil. PORTO, M.; SILVA, A. M. C. DA.; ALMEIDA, S. J. M. DE; COSTA, E. A. C. DA. “Motion Estimation Architecture Using Efficient Adder-Compressors for HDTV Video Coding” In: Journal of Integrated Circuits and Systems, 2010. PRASAD, K.; PARHI, K. LOW “Power 4-2 and 5-2 Compressors.” [S.L.]: Proceedings of the 35th Asilomar Conference on Signals, Systems and Computers, VOL. I, 2001. 5P. 102 PURI, A.; CHEN, X.; LUTHRA, A. “Video Coding Using the H.264/MPEG-4 AVC Compression Standard.” [S.L.]: ELSEVIER B. V., 2004. 57P. RICHARDSON, I. VIDEO CODING DESIGN – “Developing Image and Video Compression Systems.” CHICHESTER: JOHN WILEY AND SONS, 2002. RICHARDSON, I. “H.264 and MPEG-4 Video Compression - Video Coding for Next Genration Multimedia.” CHICHESTER: JOHN WILEY AND SONS, 2003. ROSA, V. “Projeto de Arquiteturas de Hardware para a Compressão de Vídeo no Padrão H.264/AVC.” Proposta De Tese De Doutorado, UFRGS, 2009 – Porto Alegre/Rs, Brasil. SHI, Y.; SUN, H. “Image and Video Compression for Multimedia Engineering: Fundamentals, Algorithms and Standards.” BOCA RATON: CRC PRESS, 1999. SILVA, A. M. C. DA. “Desenvolvimento de um Compensador de Movimento para o Padrão H.264 de Compressão de Vídeo”. 2006. Monografia de Graduação — UFPEL, Pelotas/RS. SILVA, A. M. C. DA.; ALMEIDA, S. J. M. DE; COSTA, E. A. C. DA.; BAMPI, S. “Architectural Exploration of Forward 4x4 Hadamard Transform Directed to H.264/AVC Video Compression Standard.” In: VLSI-SOC, 2009a, Florianópolis, Brasil SILVA, A. M. C. DA.; PORTO, M.; ALMEIDA, S. J. M. DE; COSTA, E. A. C. DA. “High Performance Motion Estimation Architecture Using Efficient Adder-Compressors.” In: SBCCI, 2009b, Natal, Brasil. SULLIVAN, G.; WIEGAND, T. “Video Compression - From Concepts to the H.264/AVC Standard.” [S.L.]: Proceedings of the IEEE, 2005. 13P. UDYAWAR, K.; RAMACHANDRAN, A.; SHANDILYA, S. “Motion Estimation and Mode Decision for Low Power” H.264. ISCAS, 2006. WANG, T.; et al., ‘‘Parallel 4x4 2D transform and inverse transform architecture for MPEG-4 AVC/H.264,’’ in Proceedings of IEEE International Symposium on Circuits and Systems, May 2003, pp. 800—803. WEI, C.; HOU HUI, LAI JINMEI, TONG JIARONG, MIN HAO, “A High-Performance Reconfigurable 2-D Transform Architecture for H.264” IEEE INTERNATIONAL CONFERENCE ON ELECTRONICS, CIRCUITS AND SYSTEMS, 2008. ICECS 2008. WEINBERGER, A. “4-2 Carry-Save Adder Module”. [S.L.]: IBM Technical Disclosure Bulletin, 1981. 103 WIEGAND, T.; SULLIVAN, G.; BJONTEGAARD, G.; LUTHRA, A. “Overview of the H.264/AVC Video Coding Standard.” [S.L.]: IEEE Transactions on Circuits and Systems for Video Technology, 2003. 19P. 104 ANEXOS 105 ARTIGOS PUBLICADOS Architectural Exploration of Forward 4x4 Hadamard Transform Directed to H.264/AVC Video Compression Standard. André Marcelo C. Silva, Sérgio J. M. de Almeida, Eduardo A. C. da Costa. In: VLSI-SOC, 2009, Florianópolis, Brasil High Performance Motion Estimation Architecture Using Efficient Adder-Compressors. André Marcelo C. Silva, Sérgio J. M. de Almeida, Eduardo A. C. da Costa, Sérgio Bampi. In: SBCCI, 2009, Natal, Brasil. (Este paper foi convidado a ser publicado no Journal of Integrated Circuits and Systems, JICS) Parallel-Prefix Adders Applied to Adder Compressors. João S. Altermann, André Marcelo C. Silva, Sérgio J. M. de Almeida, Eduardo A. C. da Costa. In: IBERCHIP, 2009 – Buenos Aires, Argentina. SUBMETIDO - High Performance Architecture for the Forward Transforms Module of the H.264/AVC HVideo Compression Standard. João S. Altermann, Sérgio J. M. de Almeida, Eduardo A. C. da Costa, André Marcelo C. Silva. In: ISCAS 2010, Paris, França 106