Codificador de Entropia Segundo o Perfil Baseline do padrão H.264/AVC de Compressão de Vídeo

Documentos relacionados
ARQUITETURA DE HARDWARE DEDICADA PARA A DECODIFICAÇÃO EXP-GOLOMB DO PADRÃO H.264 DE COMPRESSÃO DE VÍDEO

QUANTIZAÇÃO DIRETA E INVERSA DE ALTA PERFORMANCE PARA A COMPRESSÃO DE VÍDEO H.264/AVC DIRECIONADA PARA HDTV

Projeto de Hardware para a Compensação de Movimento do Padrão H.264/AVC de Compressão de Vídeo

Universidade Federal do Rio Grande do Sul Instituto de Informática Programa de Pós-Graduação em Computação

PROJETO DE ARQUITETURAS SÍNCRONAS E DE ALTO DESEMPENHO PARA OS BLOCOS DAS TRANSFORMADAS DIRETAS E INVERSAS DA COMPRESSÃO H.264/AVC

Carolina Medeiros Carvalho

Estendendo o Conjunto de Instruções de um PPC para Uso de Transformadas do H.264

Arquitetura de um Módulo T Dedicado à Predição Intra do Padrão de Compressão de Vídeo H.264/AVC para Uso no Sistema Brasileiro de Televisão Digital

ARQUITETURA MULTITRANSFORMADA DE ALTO DESEMPENHO COM PARALELISMO PROGRAMÁVEL E DIRECIONADA PARA O PADRÃO DE COMPRESSÃO DE VÍDEO H.

Exploração do Espaço de Projeto da DCT 2-D de um Compressor de Imagens JPEG

MPEG-Systems. MPEG-1 Systems. MPEG-2 Systems. MPEG-2 Systems MPEG-2 TS. Tabelas do MPEG-2 TS. Cada pacote MPEG-2 TS indica

AVALIAÇÃO DOS IMPACTOS DO USO DE SOMADORES COMO MACRO FUNCTIONS EM UM PROJETO DE COMPRESSOR JPEG

MPEG-4 & H.264. Dissertação, entendimento e comparativo entre e com o MPEG-2

Desenvolvimento da Arquitetura Integrada dos Codificadores de Entropia Adaptativos ao Contexto CAVLC e CABAC do padrão H.264/AVC

Avaliação Algorítmica para a Estimação de Movimento na Compressão de Vídeos Digitais

4 H Conceitos importantes

Televisão Digital. MPEG-2 Video

MPEG-Systems. MPEG-2 2 Systems. Profa. Débora Christina Muchaluat Saade

Investigação Algorítmica sobre a Estimação de Movimento na Compressão de Vídeo Digital: Uma Análise Quantitativa

EXPLORAÇÃO DO ESPAÇO DE PROJETO EM ARQUITETURAS PARA CÁLCULO DA RAIZ QUADRADA INTEIRA

FPGA - Field Programmable Gate Array

Exploração no Espaço de Projeto da Hadamard 4x4 Direta do Padrão de Compressão de Vídeo H.264/AVC

Avaliação do Custo de Comunicação com a Memória Externa de uma Arquitetura em Hardware para Estimação de Movimento H.264

FERRAMENTA PARA ENSINO DAS TÉCNICAS DE COMPRESSÃO DE VÍDEO UTILIZADAS NO PADRÃO MPEG-2

6 Resultados da Simulação

Imagem Estática JPEG 2000 JPEG 2000 JPEG 2000 JPEG Joint Photographic Experts Group Padrão ISO/IEC 15444; ITU-T T.800

Fundamentos da Compressão de Vídeo

ERRATA que juntas formam que, combinadas, formam do filtro do filtro redutor redutor de efeito de bloco

Projeto e Implementação de um Fatorial em Hardware para Dispositivos Reconfiguráveis

Compressão de Imagens. Lilian Nogueira de Faria (Bolsista)...DPI/INPE Leila Maria Garcia Fonseca (Coordenadora)...DPI/INPE

3 Estimação e Compensação de movimento na codificação de vídeo

Arquitetura para o Algoritmo CAVLC de Codificação de Entropia segundo o Padrão H.264/AVC

FPGA & VHDL. Tutorial

Desenvolvimento Arquitetural para Estimação de Movimento de Blocos de Tamanhos Variáveis Segundo o Padrão H.264/AVC de Compressão de Vídeo Digital

Análise do desempenho do H.264 em arquiteturas multicore

PARSER EM VHDL PARA DECODIFICADOR DE VÍDEO H.264 PARA SBTVD

Broadband Engine Cell Processor. Arquitetura e Organização de Processadores (CPM237) Rodrigo Bittencourt Motta

IMPLEMENTAÇÃO EM FPGA DA TRANSFORMADA DISCRETA DE CO-SENOS COM QUANTIZAÇÃO PARA HDTV

Compressão de Imagens em Movimento

COMPRESSÃO DE SINAIS DE ELETROMIOGRAFIA

4 Realização e Caracterização do Módulo Receptor

IMPACTOS DO USO DE DIFERENTES ARQUITETURAS DE SOMADORES EM FPGAS ALTERA

EXPERIMENTOS COM SOMADORES RÁPIDOS PARA USO NA DCT 2-D. Roger Endrigo Carvalho Porto, Luciano Volcan Agostini

Estudo sobre decodificação iterativa usando códigos de treliça

Estudo e Desenvolvimento de Heurísticas e Arquiteturas de Hardware para Decisão Rápida do Modo de Codificação de Bloco para o Padrão H.

FPGA & VHDL. Tutorial Aula 1. Computação Digital

Codificação de Vídeo em MPEG-4

VHDL. Descrição e Projeto de Circuitos Utilizando VHDL

Aluno: João Gabriel Felipe Machado Gazolla. Professora: Drª. Débora Christina Muchaluat Saade. Disciplina: Redes Multimídia. 04 de Dezembro de

Performance and Power Consumption Analysis of Full Adders Designed in 32nm Technology

MEMÓRIA CACHE FELIPE G. TORRES

Arquitetura de Hardware Dedicada para a Predição Intra-Quadro em Codificadores do Padrão H.264/AVC de Compressão de Vídeo

Code Compression for Embedded Systems

FERRAMENTA DE PROFILING PARA PROCESSADORES SCHNEIDER, R. C. 1, NEVES, B. S. 1

Preditor de Vetores de Movimento em Hardware Segundo o Padrão H.264/AVC

Sistemas de Numeração. Sistemas de Numeração. Sistemas de Numeração. RUIDO em Sistemas Computacionais. Arquiteturas de Computadores

Sistemas Digitais I LESI :: 2º ano. Introdução

Módulo 6 Compressão Vídeo Sistemas Multimédia

Processamento de Imagem. Prof. MSc. André Yoshimi Kusumoto

Módulo 5 Codificação Sistemas Multimédia Ana Tomé José Vieira

Compressão de Imagens: Padrão JPEG

Compressão de Imagens em Movimento

Organização e Arquitetura de Computadores I

Universidade Federal do Rio Grande do Sul Instituto de Informática

SSC510 Arquitetura de Computadores 1ª AULA

AVALIAÇÃO DA ESTIMATIVA DE PARÂMETROS PARA MODELOS AR2D APLICADOS NA EXTRAÇÃO DE ATRIBUTOS DE TEXTURA EM IMAGENS DE SENSORIAMENTO REMOTO

p TPP = (6.1) e a rajada de perda de pacote é medida pela Comprimento Médio da Rajada (CMR ) que é dada por

Princípios de Telecomunicações. PRT60806 Aula 19: Modulação por Código de Pulso (PCM) Professor: Bruno Fontana da silva 2014

6 Estudos de Casos Porta Lógica OU de 4 Entradas

Introdução a Sistemas Digitais

Classificação e Pesquisa de Dados. Aula 27 Compressão de Dados Multimídia: Compressão de Imagens

VALIDAÇÃO DE UMA ARQUITETURA PARA COMPENSAÇÃO DE MOVIMENTO SEGUNDO O PADRÃO H.264/AVC

Processador: Conceitos Básicos e Componentes

Formatos de Áudio e Vídeo Digital Introdução ao Vídeo

Compressão Sem Perdas: Codificações Huffman e Aritmética. Adelar da Silva Queiróz Marcelo Teixeira Thiago da Silva Sodré

Métodos de Estimação de Movimento com Resolução em Subpixel no CODEC H264/AVC

3 Arquitetura Conceitual do Codec Open DVC

Projeto da Arquitetura de Hardware para Binarização e Modelagem de Contextos para o CABAC do Padrão de Compressão de Vídeo H.

Computação Gráfica. Prof. MSc André Y. Kusumoto

Dispositivos de Lógica Programável

Projeto e Implementação do Decodificador PBIW em Hardware. Felipe de Oliveira de Araújo Felipe Yonehara

Universidade de Pernambuco Escola Politécnica de Pernambuco

Processamento digital de imagens

COMPRESSÃO E CODIFICAÇÃO SEM PERDAS. Mauro Nogueira Mônica Festa Paulo Antiquera

Descritores de Imagens

MODELAGEM DE TRANSISTORES E DE CIRCUITOS ANALÓGICOS CMOS USANDO VERILOG-AMS

X Y Z A B C D

AVALIAÇÃO DE CONVERSORES BOOST OPERANDO EM PARALELO EMPREGANDO A TÉCNICA INTERLEAVED E CONTROLADOS DIGITALMENTE

Métodos para compressão de imagens em satélites de sensoriamento remoto

Arquitetura de Computadores. Conjunto de Instruções

COMUNICAÇÃO DIGITAL INTRODUÇÃO À TEORIA DE INFORMAÇÃO

Introdução ao módulo LabVIEW FPGA

Organização e Arquitetura de Computadores I

Utilizando API de Codificação MPEG-4 4 Visual. Bruno Lima Wanderley

SSC0611 Arquitetura de Computadores

UM MÉTODO PARA COMPARAÇÃO ENTRE HARDWARE E SOFTWARE DAS FUNÇÕES CRC-16 E FDCT SCHNEIDER, R. F. ¹, RAMOS, F. L. L.¹

Universidade Federal de Pernambuco

VHDL Circuitos Combinacionais

Acadêmicos: Cassiano Cesar Casagrande Claudir Galesky Junior Rafael Voltolini

Transcrição:

Codificador de Entropia Segundo o Perfil Baseline do padrão H.264/AVC de Compressão de Vídeo João A. Vortmann 1, Thaísa L. Silva 2, Fabiane K. Rediess 1, José L. Güntzel 1,2, Sérgio Bampi 2, Luciano V. Agostini 1,2 1 Grupo de Arquiteturas e Circuitos Integrados (GACI) Universidade Federal de Pelotas (UFPel) Caixa Postal 354 CEP 96010-900 Pelotas/RS Brasil 2 Grupo de Microeletrônica (GME) Universidade Federal do Rio Grande do Sul (UFRGS) {jvortmann_ifm, thleal, frediess_ifm, guntzel, agostini}@ufpel.edu.br, {bampi, agostini, guntzel}@inf.ufrgs.br Abstract. This paper presents the design of a hardware architecture for the Entropy Encoder of H.264/AVC video compression standard according to the Baseline Profile. This paper presents the architectural design of Exp-Golomb and CAVLC encoders, which were described in VHDL and synthesized to a Xilinx FPGA. From synthesis it was possible to verify that both designs present interesting results: 10.2 and 117.62 million samples per second for the throughputs, respectively. The entropy encoder is currently being designed through the integration of these two main blocks and preliminary results indicate that the obtained solution will be able to process HDTV frames in real time. Resumo. Este artigo apresenta o desenvolvimento de uma arquitetura de hardware para o Codificador de Entropia no perfil Baseline do padrão H.264/AVC de compressão de vídeo. São apresentados os projetos dos codificadores Exp-Golomb e CAVLC., os quais foram descritos em VHDL e sintetizados para um FPGA Xilinx. A partir da síntese foi possível verificar que ambos apresentam resultados interessantes, atingindo throughput de 10.2 e 117,62 milhões de amostras por segundo, respectivamente. O codificador de entropia está sendo desenvolvido através da integração destes blocos e estimativas indicam que esta solução será capaz de processar quadros HDTV em tempo real. 1. Introdução O padrão H.264/AVC é o mais novo padrão de compressão de vídeo [ITU 2005]. Este padrão tem por objetivo dobrar a taxa de compressão em relação aos padrões anteriores. Tal objetivo é obtido através de um considerável incremento na complexidade computacional nas operações do codificador. Devido a esta alta complexidade, codificadores implementados em software e rodando em processadores fabricados em tecnologia estado-da-arte não são capazes de atingir desempenho suficiente quando se necessita alta resolução e/ou tempo real. Nesse caso uma implementação em hardware do codificador se faz necessária. Este trabalho apresenta um projeto arquitetural do bloco de codificação de entropia para o padrão H.264/AVC de compressão de vídeo. Esta solução está de acordo com o Perfil Baseline [ITU 2005] do padrão. O codificador de entropia é composto por dois blocos principais: o codificador Exp-Golomb (Exponencial Golomb) e o codificador de tamanho variável adaptativo ao contexto (CAVLC - Context Adaptative Variable Length Coder). Ambos os blocos foram descritos em VHDL, mapeados para um FPGA da Xilinx [XILINX 2006] e

validados por meio de simulações. Atualmente a integração de tais blocos está sendo finalizada. 2. Codificador de Entropia Segundo o Perfil Baseline O padrão H.264/AVC é dividido em diferentes perfis. Cada perfil suporta uma gama particular de ferramentas de codificação. A primeira versão do padrão H.264/AVC, aprovada em 2003, define três diferentes perfis: Baseline (adotado nesse trabalho), Main e Extended. O perfil Baseline é direcionado a aplicações como vídeo-telefonia, videoconferência e vídeo sem fio. Tal perfil suporta codificação intra e inter quadro (usando somente slices tipo I e P) e uma codificação de entropia com códigos de comprimento de palavra variável adaptativos ao contexto (CAVLC) [Richardson 2003]. O codificador de entropia utiliza duas ferramentas principais para atingir uma alta taxa de compressão: a codificação Exp-Golomb e a codificação CAVLC [Richardson 2003], como apresentado na Figura 1. A codificação de entropia no padrão H.264/AVC é organizada como segue [Richardson 2003]: em níveis hierárquicos superiores (quadros, etc.); os elementos sintáticos são codificados usando códigos binários de tamanho fixo ou de tamanho variável. A partir do nível de slices ou abaixo (macroblocos, blocos, etc.); os elementos sintáticos são codificados usando códigos de tamanho variável (VLC) [Salomon 2000]. A informação residual (coeficientes quantizados) é codificada usando CAVLC [Richardson 2003], enquanto que para as outras unidades é usado a codificação Exp-Golomb [Salomon 2000]. Figura 1. Diagrama de blocos do codificador de entropia segundo o perfil baseline 2.1 Codificação Exp-Golomb Os códigos Exp-Golomb possuem tamanho variável e uma construção regular. Um número inteiro e positivo N é codificado usando a estrutura presente em (1) [Richardson 2003]: [ M zeros ] [ 1 ] [ INFO ] Código = (1) Na equação (1), M representa o número de zeros que precede o primeiro bit de valor '1' no código. O valor de M é dado pela equação (2): M = log 2 ( CodeNum + 1) (2) Na equação (2) CodeNum indica o número do código a ser codificado. Códigos com uma alta probabilidade de ocorrência possuem um CodeNum menor e, conseqüentemente, uma palavra de código menor. INFO na equação (1) possui M bits de comprimento e contém a informação codificada. O valor de INFO provém da equação (3). INFO M = CodeNum + 1 2 (3) O primeiro código Exp-Golomb não possui os campos M e INFO, sendo representado apenas pelo valor '1'. O padrão H.264/AVC define que, para cada elemento sintático k a ser codificado, há uma regra que mapeia o valor de k para um valor inteiro, não negativo, seu CodeNum. Existem quatro possibilidades de mapeamento, dependendo do tipo de elemento a ser codificado: ue(v), se(v), me(v) e te(v) [ITU 2005].

2.2 Codificação CAVLC A codificação CAVLC é usada para codificar os resíduos provenientes do bloco de quantização [Richardson 2003]. Tais valores devem ser previamente ordenados em ziguezague [Richardson 2003]. A codificação CAVLC produz códigos de tamanho variável dependentes do contexto, ou seja, dependem do estágio do algoritmo de codificação e dos valores já codificados. A codificação CAVLC foi projetada para explorar determinadas características dos blocos quantizados a fim de obter uma melhor codificação. O bloco de coeficientes quantizados apresenta, geralmente, uma distribuição esparsa. Logo, a codificação CAVLC utiliza RLE (Run Length Encoding) [Salomon 2000] para representar seqüências de zeros de forma compacta. Os coeficientes não zero de mais alta ordem, após o mapeamento em ziguezague, são comumente seqüências de ±1. Assim, a codificação CAVLC representa os sinais destes coeficientes (Trailing Ones) de forma reduzida. A quantidade de coeficientes não zero presente em blocos vizinhos é relacionada. Os valores dos coeficientes são codificados utilizando diferentes tabelas cuja escolha ocorre em função da quantidade de coeficientes não zero dos blocos vizinhos. A magnitude dos coeficientes não zeros tende a ser maior para os coeficientes de mais baixa ordem e menor para os de mais alta ordem. Assim, a codificação CAVLC tira vantagem desta característica adaptando a escolha das tabelas VLC a serem usadas considerando a magnitude dos coeficientes recentemente codificados. A codificação CAVLC pode ser dividida nas seguintes operações: codificação da quantidade de coeficientes não zero (TotalCoeff) e Trailing Ones, codificação dos sinais de cada Trailing One, codificação dos níveis, magnitudes dos coeficientes não zero restantes (coeficientes não zero excetuando Trailing Ones), codificação do total de zeros anteriores ao coeficiente não zero de mais alta ordem, codificação do total de zeros anteriores a cada coeficiente (RunBefore). 3. Arquitetura para o Codificador Exp-Golomb A arquitetura para o codificador Exp-Golomb foi projetada através da implementação de uma máquina de estados finitos conectada a duas memórias ROM, como apresentado na Figura 2. Tal máquina de estados gera o código de saída (output) a partir do elemento sintático (sint. elem) e do modo de mapeamento selecionado (mode): ue(v), se(v), me(v) e te(v). Figura 2. Diagrama de blocos do codificador Exp-Golomb Quando o modo selecionado é ue(v), se(v) ou te(v), a saída é gerada a partir dos CodeNums calculados. Quando do modo me(v) a saída provém do acesso à memória. O sinal val_out indica quando um determinado valor na saída é válido. A máquina de estados apresentada na Figura 2 é detalhada na Figura 3. Seu funcionamento ocorre da seguinte forma: durante o estado 0, a partir do modo de mapeamento, o valor de CodeNum é calculado, o qual contém um código binário correspondente.

Figura 3. Máquina de estados finitos do codificador Exp-Golomb O modo ue(v) é usado para mapear números inteiros sem sinal, o modo se(v) números inteiros com sinal, o modo me(v) para padrões de predição e o modo te(v) quando os elementos sintáticos foram truncados. Durante o estado 1 é calculado o valor de M, ou seja, a quantidade de bits '0' precedendo o primeiro bit '1'. Seu valor é acumulado em AC. No estado 2 o valor INFO é calculado, partindo do valor de CodeNum e do valor acumulado em AC. Enquanto AC 0, seu valor é decrementado e uma variável auxiliar k (inicializada com o valor 1) é deslocada à esquerda. Logo, a variável k corresponde ao valor 2 M, presente na expressão (3). Quando AC atinge o valor zero, INFO pode ser calculado como em (3) utilizando para tal o valor de k. Após o cálculo de INFO a máquina segue para o estado 3. Nesse estado ocorre a geração do código binário de saída, considerando os valores de M e de INFO. O código é gerado bit a bit seguindo a estrutura apresentada na expressão (1). 4. Arquitetura para o Codificador CAVLC A arquitetura para o codificador CAVLC foi projetada através de oito blocos principais e cinco memórias ROM, como mostra a Figura 4. Os blocos são NC, Calc_Info, PreMont_TCoeff_T1s, Levels, TotalZeros, RunBefore_ZerosLeft, Montador e Controle, como apresentado na Figura 4. Tal arquitetura foi projeta usando pipeline de três estágios para aumentar seu desempenho. As memórias ROM armazenam os valores de código ideais, indicados no padrão, e seu respectivo tamanho. Figura 4. Diagrama de blocos do codificador CAVLC O bloco ZigZag, apresentado na Figura 4, foi também implementado. Este bloco não faz parte do codificador CAVLC, mas é fundamental para seu funcionamento. Tal bloco é responsável pela ordenação em ziguezague dos resultados do processo de quantização que

servem como entrada para o codificador CAVLC. O bloco NC é responsável pelo cálculo do parâmetro nc para cada bloco. O parâmetro nc é calculado a partir da quantidade de coeficientes dos blocos acima e à esquerda do bloco que está sendo codificado e é usado para a decisão das tabelas de codificação. O bloco Calc_Info é responsável pela geração dos principais valores envolvidos no processo de codificação, além de sinais informando quando cada um desses é valido e pode ser usado pelos outros blocos. O bloco PreMont_Tcoeff_T1s é responsável por concatenar os códigos para codificação da quantidade total de coeficientes e quantidade total de Trailing Ones com os sinais dos Trailing Ones. A saída do bloco é tal código concatenado e seu tamanho. Os coeficientes não zero e não Trailing Ones (níveis) são codificados pelo bloco Levels. A saída deste bloco é o código do nível atual e o tamanho deste código. O bloco TotalZeros possui três memórias ROM que são acessadas para codificação do total de zeros precedendo o coeficiente não zero de mais alta ordem. A saída deste bloco é o código resultante do acesso à uma das ROM e o tamanho de tal código em bits. O bloco RunBefore_ZerosLeft é responsável pela codificação dos RunBefores de cada coeficiente. Este bloco utiliza a quinta ROM, a qual é acessada de acordo com os sinais Run_Before e Zeros_Left, e tem por saída o código proveniente do acesso à ROM e seu tamanho em bits. O bloco Montador recebe como entrada a saída de todos os blocos descritos anteriormente exceto o bloco Calc_Info. Este bloco possui em sua entrada dois multiplexadores, os quais selecionam a palavra de código de saída de cada bloco e os tamanho de tal código, respectivamente. A saída desse bloco é constituída de palavras de código montadas pela concatenação de suas entradas além de um sinal ok_mont, indicando quando uma nova palavra é válida. O controle e sincronização de todos os outros blocos é realizado pelo bloco Controle, o qual implementa uma máquina de estados finitos. As amostras de entrada do codificador usam 9 bits e os valores de saída usam 32 bits. As saídas são amostradas de forma assíncrona e o sinal ok_mont indica quando tal valor é válido. Tal assincronismo é decorrente do processamento de palavras de código de tamanho variável as quais são inerentes a este processo de codificação. Assim, uma saída é formada pela união de várias palavras de código de tamanho variável. A latência é também dependente de tal assincronismo, sendo a latência mínima igual a 44 ciclos de relógio. 5. Resultados de Síntese A síntese do codificador Exp-Golomb e do codificador CAVLC tiveram como alvo o FPGA Virtex-II 2V8000 da Xilinx [XILINX 2006]. A ferramenta de síntese usada foi a ISE da Xilinx [XILINX 2006]. Os resultados de síntese são mostrados na Tabela 1. Tabela 1. Resultados de Síntese Arquiteturas LUTs Freqüência (MHz) Throughput (Mamostras/s) Codificador Exp-Golomb 341 122,76 10,2 Codificador CAVLC 3137 117,62 117,62 Codificador de Entropia* 3500 100 100 * Valores Estimados Dispositivo 2V8000 O atraso do caminho crítico do codificador Exp-Golomb foi estimado pela ferramenta de síntese como sendo igual a 8,15 ns. Tal atraso conduz a uma freqüência máxima de operação de 122,76 MHz, permitindo throughput de 10,2 milhões de amostras por segundo, no caso médio. Considerando o caso médio, a arquitetura proposta utiliza 12 ciclos para processar uma amostra. Em termos de recursos utilizados, a arquitetura utilizou 341 LUTs. Tais resultados

indicam que a arquitetura proposta para o codificador Exp-Golomb é capaz de atingir uma alta taxa de processamento, utilizando poucos recursos do FPGA alvo. A respeito da arquitetura para o codificador CAVLC, os resultados de síntese demonstraram que esta utilizou 3137 LUTs do FPGA alvo. Em termos de desempenho, foi estimado que o atraso do caminho crítico é de de 8,5 ns, correspondendo a uma freqüência máxima de operação de 117,62 MHz. Considerando que a arquitetura do codificador CAVLC é capaz de processar uma amostra por ciclo, tal arquitetura atinge throughput de 117,62 milhões de amostras por segundo. A integração do codificador Exp-Golomb e do codificador CAVLC está em andamento. O projeto do bloco de controle e a validação completa do bloco são tarefas ainda em desenvolvimento. Considerando que os codificadores Exp-Golomb e CAVLC operam em paralelo diferentes elementos sintáticos e considerando que o volume de informação residual, utilizada pelo codificador CAVLC, é muito maior que a informação restante, codificada pelo codificador Exp-Golomb, é possível estimar que o desempenho do codificador de entropia seja equivalente ao desempenho do codificador CAVLC. Esta estimativa considera que há duas freqüências de relógio sendo utilizadas. Logo, é possível estimar que o codificador de entropia completo atingirá throughput aproximado de 100 milhões de amostras por segundo. O uso de recursos foi estimado em 3500 LUTs. Estas estimativas indicam que o codificador de entropia é capaz de codificar vídeos HDTV (1920x1080 pixels) em tempo real. 6. Comparação com trabalhos relacionados Sendo o padrão H.264/AVC o estado da arte em compressão de vídeo, ainda são poucas as publicações nesta área. No entanto, foram encontrados na literatura especializada, um artigo relacionado ao codificador Exp-Golomb e três artigos relacionados ao codificador CAVLC. O trabalho relacionado ao codificador Exp-Golomb [Di; et. al 2003] foi descrito usando Verilog e sintetizado em standard cells em tecnologia 0,25 µm. A arquitetura projetada em tal trabalho obteve uma freqüência máxima de operação de 166,7 MHz. A taxa de processamento desta solução não foi apresentada. Assim, não é possível realizar uma análise completa do trabalho. A solução aqui apresentada executa a 122,8 MHz em um FPGA Virtex II. Esta freqüência de operação é menor do que aquela apresentada em [Di; et. al 2003], mas não é possível comparar a taxa de processamento. Em relação ao codificador CAVLC, o primeiro trabalho a ser comparado [Amer, Badawy and Jullien 2004] trata de uma arquitetura em pipeline. Esta arquitetura foi descrita em VHDL e sintetizada usando o software Symplify Pro. Tal arquitetura teve como alvo o dispositivo FPGA Virtex-II 2V8000 da Xilinx [XILINX 2006]. Da síntese obtiveram-se os seguintes resultados: freqüência máxima de operação de 31,9 MHz com uso de 84902 LUTs. Nesta solução, 16 amostras são processadas por ciclo de relógio, atingindo throughput de 510,4 milhões de amostras por segundo. O segundo trabalho relacionado ao codificador CAVLC [Sahin and Hamzaoglu 2005] apresenta uma arquitetura semelhante à apresentada aqui, mas utilizando um pipeline mais profundo. Esta solução utiliza aproximadamente 12 ciclos de relógio para processar uma amostra. Ela foi descrita em Verilog e sintetizada para o FPGA Virtex-II 2V8000 da Xilinx [XILINX 2006]. Os resultados obtidos nesta implementação demonstram que a arquitetura utiliza 3946 LUTs, é capaz de operar à 76 MHz e alcança throughput de 6,75 milhões de amostras por segundo. O terceiro trabalho relacionado à codificação CAVLC [Chien; et. al 2006] apresenta uma arquitetura paralela. Esta solução foi sintetizada para standard cells em tecnologia 0,18 µm e apresentou uma freqüência máxima de 125 MHz. Esta arquitetura utiliza 27 ciclos de relógio para processar um bloco 4x4 e processa menos de uma amostra por ciclo de relógio. Ela

apresenta throughput de 74,04 milhões de amostras por segundo. Dos resultados de tais trabalhos é possível perceber que a solução aqui proposta para o codificador CAVLC apresenta algumas características singulares. Comparando-se a solução apresentada com a desenvolvida por [Amer, Badawy and Jullien 2004] nota-se que a primeira possui throughput 4,3 vezes menor que a segunda, porém utilizando 27 vezes menos recursos de hardware. Comparando-se a solução desenvolvida neste trabalho com aquela apresentada em [Sahin and Hamzaoglu 2005], observa-se que a primeira apresenta throughput 17,4 vezes maior que a segunda, usando aproximadamente a metade dos recursos de hardware. Finalmente, comparando-se a implementação proposta neste trabalho com aquela apresentada em [Chien; et. al 2006], verifica-se que a primeira atinge o dobro do throughput obtido pela segunda. Em termos de uso de recursos a comparação não pôde ser feita uma vez que as tecnologias alvo são muito diferentes (FPGA e standard cells). Através de tais comparações é possível concluir que a arquitetura para o codificador CAVLC aqui projetada apresenta interessantes benefícios em relação às outras publicações. 7. Conclusão e trabalhos futuros Este trabalho apresentou o projeto de arquiteturas para o codificador de entropia segundo o perfil baseline do padrão H.264/AVC de compressão de vídeo. Tal codificador é composto por dois blocos principais: o codificador Exp-Golomb e o codificador CAVLC. Foram propostas arquiteturas para ambos os blocos, as quais foram descritas em VHDL e sintetizadas para o FPGA Virtex-II da Xilinx. Os resultados de síntese indicaram que o codificador Exp-Golomb teve uma utilização de 341 LUTs, sendo capaz de operar a uma freqüência máxima de operação de 122,76 MHz e atingindo throughput médio de 10,2 milhões de amostras por segundo. A arquitetura para o codificador CAVLC utilizou 3137 LUTs atingindo uma freqüência máxima de operação de 117,62 MHz. Como esta é capaz de processar uma amostra por ciclo de relógio, o throughput atingido é de 117,62 milhões de amostras por segundo. Das comparações entre tais resultados e resultados de trabalhos relacionados pôde-se notar que o projeto de ambas as arquiteturas resultaram em características interessantes. A integração do codificador Exp-Golomb e do codificador CAVLC está em andamento, mas algumas estimativas já podem ser geradas baseadas em resultados preliminares. Estas estimativas indicam que o codificador de entropia completo utilizará aproximadamente 3500 LUTs, atingindo throughput de 100 milhões de amostras por segundo. Tal throughput é suficiente para processar vídeos HDTV (1920x1080) em tempo real. Como trabalhos futuros, pretende-se finalizar a integração de ambos codificadores e, assim, obter um codificador de entropia completo para o perfil baseline do padrão H.264/AVC de compressão de vídeo. 8. Referências Amer, I., Badawy, W., and Jullien, G. (2004) Towards MPEG-4 Part 10 System on Chip: a VLSI Prototype for Context Based Adaptive Variable Length Coding (CAVLC), In: IEEE Workshop on Signal Processing Systems, pp. 275-279. Chien, C., Lu, K., Shih, Y., and Guo, J. (2006) A High Performance CAVLC Encoder Design for MPEG-4 AVC/H.264 Video Coding Applications, In: International Symposium on Circuits and Systems - ISCAS, pp. 3838-3841. Di, W., Wen, G., Mingzeng, H., and Zhenzhou, J. (2003) An Exp-Golomb Encoder and Decoder Architecture for JVT/AVS, IEEE Transactions on Circuits and Systems for Video Technology, vol. 2, no. 21-24, pp. 910-913.

ITU - INTERNATIONAL TELECOMMUNICATION UNION. ITU-T Recommendation H.264 (03/05) (2005): Advanced Video Coding for Generic Audiovisual Services. Richardson, I. (2003), H.264 and MPEG-4 Video Compression Video Coding for Next- Generation Multimedia, Chichester: John Wiley and Sons. Sahin, E., and Hamzaoglu, I. (2005) A High Performance and Low Power Hardware Architecture for H.264 CAVLC Algorithm, In: 13th European Signal Processing Conference, Antalya, Turkey. Salomon, D. (2000), Data Compression: The Complete Reference, 2. ed. New York: Springer. XILINX INC. Virtex-II Pro and Virtex-II Pro X Platform FPGAs: Complete Data Sheet. (2006). Disponível em: <www.xilinx.com>. Acesso em: mar. 2006.