"SynMaker : Uma Ferramenta de Síntese de Alto
Nível para Processamento Digital de Imagem"
Por
Luis Carlos da Silva Júnior
Dissertação de Mestrado
Universidade Federal de Pernambuco [email protected] www.cin.ufpe.br/~posgraduacao
CENTRO DE INFORMÁTICA
PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
LUIS CARLOS DA SILVA JÚNIOR
"SynMaker: Uma Ferramenta de Síntese de Alto Nível Para
Processamento Digital de Imagem"
ESTE TRABALHO FOI APRESENTADO À PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO DO CENTRO DE INFORMÁTICA DA UNIVERSIDADE FEDERAL DE PERNAMBUCO COMO REQUISITO PARCIAL PARA OBTENÇÃO DO GRAU DE MESTRE EM CIÊNCIA DA COMPUTAÇÃO.
ORIENTADOR: Prof. Dr. Cristiano Coêlho de Araújo
Catalogação na fonte
Bibliotecária Jane Souto Maior, CRB4-571
Silva Júnior, Luis Carlos da
SynMaker: uma ferramenta de síntese de alto nível para processamento digital de imagem / Luis Carlos da Silva Júnior. - Recife: O Autor, 2013.
xi, 94 f., il., fig., tab.
Orientador: Cristiano Coêlho de Araújo.
Dissertação (mestrado) - Universidade Federal de Pernambuco. CIn, Ciência da Computação, 2013.
Inclui referências e anexo.
1. Engenharia da computação. 2. Síntese de alto nível. 3. Processamento de imagem. 4. FPGA. I. Araújo, Cristiano Coêlho de (orientador). II. Título.
Federal de Pernambuco, sob o título “SynMaker: Uma Ferramenta de Síntese de Alto Nível para Aplicações de Processamento Digital de Imagem em FPGA” orientada pelo Prof. Cristiano Coêlho de Araújo e aprovada pela Banca Examinadora formada pelos professores:
______________________________________________ Prof. Abel Guilhermino da Silva Filho
Centro de Informática / UFPE
______________________________________________ Prof. João Marcelo Natario Teixeira
Departamento de Estatística e Informática / UFRPE
_______________________________________________ Prof. Cristiano Coêlho de Araújo
Centro de Informática / UFPE
Visto e permitida a impressão. Recife, 13 de setembro de 2013
___________________________________________________
Profa. Edna Natividade da Silva Barros
Coordenadora da Pós-Graduação em Ciência da Computação do Centro de Informática da Universidade Federal de Pernambuco.
Dedico este trabalho, especialmente ao meu pai,a minha mãe, a toda minha família e aos meus amigos por todo carinho, compreensão, incentivo.
AGRADECIMENTOS
Gostaria de registrar meus sinceros agradecimentos às pessoas que contribuíram direta ou indiretamente, para realização desse trabalho.
Ao meu Orientador Professor Cristiano Coêlho Araújo por toda paciência, disponibilidade, dedicação ao desenvolvimento da pesquisa e comentários coerentes.
Aos professores Tsang Ing Ren, Edna Barros, Ricardo Massa, Paulo Maciel e pelos conhecimentos repassados, especial a Abel Guilhermino e João Marcelo Natario que apesar de tudo, concordaram em participar da Banca Examinadora e tiveram muita paciência, atenção e compreenção , meus sinceros muito obrigado.
Aos meus Pais (Luis Carlos da Silva e Maria Cristina Ferreira) e Familiares pelo apoio em toda minha trajetória.
A todos meus amigos e amigas que me apoiaram nos momentos mais difíceis.
Aos meus amigos do grupo de estudo Paulo Guedes, Zílcio Sales, Marília Lima e Wilson Gondim que me ajudaram na pesquisa e desenvolvimento deste trabalho.
Ao CIn e seus funcionários por me proporcionarem um ambiente agradável para que eu pudesse desenvolver este trabalho, em especial a Maria Lilia que desempenhou um papel primordial para que eu pudesse apresentar essa dissertação.
A Deus por todos os dias da minha vida, pela saúde, paz, amor, família e tudo mais que Ele me proporcionou.
“Ninguém abre um livro sem que se aprenda alguma coisa” (Anônimo)
RESUMO
Nesta dissertação de mestrado é introduzida uma nova ferramenta de síntese de alto nível chamada SynMaker que recebe como entrada um código de alto nível Orientado a Objetos escrito em Java ou SystemVerilog e gera código RTL que pode ser sintetizado para uma placa de prototipação alvo. A geração de código RTL leva em conta características do código orientado a objetos tais como classes, abstração, encapsulamento e algumas restrições relativas a polimorfismo, herança, utilização de construtores dentre outras especificadas neste trabalho e, por fim, integra o resultado com uma plataforma FPGA que inclui uma câmera e um display para exibir os resultados. O fluxo de projeto implementado no SynMaker foi especialmente concebido para aplicações de processamento de imagem e vídeo. Uma vantagem desta abordagem é que ela abstrai completamente o fluxo da ferramenta Quartus II, o designer descreve a aplicação de processamento de imagem em uma linguagem de alto nível de orientação a objeto, utilizando uma biblioteca de componentes da plataforma e gera código para a Plataforma de Desenvolvimento Terasic DE2-70. Esta plataforma de desenvolvimento inclui uma câmera digital e display, sendo uma plataforma ideal para a prototipagem de aplicações de filtros de processamento de imagem e vídeo. Em seu estado atual o SynMaker pode executar uma síntese de alto nível de uma forma simplificada, realizando um mapeamento direto de uma AST (Abstract Syntax Tree) para código RTL. Os resultados experimentais para a síntese de filtros de processamento de imagem são apresentados e demonstram a eficácia do funcionamento da ferramenta de síntese proposta.
Palavras-chave: Síntese de alto nível - Field Programmable Gate Array (FPGA) -
ABSTRACT
This dissertation introduces a new tool for high level synthesis called SynMaker that receives as input a high level code written in Object Oriented Java or SystemVerilog and generates RTL code that can be synthesized for a target board prototyping. The RTL code generation takes into account the characteristics of object-oriented code such as classes, abstraction, encapsulation and some restrictions concerning polymorphism, inheritance, use of constructors among others specified in this work and, finally, integrates the result with a platform FPGA that includes a camera and a display for displaying the results. The design flow implemented in SynMaker is specially designed for applications in image processing and video. One advantage of this approach is that it completely abstracts the flow of the Quartus II tool, the designer describes the application of image processing in a high-level language for object orientation, using a library of platform components and generates code for the Platform development Terasic DE2-70. This development platform includes a digital camera and display, is an ideal platform for prototyping applications of image processing filters and video. In its current state the SynMaker can perform a high-level synthesis in a simplified form, performing a direct mapping of an AST (Abstract Syntax Tree) to RTL code. The experimental results for the synthesis of the image processing filters are shown, and demonstrate the effectiveness of operation of the proposed synthesis tool.
Keywords: High-level synthesis (HLS) - Field Programmable Gate Array (FPGA) -
LISTA DE FIGURAS
Figura 1. Convenção dos eixos para representação de imagens digitais [24]. ... 15
Figura 2. Passos fundamentais em processamento de imagens digitais [24]. ... 17
Figura 3. O Universo dos ASICs. ... 19
Figura 4. Seqüência de projeto ASICs. ... 19
Figura 5. Representação dos elementos básicos de um FPGA. ... 22
Figura 6. Arquitetura interna de circuitos programáveis FPGA. ... 22
Figura 7. Processo de projeto de circuitos. ... 25
Figura 8. Diagrama-Y segundo GAJSKI [22]. ... 26
Figura 9. Processo de síntese no diagrama-Y. ... 28
Figura 10. Metodologia manual de design de sistema... 29
Figura 11. Fluxo de projeto RTL. ... 31
Figura 12. Desafios do projeto para 65nm e abaixo. ... 32
Figura 13. Fluxo de síntese de alto nível. ... 33
Figura 14. Curva de aprendizagem. ... 34
Figura 15. Um benefício da automação: exploração. ... 34
Figura 16. Entrada e saída do JavaCC. ... 36
Figura 17. Compilando o parser gerado pelo JavaCC e usando-o para obter a AST. .... 36
Figura 18. Metodologia de projeto de hardware SystemC. ... 42
Figura 19. Fluxo básico do Impulse C. ... 45
Figura 20. Visão global do funcionamento ... 48
Figura 21. Visão RTL de parte do projeto base utilizado pelo SynMaker. (a) Projeto base padrão. (b) Projeto Base alterado pelo SynMaker após a síntese. ... 49
Figura 22. Fluxograma de síntese do SynMaker. ... 51
Figura 23. Fluxo de pré-compilação do SynMaker ... 53
Figura 24. Tela de Simulação. (a) Vídeo de entrada. (b) Vídeo de saída. ... 54
Figura 25. Fluxo de otimização. ... 55
Figura 26. Exemplo de código SystemVerilog gerado pela síntese. ... 56
Figura 27. Metodologia de síntese do SynMaker para classe, função e sua respectiva interface RTL. ... 57
Figura 28. Visão geral da metodologia de síntese de alto nível do SynMaker. ... 58
Figura 29. Seqüência de comandos executados pelo Quartus. ... 59
Figura 30. Arquitetura SynMaker. ... 61
Figura 31. Placa de desenvolvimento Altera D2-70. ... 64
Figura 32. Estrutura de componentes e comunicação da placa D2-70. ... 64
Figura 33. Placa TRDB-D5M. ... 65
Figura 34. Placa TRDB-LTH. ... 65
Figura 35. Dispositivo FPGA EP2C70F896C6. ... 66
Figura 36. Estrutura interna do FPGA EP2C70F896C6... 67
Figura 37. Altera DE2-70 Digital Camera Development Platform. (a) Projeto Base. (b) Projeto base alterado pelo SynMaker com o filtro de sobel. ... 69
LISTA DE TABELAS
Tabela 1. Lista de fabricantes e seus blocos lógicos. ... 21
Tabela 2. Fabricantes e ferramentas CAE. ... 24
Tabela 3. Domínios de descrição x níveis de abstração e seus componentes. ... 27
Tabela 4. Comparação entre ferramentas de síntese... 46
Tabela 5. Testes de validação realizados ... 68 Tabela 6. Resultado da síntese do SynMaker para filtros de processamento de imagem . 69
SUMÁRIO
1 INTRODUÇÃO ... 13
2 DISCUSSÃO TEÓRICA ... 15
2.1 PROCESSAMENTODIGITALDEIMAGEM ... 15
2.1.1. Imagem digital ... 15
2.1.2. Passos fundamentais utilizados no processamento de imagens ... 16
2.2 SISTEMASDIGITAIS ... 17
2.2.1. Circuitos lógicos programáveis em campo ... 20
2.3 FPGA ... 21
2.3.1. Elementos básicos de um FPGA ... 21
2.3.2. Estrutura interna ... 22
2.3.3. Aplicações com FPGA ... 23
2.3.4. Ferramentas CAE de síntese ... 24
2.4 SÍNTESENOCONTEXTODEPROJETODECIRCUITOS ... 25
2.4.1. Fluxo de projeto de circuitos digitais ... 25
2.4.2. Domínios de representação ... 26
2.4.3. Níveis de abstração ... 27
2.5 METODOLOGIAMANUALDEPROJETODECIRCUITO ... 28
2.6 SÍNTESEDEALTONÍVEL ... 30
2.7 JAVAPARSER ... 35
2.7.1. JAVACC ... 35
2.8 REPRESENTAÇÃOINTERMEDIÁRIAEEXTRAÇÃODEINFORMAÇÃO (DIAGRAMA) ... 36
2.8.1. Árvore sintática abstrata (AST) ... 37
2.8.2. Análise léxica e sintática ... 37
2.8.3. Análise de fluxo de controle ... 38
2.8.1. Análise de fluxo de dados ... 38
2.8.2. Grafo de fluxo de controle e dados ... 39
3 REVISÃO DA LITERATURA ... 40
3.1 TRABALHOSRELACIONADOS ... 40
3.2 FERRAMENTASDESÍNTESEDEALTONÍVEL ... 40
3.2.1. Systemc ... 41
3.2.2. Catapult C ... 43
3.2.3. Impulse C ... 44
3.2.4. Análise comparativa ... 45
4 FERRAMENTA DE SÍNTESE: SYNMAKER ... 47
4.1 ARQUITETURAALVODOSYNMAKER ... 48
4.2 FLUXOEMODELAGEMDOSISTEMA ... 49
4.2.1. Descrição comportamental ... 51
4.2.2. Processador de comandos de síntese ... 52
4.2.1. Pré-compilador HLS ... 53
4.2.2. Simulação ... 53
4.2.3. Compilador HLS ... 54
4.2.4. Síntese de alto nível ... 55
4.2.6. Plataforma FPGA ... 59
4.3 ARQUITETURADOSYNMAKER ... 60
5 EXPERIMENTOS E TESTES DE VALIDAÇÃO ... 62
5.1 AMBIENTE ... 62
5.1.1. Requisitos e instalação ... 62
5.1.2. Terasic DE2-70 ... 63
5.1.3. O FPGA EP2C70: Circuito lógico reconfigurável ... 66
5.2 EXECUÇÃO ... 67 5.3 ANÁLISEEINTERPRETAÇÃO ... 69 6 CONSIDERAÇÕES FINAIS ... 71 6.1 CONTRIBUIÇÕES ... 71 6.2 TRABALHOSFUTUROS ... 71 REFERÊNCIAS ... 72 7 ANEXO ... 76
13
1 INTRODUÇÃO
A necessidade de projetar cada vez mais rapidamente circuitos digitais fez a Síntese de Alto Nível ou High Level Synthesis (HLS) parecer ser uma alternativa interessante, quando comparado ao design RTL. O uso de HLS permite a síntese de algoritmos para arquiteturas e apesar de tais ferramentas serem desenvolvidas visando tecnologias ASIC, HLS atualmente atrai um grande interesse para os projetistas de FPGA. Em trabalhos como [13] e [16] experimentos mostram que a solução HLS pode conseguir uma boa redução no uso de recursos de FPGAs com uma produtividade de design melhorada em relação ao projeto RTL codificado manualmente. Historicamente, aplicações que foram implementadas em código RTL escrito à mão para um FPGA normalmente fornecem uma boa qualidade nos resultados (em termos de desempenho e eficiência), mas baixa produtividade. Desta forma, ferramentas de síntese de alto nível com alvos em FPGAs buscam oferecer o melhor de dois mundos: a boa qualidade dos resultados com elevados níveis de produtividade.
Para algumas aplicações, especialmente aquelas que necessitam de execução em tempo real, a velocidade é um requisito fundamental. Conforme [31], essas aplicações possuem requisitos específicos, tais como processamento de grande volume de dados e curtos intervalos de tempo para processar. Um exemplo deste tipo de aplicação é o processamento digital de imagem e vídeo. Além disso, o uso de processamento de imagem possui grande aplicação em estudos de robótica, automóvel, sistemas vídeo-monitorados e técnicas OCR (Optical Character Recognition) para reconhecimento de caracteres da imagem, em dispositivos como scanners.
Esse tipo de implementação em plataformas reconfiguráveis baseadas em dispositivos FPGA tem uma participação cada vez maior nas pesquisas acadêmicas em relação a outras tecnologias já consagradas, tais como a computação paralela, DSP (Digital Signal Processor) ou ASIC (Application Specific Integrated Circuit). A justificativa do uso de FPGAs deve-se a flexibilidade de adaptação e configuração, juntamente com o alto desempenho e seu baixo custo de aquisição.
Durante o estudo para este trabalho de mestrado foi identificado que existe uma demanda de aplicações de processamento de imagem e vídeo em tempo real. Outro aspecto importante que foi levantado em consideração, é que existe um espaço importante para a implementação destas aplicações utilizando-se a tecnologia de FPGA. Porém o esforço de projeto para a implementação em FPGA ainda é um obstáculo para a sua adoção. Desta forma, existe uma motivação para se desenvolver uma ferramenta de síntese de alto nível para aplicações de processamento de imagem em arquitetura FPGA. A utilização de uma ferramenta como esta, visa reduzir o time-to-market de inserção do produto no mercado, facilidade e maior flexibilidade do designer no desenvolvimento de projetos desse tipo para FPGA, já que com a ferramenta o designer se aproveitará da facilidade de implementação dos algoritmos em uma linguagem de alto nível, tal como Java.
O Java constitui umas das linguagens mais utilizadas no mercado, contendo uma grande quantidade de desenvolvedores e documentação de fácil acesso, além de ser uma linguagem de fácil aprendizagem, manuseio e que contém orientação a objetos bem estruturada, com todos os conceitos desse paradigma incorporados. A placa DE2-70 tem constantemente se mantida na frente das demais placas educacionais se diferenciando por sua abundância de interfaces para acomodar varias aplicações, especificamente para
14 aplicações de processamento digital de imagem esta placa FPGA faz parte da Altera
Digital Camera Development Platform, que proporciona ao desenvolvedor acesso e
fácil manipulação a dados e alta qualidade de imagens. Devido a isso o Java foi escolhido como a linguagem de entrada para ferramenta de síntese e a plataforma para exibição do resultado final.
Existem muitas ferramentas HLS, mas nenhuma delas é capaz de fazer síntese de alto nível de um programa Java ou SystemVerilog com nicho em aplicação de processamento de imagem digital para trabalhar em uma placa Terasic DE2-70 com uma plataforma de Desenvolvimento de Câmera Digital.
Como pode ser visto, por um lado, há uma falta de metodologia e ferramentas para programadores de software mais familiarizados com o Java para projetar para uma plataforma de hardware. Por outro lado, os designers de SystemVerilog são obrigados a trabalhar no nível RTL para a síntese, aumentando o seu esforço de projeto, tempo e erros.
Sendo assim, neste trabalho é apresentada uma ferramenta que recebe como entrada um código de processamento de imagem orientado a objeto, e o mesmo é sintetizado até seu funcionamento na plataforma de vídeo e câmera da placa DE2-70 da Altera. Esta ferramenta, chamada SynMaker, é capaz de sintetizar algoritmos de processamento de imagem desenvolvidos em Java ou SystemVerilog, gerando uma descrição de hardware que pode ser automaticamente programada na plataforma de desenvolvimento de Câmera Digital da Altera. Como resultado, é aumentada a produtividade dos usuários de FPGA atuais, que desejam fazer aplicações específicas de processamento de imagens aplicadas em plataforma FPGA ou apenas gerar descrição RTL que pode ser utilizada em outro projeto que o designer desejar.
A contribuição deste trabalho é uma nova ferramenta projetada para realizar a síntese de alto nível aplicada a algoritmos baseados em FPGA para processamento digital de imagens utilizando como entrada código Java ou SystemVerilog com algumas restrições sobre o uso da linguagem, como o uso de a polimorfismo, herança e utilização de construtores. Além disso, esta ferramenta contém um novo parser SystemVerilog e uma nova representação intermediária chamada Generic Abstract Sintax Tree ( GAST) para unificar diferentes árvores de sintaxe abstratas geradas por diferentes parsers.
Esta dissertação descreve o projeto e desenvolvimento de uma ferramenta para realização de síntese de alto nível. Ao final do projeto, a ferramenta deverá ser capaz de receber uma descrição do comportamento do sistema em diferentes linguagens de descrição (Java e SystemVerilog), realizar algumas otimizações, gerar como saída um conjunto de arquivos e um projeto do sistema descrito em uma linguagem de descrição de hardware. Este conjunto de saída poderá então ser processado por uma ferramenta de prototipação rápida, para compilação e síntese em uma determinada plataforma-alvo. Em particular, no escopo desta dissertação deverá ser possível sintetizar, realizar síntese RTL de sistemas para a plataforma Terasic DE2-70 [38].
O resto da dissertação está organizado nos seguintes capítulos. O capítulo de discussão teórica envolve todo conhecimento necessário que o usuário precisa ter sobre o tema que consiste desde o básico sobre o FPGA até síntese de alto nível. O capítulo de revisão da literatura discute os trabalhos relacionados à síntese de alto nível em FPGA e algumas ferramentas que estão presentes em trabalhos acadêmicos ou no mercado. O capítulo SynMaker apresenta a ferramenta desenvolvida. O capítulo Experimentos apresenta como foram executados os experimentos e a análise dos resultados da síntese, e por fim, o capítulo de considerações finais demonstra uma conclusão de tudo que foi desenvolvido e aprendido com o trabalho e o que poderá ser feito no futuro.
15
2 DISCUSSÃO TEÓRICA
Neste Capítulo serão abordados os conceitos de processamento digital de imagem, sistemas digitais, FPGA, além de uma descrição de sistema de síntese para circuitos, ferramentas CAE para síntese e uma introdução a síntese de alto nível.
2.1 PROCESSAMENTO DIGITAL DE IMAGEM
O processamento de imagens digitais pode ser empregado em áreas como medicina, cinema, indústria, entre outras. O seu objetivo é a melhoria da informação visual para interpretação humana e o processamento de dados de cenas para percepção automática, ou seja, com auxílio de máquinas.
2.1.1. IMAGEM DIGITAL
Uma imagem digital pode ser definida como uma função bidimensional, f(x, y), em que x e y são coordenadas espaciais, e a amplitude de f, em qualquer par de coordenadas (x,
y) é chamada de intensidade também denominada de nível de cinza da imagem no
determinado ponto. Quando x e y e os valores da amplitude de f são todos finitos, quantidades discretas, a imagem é chamada de imagem digital. A área de processamento digital de imagens refere-se ao processamento de imagens por meio de um computador digital.
A imagem na Figura 1 pode ser representada por uma função bidimensional de f(x,
y), onde x e y indicam as coordenadas espaciais e f(x, y) indica a intensidade do nível de
cinza da imagem na dada coordenada (x, y).
16 A imagem digital é uma imagem f(x, y) discretizada, tanto em coordenadas espaciais quanto em brilho, e pode ser representada computacionalmente como uma matriz MxN, onde o cruzamento de linha com coluna indica um ponto na imagem, e o valor contido naquele ponto indica a intensidade de brilho, ou seja, o nível de cinza contido naquele ponto. Os pontos em uma imagem são chamados de pixels (“Picture Elements”).
A Matriz 1 abaixo representa um exemplo de um formato descritivo de uma imagem digital. ( , ) = (0,0) (0,1) … (0, − 1) (1,0) (1,1) … (1, − 1) … … … … ( − 1,0) ( − 1,1) … ( − 1, − 1)
Matriz 1. Formato descritivo de uma imagem digital.
2.1.2. PASSOS FUNDAMENTAIS UTILIZADOS NO PROCESSAMENTO DE IMAGENS
Em [24], são apresentados importantes passos utilizados para a realização do processamento de imagens, essas etapas serão explicadas nesta seção. A Figura 2 mostra uma seqüência padrão para o reconhecimento de imagens, descritas a seguir:
Domínio do problema: profunda análise do problema a ser tratado para se especificar o objetivo a ser alcançado.
Aquisição de imagens: consiste em utilizar um equipamento para adquirir a imagem, como uma câmera de vídeo, uma câmera fotográfica digital, ou um digitalizador de imagens. Esse processo pode ser também chamado de digitalização, pois consiste na conversão de um sinal da forma analógica para a forma digital.
Pré-processamento: refere-se ao processamento inicial da imagem para correção de distorções geométricas e remoção de ruídos, modificando a imagem para evidenciar características a serem utilizadas nas próximas etapas.
Segmentação: consiste na etapa de processamento em que se analisa a imagem com relação à informação nela presente. A imagem é dividida em diferentes regiões que são, posteriormente, analisadas por algoritmos em busca de informações que a caracterizem. A segmentação consiste em extrair da imagem apenas as áreas que interessam para a resolução do problema.
Base de conhecimento: representa o conhecimento adquirido pelo ser humano, o qual direciona o processamento da imagem para o melhor reconhecimento possível.
17 Representação e descrição: no processo de representação, as características principais devem ser enfatizadas e extraídas. O processo de descrição é também conhecido como seleção de características, onde são extraídas as características principais que resultam em informação quantitativa, capaz de separar classes de objetos importantes para o reconhecimento dos padrões.
Reconhecimento e interpretação: consiste em atribuir rótulos aos objetos, classificando-os a partir das informações encontradas na imagem na etapa anterior. Esta etapa tenta aproximar o desempenho computacional ao do ser humano ao reconhecer padrões dentro de uma imagem.
Figura 2. Passos fundamentais em processamento de imagens digitais [24].
Esta dissertação de mestrado trata de uma ferramenta de síntese de alto nível para algoritmos de processamento de imagem tendo como plataforma alvo uma placa que já possui recursos de aquisição de imagens. O SynMaker processa algoritmos que realizam as etapas de pré-processamento, segmentação, base do conhecimento e reconhecimento e interpretação.
2.2 SISTEMAS DIGITAIS
Atualmente há um grande avanço na área da indústria eletrônica de Telecomunicações e Computação como: Sistemas de Comunicação sem Fio, GPS-Global Positioning System, Sistemas de TVs a cabo, Microprocessadores e Memórias. Estes avanços foram possibilitados devido à capacidade tecnológica da microeletrônica que permitiu a integração de milhões de transistores em um único circuito integrado e de uma forma resumida temos as seguintes vantagens:
Aumento da velocidade de operação do CI. Capacidade de realizar tarefas complexas. Maior confiabilidade.
18 Maior segurança de projeto.
Redução de Custos. Menor tamanho físico.
Para atender estas vantagens hoje temos diversas tecnologias comercialmente que são:
Bipolares em Silício.
Unipolares utilizando a tecnologia MOS em Silício.
Semicondutores compostos tipo III-V como: (GAAS, LNP, etc.).
Cada uma destas tecnologias apresenta vantagens e desvantagens em relação às outras em função da aplicação específica. Uma das tecnologias que tem se destacado muito no mercado e a tecnologia CMOS (Complementary Metal Oxide Semiconductor), estes transistores tem a vantagem de usar quase nenhuma energia quando não é preciso.
Os Circuitos integrados ainda podem ser classificados de acordo com seu processo de fabricação:
1. Circuitos integrados monolíticos: Os elementos do circuito (diodos, transistores, resistências, condensadores, indutâncias, etc.) são criados essencialmente na massa e à superfície de um material semicondutor (por exemplo, silício impurificado (dopado), arsenieto de gálio, silício-germânio, fosfeto de índio), formando um todo indissociável.
2. Circuitos integrados híbridos: Reúnem de maneira praticamente indissociável, por interconexões ou cabos de ligação, sobre um mesmo substrato isolante (vidro, cerâmica, etc.) elementos passivos (resistências, condensadores, indutâncias, etc.) obtidos pela tecnologia dos circuitos de camada fina ou espessa e elementos ativos (diodos, transistores, circuitos integrados monolíticos, etc.), obtidos pela tecnologia dos semicondutores. Estes circuitos podem incluir também componentes discretos.
3. Circuitos integrados de múltiplos chips: Constituídos por dois ou mais circuitos integrados monolíticos interconectados, combinados de maneira praticamente indissociável, dispostos ou não sobre um ou mais substratos isolantes, mesmo com elementos de conexão, mas sem outros elementos de circuito ativos ou passivos.
Esses circuitos integrados são produzidos de diversas maneiras, para suprir a necessidade do mercado foram desenvolvidas técnicas de projetos de circuitos integrados de aplicações especificas (ASICs) como:
PLD´s (Dispositivos Lógicos Programáveis) - É um circuito monolítico com fusível, Anti-fusível, ou lógica baseada em célula de memória, que pode ser programado.
FPGA (Field Programable Gate Array) - É um circuito composto de uma matriz de transistores MOS, sendo possível a programação do circuito através de softwares especializados como o MAXPLUS ou QUARTUS II da Altera. Gate Array - O circuito integrado monolítico composto de linhas e colunas
detransistores.
19 camadas utilizando uma biblioteca que incorpora estruturas de circuitos pré-caracterizadas.
Full Custom - É um circuito monolítico que pode ser projetado "manualmente", desde o início.
Para entender melhor as vantagens e desvantagens dos ASICs convém estudar o diagrama da Figura 3, que mostra os tipos de ASICs em função:
Onde se pode concluir que o tipo de ASIC mais versátil e com maior capacidade de integração (Densidade) é o Full-Custom, mas também tem um elevado custo de desenvolvimento, demora muito tempo para chegar até o mercado e risco de não funcionar corretamente devido a sua complexidade (Imagine um processador com 9 milhões de transistores).
Figura 3. O Universo dos ASICs.
20 Para projetarem-se circuitos integrados deve-se primeiramente especificar o projeto a ser executado conforme mostra a Figura 4. Com base nas especificações do projeto devemos escolher qual tipo de ASICs atende melhor as especificações do projeto. E finalmente, a ferramenta de CAD apropriada. O FPGA foi escolhido para ser utilizado nessa dissertação por ser um intermediário entre custo de desenvolvimento e versatilidade.
2.2.1. CIRCUITOS LÓGICOS PROGRAMÁVEIS EM CAMPO
Em 1961 surge o primeiro circuito integrado disponível comercialmente, com a junção de vários transistores em um só componente, colocando um circuito relativamente grande dentro de uma só pastilha de silício.
Fatores como o mercado de eletro-eletrônicos em contínua expansão, consumidor mais exigente, empresas que buscam tecnologias capazes de aumentar a produção e a qualidade, diminuindo o tempo e custo final do produto, globalização e muitos outros, estão mudando o cenário dos ambientes de projetos de sistemas digitais e o perfil dos profissionais que trabalham nesta área.
Originalmente existiam projetistas de hardware ou de software separadamente. Os modernos projetistas de sistemas computacionais dedicados devem possuir conhecimentos multidisciplinares, de arquitetura de computadores a desempenho de algoritmos de processamento digital de sinais.
A computação reconfigurável introduziu novos paradigmas aos modelos computacionais atuais, tanto em nível de software quanto de hardware. Em muitos sistemas digitais como, ambientes de tempo real, os processadores de propósito geral não têm um desempenho satisfatório. Alguns recursos alternativos como processador digital de sinal (DSP) e processadores de aplicação específica melhoram o desempenho destes sistemas.
Uma tecnologia relativamente nova é a implementação de circuitos de aplicações específicas em FPGAs (Field Programmable Gate Array). O rápido desenvolvimento da tecnologia ligada a dispositivos de lógica programável em nível de velocidade e capacidade permite aos projetistas implementar circuitos e arquiteturas cada vez mais complexas, sem a necessidade do uso de grandes recursos de fundição em silício.
Sabendo que as maiorias desses circuitos são reprogramáveis, sua primeira aplicação seria em projetos de prototipagem, economizando consideravelmente tempo e custo, devido à agilidade e facilidade em todo o processo de desenvolvimento, simulação, teste, depuração e alteração do projeto. Dentre as vantagens da rápida realização de protótipos de sistemas computacionais, para aplicações dedicadas, usando tecnologia de circuitos programáveis, destacam-se:
Maior velocidade de chegada do produto ao mercado consumidor, pela detecção antecipada de problemas quanto ao hardware do sistema. Maior confiabilidade do sistema, item chave para desenvolvimento de
21 Possibilidade de desenvolvimento conjunto de hardware e software, sem interdependências, de modo a aumentar a velocidade com que o produto final chega à linha de produção.
2.3 FPGA
Os FPGAs estão se consolidando como um dos principais dispositivos configuráveis que permitem uma rápida prototipagem, reconfigurabilidade e baixo custo de desenvolvimento. Projetar circuitos e sistemas digitais usando-se dessa tecnologia é possível através de várias maneiras, sendo elas por programação com a linguagem VHDL, Verilog ou SystemVerilog.
Os FPGAs são circuitos programáveis compostos por um conjunto de células lógicas ou blocos lógicos alocados em forma de uma matriz. Em algumas arquiteturas, os blocos lógicos possuem recursos seqüenciais tais como flip-flops e/ou registradores. Cada fabricante nomeia seu bloco lógico, podendo haver mais de um nome para um mesmo fabricante, como mostrado na Tabela 1.
Fabricante Nome do Bloco Lógico
Xilinx CLB (Configurable Logic Block)
Actel LM (Logic Modules)
Altera LE (Logic Element) para as séries 8000 e 10000. Macrocell para as séries 5000, 7000 e 9000.
Tabela 1. Lista de fabricantes e seus blocos lógicos.
Em geral, a funcionalidade destes blocos assim como seu roteamento é configurável via software. Os FPGAs, além de proporcionar um ambiente de trabalho simplificado e de baixo custo, possibilitam o projeto de um número virtualmente ilimitado de circuitos através da configuração do próprio dispositivo.
2.3.1. ELEMENTOS BÁSICOS DE UM FPGA
A estrutura básica de um FPGA pode variar de fabricante para fabricante, de família para família ou até em uma mesma família pode existir variações, mas alguns elementos fundamentais são mantidos. Podem-se destacar três elementos fundamentais em um FPGA:
CLB (Configurable Logic Block): bloco lógico configurável, unidade lógica de um FPGA.
IOB (In/Out Block): bloco de entrada e saída, localizado na periferia dos FPGAs, são responsáveis pela interface com o ambiente.
SB (Switch Box): caixa de conexão, responsável pela interconexão entre os CLBs, através dos canais de roteamento.
Na Figura 5, tem-se a representação dos elementos básicos de um FPGA e sua disposição interna, destacando-se os CLBs, IOBs e SBs.
22
Figura 5. Representação dos elementos básicos de um FPGA.
Nos últimos anos a quantidade de portas lógicas disponíveis num FPGA tem crescido num ritmo muitíssimo acelerado, possibilitando a implementação de arquiteturas cada vez mais complexas. Isto permite a implementação não apenas de protótipos, mas de produtos finais complexos baseados em FPGA’s.
2.3.2. ESTRUTURA INTERNA
FPGAs são circuitos programáveis compostos de CLBs, switch boxes, IOBs e canais de roteamento, discutidos na subseção 2.3.1. A Figura 6 apresenta as quatro principais arquiteturas internas utilizadas em circuitos programáveis FPGA: matriz
simétrica, sea-of-gates, row-based e PLD hierárquico.
23 A arquitetura sea-of-gates é um circuito composto por transistores ou blocos lógicos de baixa complexidade. A vantagem dessa arquitetura é a grande disponibilidade de portas lógicas por área. Porém, como não há uma área dedicada para o roteamento, é necessário que o mesmo seja feito sobre as células, muitas vezes inutilizando áreas disponíveis para implementação de uma determinada lógica.
Nos circuitos de arquitetura row-base dos blocos lógicos estão dispostos horizontalmente. Existe uma área dedicada de roteamento localizada entre as linhas de blocos lógicos. As arquiteturas row-base de sea-of-gates originaram-se das metodologias de projeto de ASICs, standard-cells e gate-array.
A arquitetura tipo PLD hierárquico é constituída por uma matriz de blocos lógicos, denominados logic arrays blocks, sendo interligados através do recurso de roteamento conhecido como matriz programável de interconexão (PIA). Esse tipo de dispositivo é dito hierárquico, porque os blocos lógicos podem ser agrupados entre si. A arquitetura tipo matriz simétrica é flexível no roteamento, pois possui canais verticais e horizontais.
2.3.3. APLICAÇÕES COM FPGA
Tratando-se de FPGAs, um circuito flexível e poderoso, é difícil definir uma lista das áreas de aplicações, pois é uma tecnologia relativamente recente, onde a cada dia novas aplicações são implementadas. Porém, podem-se definir as áreas mais comuns de aplicações, citadas a seguir:
Processamento de imagem e vídeo: sistemas de realidade aumentada e filtros de processamento de imagem.
Consumo: Decodificador de áudio digital, arcade games, vídeo games e sistemas de karaokê.
Transportes: Sistemas de estradas de ferro.
Industrial: Equipamentos de teste e medidas, equipamentos médicos, controle remoto, robótica, emulador ASIC e sistemas de visão.
Comunicação de Dados: Multiplexadores, roteadores, vídeo conferência, criptografia, modems, compressão de dados, LANs, HUBs, FDDI e Wireless LANs.
Telecomunicação: Interfaces SONET, interfaces de fibras ópticas, ATM, interfaces ISDN, controlador de voice-mail, multiplexadores T1 e compressão de dados.
Militar: Sistemas de computadores, comunicação e controle de fogo.
Computadores: Interfaces de memória, controladores DMA, controladores de cache, coprocessadores SSP, multimídia e gráficos.
Periféricos: Controladores de disco, controladores de vídeo, FAX, máquinas de caixa, modems, sistemas POS, cartões de aquisição de dados, terminais, impressoras, scanners e copiadoras.
Uma área de aplicação que vem se destacando é a de sistemas de processamento de imagem e vídeo, onde se pode implementar em FPGA um sistema para processamento de imagem digitais com aplicações que vão de filtros de processamento de imagem até aplicações avançadas de visão computacional.
24 2.3.4. FERRAMENTAS CAE DE SÍNTESE
As ferramentas Computer Aided Engineering (CAE) juntamente com as ferramentas de síntese evoluíram consideravelmente, possibilitando ao projetista desenvolver circuitos cada vez mais confiáveis e otimizados. Uma das funções da síntese é otimizar projetos desenvolvidos nas ferramentas CAE. Essa otimização pode ser controlada pelo projetista através de restrições impostas antes do processo de síntese. Essas restrições devem ser definidas cuidadosamente, pois poderão afetar o circuito final. Para reduzir a área do circuito e/ou aumentar a sua velocidade são exigidos dos projetistas conhecimentos específicos do projeto e técnicas de otimização. Algumas características das ferramentas CAE são:
Especificação do comportamento do FPGA através de diagramas esquemáticos, linguagens de descrição de Hardware (HDL - Hardware Description Language) e/ou diagrama de fluxo (máquina de estados). Sintetização do circuito obedecendo às restrições impostas pelo
projetista; não havendo restrições, a ferramenta de síntese busca a configuração padrão para a síntese do circuito.
Verificação do funcionamento do circuito através de simulação funcional e temporal, já considerando os tempos de atraso gerados pela lógica resultante do processo de síntese.
Capacidade de gerar relatórios estatísticos, com dados de comportamento e desempenho do circuito desenvolvido.
Possibilidade de implementação do projeto em nível físico, fazendo com que o circuito programável assuma o comportamento descrito no projeto.
A seguir exemplos de algumas ferramentas CAE para tecnologias baseadas em circuitos programáveis, FPGA:
Fabricante Nome da Ferramenta CAE
Xilinx Xilinx Foundation Series Xilinx Foundation ISE
Altera MAX-PLUS MAX-PLUS II Quartus Quartus II
Tabela 2. Fabricantes e ferramentas CAE.
As ferramentas de síntese na maioria das vezes não são desenvolvidas pelos fabricantes de ferramentas CAE e sim por empresas especializadas nessa tecnologia específica, sendo atribuídas às ferramentas CAE posteriormente. Uma ferramenta CAE pode conter uma ou mais ferramentas de síntese. Dependendo do projeto, o desempenho de uma ferramenta de síntese pode ser melhor do que de outra, ficando com o projetista a responsabilidade de analisar e definir a melhor ferramenta para seu projeto. Daí, a importância de conhecer as vantagens e desvantagens de cada uma, para selecionar a ferramenta adequada.
Para desenvolver o que foi proposto nessa dissertação foi utilizada a ferramenta CAE Quartus II, que realiza a etapa final de análise e síntese do código, depois que esse código foi sintetizado pela ferramenta proposta.
25 2.4 SÍNTESE NO CONTEXTO DE PROJETO DE CIRCUITOS
A área de projeto de circuitos digitais tem sido o foco de uma grande quantidade de pesquisa, abordando vários aspectos de fluxo de projeto. Nesta seção serão apresentadas etapas do projeto de circuitos digitais, isto é, as etapas de modelagem, síntese e verificação, destacando importantes definições.
2.4.1. FLUXO DE PROJETO DE CIRCUITOS DIGITAIS
O projeto de um circuito integrado é o processo de implementar uma funcionalidade desejada por meio do refinamento da especificação do sistema até chegar à sua implementação física. O processo de refinamento implica na elaboração de múltiplos modelos de sistema, que ao longo do processo vão dando ênfase gradual em diferentes aspectos do projeto, até que sua implementação seja finalmente realizada. Tais modelos conceituais podem ser concretizados em descrições ou representações por linguagens de descrição ou especificação, e de representações internas ou intermediárias. O conjunto de objetos que são usados para definir tais modelos está organizado em diferentes níveis de abstração e domínios de descrição.
O projeto de sistemas é o processo de implementar uma funcionalidade desejada usando um conjunto de componentes físicos. Baseado nesse conceito, o processo de projetar o sistema deve começar com a especificação dessa funcionalidade com o suficiente nível de precisão que ofereça o detalhe requerido do sistema. A Figura 7 mostra uma típica estratégia de projeto top-down para circuitos.
26 A saída consiste da implementação final, que resulta da integração heterogênea de arquiteturas realizada na etapa de síntese. Existem três etapas principais na estratégia de projeto: modelagem, síntese e validação [20]. Pela modelagem, a especificação inicial é transformada numa representação interna do projeto, a qual é manipulada seguidamente pelas tarefas de síntese e validação.
Dentro do contexto do fluxo de projeto introduzido na Figura 7, os elementos abstratos da Representação Interna (RI) são misturados com a biblioteca da tecnologia, e com a tarefa de síntese produz uma implementação final do circuito digital, em forma de hardware/software [1], que satisfaz todos os requisitos. O processo moderno de síntese é realizado de maneira automática ou semiautomática, usando-se ferramentas de CAE, e está inserido, atualmente, na abordagem top-down. Visto que o processo de síntese tem como alicerce a RI usada, ele depende fortemente das características do modelo abstrato adotado.
Pela validação, o projetista consegue garantir que a funcionalidade de sua implementação está correta. Tal garantia pode evitar o consumo de tempo na depuração em níveis inferiores de abstração e na interação para os altos níveis de abstração. A simulação é o método mais comum de teste da funcionalidade do sistema, ainda que a utilização de técnicas de verificação formal está crescendo em adoção [42].
2.4.2. DOMÍNIOS DE REPRESENTAÇÃO
O diagrama-Y, mostrado na Figura 8, é uma representação gráfica que é utilizada na representação de componentes e os domínios em que um projeto de circuito pode ser representado, segundo Gajski [22]. O diagrama possui três eixos, cada um representa um domínio de descrição que é dividido em múltiplos níveis de abstração.
27 Existem três domínios de descrição: domínio comportamental, domínio estrutural e domínio físico. A descrição do projeto pode ser realizada em cada um desses domínios ou ter partes em diferentes domínios.
No domínio comportamental o projeto é descrito pela funcionalidade desejada do sistema, definida como uma composição de entidades funcionais abstratas. Os objetos comportamentais são as peças de funcionalidade e são responsáveis por processar dados de entrada e produzir dados da saída. Em geral descrições comportamentais são usadas para modelar os dados e as dependências de controle entre eles, fazendo transformações funcionais.
No domínio estrutural, a estrutura lógica é descrita freqüentemente como a interconexão estrutural de um conjunto de blocos abstratos. É o ponto intermediário entre os domínios comportamental e físico. Os objetos estruturais representam, por exemplo, modelos de componentes reais ou barramentos que estão processando dado o tempo todo.
O domínio físico representa a implementação física do projeto, ou a realização dos componentes estruturais abstratos do domínio estrutural, incluindo também o posicionamento dos blocos abstratos no plano físico do sistema.
Seguindo o que foi descrito acima, a ferramenta de síntese produzida neste trabalho é responsável por sintetizar um código que está inicialmente em um domínio comportamental para um domínio estrutural.
2.4.3. NÍVEIS DE ABSTRAÇÃO
Analisando a Figura 8, percebe-se que os níveis de abstração recebem diferentes classificações dependendo dos tipos de objetos que os compõem. Estes estão divididos em: nível arquitetural ou de sistemas, nível algoritmico, nível de blocos funcionais ou RTL (Transferência de Registradores), nível lógico ou de portas lógicas, e nível de circuitos, onde no fluxo de projeto, os objetos dos níveis mais altos são transformados hierarquicamente por objetos dos níveis mais baixos [22].
A tabela 3 [4] apresenta uma visão mais detalhada dos níveis de abstração nos domínios de descrição. Nela são mostrados os objetos ou componentes de cada nível, de acordo com o domínio de descrição de projeto. Em relação às descrições feitas em cada nível de abstração é importante fazer as seguintes observações:
Domínio
Comportamental
Domínio Estrutural Domínio Físico
Nível de Sistemas Conjunto de
especificações funcionais e de desempenho.
CPUs, memórias, chaves, controladores,
barramentos.
Particionamento físico dos sistemas.
Nível Algorítmico Algoritmos. Manipulação de estruturas de dados. Módulos de hardware. Estruturas de dados. Clusters Nível de Blocos Funcionais Operações de transferência de registradores. Seqüência entre estados. ALUs, MUXs, Registradores. Floor plan
Nível Lógico Equações booleanas. Gates, flip-flops, latches. Estimativas de células. Nível de Circuitos Equações diferenciais. Transistores, capacitores,
resistores.
Estimativas de células, detalhes nas células.
28 No nível de sistemas, as descrições são de um sistema genérico onde os seus componentes de hardware e softwares podem estar ainda indefinidos, sendo que a implementação final pode resultar em componentes apenas de cada um dos tipos ou ambos. A partir do nível algorítmico até os níveis mais baixos da hierarquia as atividades de projeto tratam de descrições puramente de hardware.
No diagrama-Y, cada ponto indica um modelo diferente de representação. De acordo com isso é possível dizer que um modelo é definido pelo grau de detalhamento da descrição do projeto no ponto considerado. O próprio projeto ou o fluxo de projeto também pode ser observado no diagrama-Y, como o processo de síntese exemplificado na Figura 9 [4]. Neste caso, no nível de sistemas, a síntese consiste no processo de derivar uma descrição estrutural do sistema - arquitetura do sistema – composta de componentes de hardware e software (processadores) a partir de uma descrição puramente comportamental do sistema, uma especificação do sistema que pode ser em uma linguagem natural, não sintetizável. Esse processo também é conhecido como síntese arquitetural ou co-projeto hardware-software, neste nível é onde esta inserida a proposta desse trabalho.
Figura 9. Processo de síntese no diagrama-Y.
2.5 METODOLOGIA MANUAL DE PROJETO DE CIRCUITO
A metodologia manual de projeto de um circuito começa com um engenheiro de sistema escrevendo um modelo de sistema em qualquer linguagem de alto nível. São verificados os conceitos e os algoritmos. Após os conceitos e algoritmos serem validados, as partes do modelo de alto nível são implementados em hardware, ou seja, convertidos manualmente para uma descrição VHDL ou Verilog para implementação em hardware. Isto é mostrado na Figura 10.
Há certo número de problemas com esta abordagem. Dentre eles:
Conversão manual de linguagem de alto nível para HDL implica em erros de tradução;
29 Com a metodologia manual, o designer cria o modelo em alto nível, verifica-se o modelo funciona como o esperado, e traduz o projeto manualmente em uma HDL. Este processo é muito tedioso e propenso a erros.
Desconexão entre o Modelo de Sistema e descrição HDL;
Após o modelo ser convertido em HDL, a descrição HDL se torna o foco do desenvolvimento. O modelo de alto nível torna-se rapidamente desatualizado a medida que as mudanças são feitas. Tipicamente mudanças são feitas apenas com a descrição HDL e não implementado no modelo de alto nível.
Vários testes de sistema
Os testes que são criados para validar a funcionalidade do modelo de alto nível normalmente não podem ser executados contra o modelo de HDL sem conversão. Não só o designer tem que converter o modelo de alto nível para HDL, mas o conjunto de teste tem de ser convertido para o ambiente HDL também.
Para as partes do modelo original serem implementadas em software, o modelo muitas vezes deve ser reescrito com chamadas para um RTOS ( Real-time operating
system). O modelo é o simulado e verificado com um RTOS emulador. Embora as
partes do código original possam ser reutilizadas, a mudança na abstração do modelo original, para um modelo baseado em RTOS requer significativa recodificação e verificando as alterações manuais torna-se um problema significativo.
30 2.6 SÍNTESE DE ALTO NÍVEL
A síntese é o termo usado para designar o processo de transformação de um sistema digital a partir de uma especificação comportamental em uma descrição a nível RTL comportamental ou estrutural que pode em seguida passar por ferramentas de síntese RTL. De um modo geral, a especificação inclui alguma forma de abstração, ou seja, algumas das decisões de design não claramente descritas. A implementação, por outro lado, deve descrever em detalhes o projeto completo em um determinado nível de abstração.
Devido à complexidade dos sistemas digitais, especialmente aqueles implementados na tecnologia VLSI, o processo de síntese é geralmente dividido em várias etapas. Estes passos incluem síntese em nível de sistema, a síntese de alto nível, a síntese lógica e projeto físico.
Síntese em nível de sistema atua de acordo com a formulação da arquitetura básica da implementação. Tal sistema pode ser implementado por um conjunto de processadores cooperantes, tais como ASIC, controladores dedicados, FPGAs e processadores DSP. A atribuição de um conjunto de processadores físicos e o mapeamento de processos, ou seja, funções a serem executadas na especificação comportamental para esses processadores é a decisão mais crítica de projeto a ser feita durante a etapa de síntese em nível de sistema. Uma característica importante do nível de sistema é que as técnicas de síntese e requisitos de projeto são aplicações altamente dependentes. Por exemplo, em nível de sistema, técnica de síntese utilizada na área de aplicação em sistemas de tempo real embutidos será muito diferente dos utilizados em sistemas de DSP.
Síntese de alto nível, então, traduz a especificação comportamental de um processo para uma descrição estrutural que ainda é independente da tecnologia. Esta descrição estrutural geralmente está em nível RTL. Síntese em nível de sistema e síntese de alto nível forma o front-end de uma abordagem de síntese para o projeto do sistema digital. Síntese lógica e projeto físico são usados para mapear as estruturas implementadas a nível RTL em uma descrição de layout que é a implementação final. Síntese lógica e projeto físico formam o back-end da abordagem de síntese para o projeto de sistema digital.
Uma razão importante para a separação do processo de síntese em front-end (sistema) e back-end de síntese pode ser atribuída à boa propriedade geral possuída pela síntese de front-end e da natureza de curta duração do processo para alvo semicondutores associado à síntese de back-end. Como a síntese front-end não está ligada a uma determinada tecnologia, ela pode ser utilizada em vários ambientes diferentes do projeto ou adotada rapidamente às novas tecnologias, conforme a necessidade. O back-end, no entanto tem um ciclo de vida muito curto, porque fica desatualizado com mudanças na tecnologia.
Nos últimos anos, tem havido uma nítida tendência para automatizar o processo de síntese e há várias razões para isso:
Menor ciclo de design. O uso da automação do processo de síntese reduz o tempo de projeto e oferece melhores chances de uma empresa para atingir a janela de mercado para aquele produto. Automação reduz também o custo dos produtos significativamente, uma vez que em muitos casos, o custo de criação do produto domina o custo de desenvolvimento.
31 A capacidade de explorar um espaço de projeto muito maior. Uma técnica de síntese eficiente pode produzir várias implementações a partir da mesma especificação em um curto período de tempo. Isso permite que o designer possa explorar diferentes trade-offs entre custo, desempenho, consumo de energia, testabilidade e etc.
Suporte para verificação do projeto. Um pré-requisito para automatizar o processo de co-projeto de hardware / software, por exemplo, é iniciar o processo de síntese com uma especificação conjunta de ambos, hardware e software, este torna possível verificar completamente a consistência do projeto, consistindo em componentes de hardware e processos de software.
Menos erros. A redução das atividades de concepção manuais significa que o número de erros humanos será diminuído, se os algoritmos de síntese podem ser validados. Pode-se ter mais confiança de que o projeto final será corretamente implementado seguindo a especificação dada.
Aumento do acesso à tecnologia de circuitos integrados. Quanto mais alto o nível de abstração pode ser capturado e sintetizado automaticamente, mais fácil para as pessoas que não são especialistas em tecnologia CI’s para projetar chips.
A complexidade dos circuitos digitais integrados tem sempre aumentado de uma tecnologia para outra. Os designers muitas vezes tiveram que se adaptar ao desafio de proporcionar soluções comercialmente aceitáveis, com um esforço razoável. Muitas evoluções (às vezes, revoluções) ocorreram no passado: back-end de automação ou lógica síntese foram parte daqueles, permitindo nova área de inovação. Graças ao crescente fator de integração oferecido por convergência de tecnologia, a complexidade na última SoC já atingiu dezenas de milhões de portas lógicas. Começando com 90 nm e abaixo disto, na Figura 11 mostra o fluxo para esse escopo [33].
32 A diferença entre a produtividade por designer e por ano e o aumento da complexidade do SoC, mesmo tendo em conta um número muito conservador de portas por melhoria de tecnologia, irá ocorrer uma explosão da mão de obra para SoCs para melhorias de nanotecnologia futuras como mostra a Figura 12.
Figura 12. Desafios do projeto para 65nm e abaixo.
Há uma grande necessidade de melhoria de produtividade em nível de design. Isto cria uma excelente oportunidade para novas técnicas de projeto a serem adotadas: designers enfrentam de frente este desafio, com uma fome de progredir e elevar o nível de abstração do modelo de referência em que eles confiam.
Um novo passo é necessário para aumento da produtividade. Parte desta etapa pode ser oferecida por ESLD: Electronic System Level Design. Isso inclui HW / SW co-design e Síntese de Alto Nível ( High Level Synthesis, HLS).
A implementação de HW / SW co-design ocorreu alguns anos atrás, graças à introdução de bibliotecas de descrição em alto nível de abstração como SystemC e codificação TLM [33]. A aplicação de HLS, porém, é nova e está apenas começando a ser implantada e aceita de forma comercial. A Figura 13 mostra a base da metodologia de concepção da STMicroelectronics baseada na utilização de descrições em código C.
33
Figura 13. Fluxo de síntese de alto nível.
Nesta metodologia é utilizado como descrição de entrada do fluxo um modelo de referência bit-accurate descrito a nível funcional em C / C++ usando tipos de dados de SystemC ou tipo de dado equivalente. No caso ideal, esta descrição de nível C tem de ser extensivamente validada usando um testbench também nível C, em ambiente funcional, de modo a se tornar o modelo do fluxo de execução. Isto é facilitado pela velocidade de simulação deste modelo C, geralmente mais rápido do que outros tipos de descrição. Em seguida, tendo em conta as restrições de tecnologia, a ferramenta HLS produz uma representação RTL, compatível com fluxo RTL-GDS2. A verificação entre os modelos em C e RTL é feita utilizando-se ferramentas de verificação de equivalência seqüenciais, ou por extensas simulações.
Iniciada em 2001, a pesquisa sobre os fluxos de novas ferramentas HLS permitiu que algumas implantações de dentro STMicroelectronics, a partir dev2004, com os primeiros simpatizantes. Vemos claramente em 2007 uma aceleração da demanda de designers. Os designers demonstram terem aumentado um fator de cinco vezes para dez vezes, em termos de produtividade pelo uso da metodologia de projeto em C, dependendo da forma como eles reutilizam no design de seus IPs, Figura 14. Mais promissor: Designers que mudaram para projeto em C normalmente não querem voltar ao nível RTL para criar seus IPs.
Outro benefício desta automação de projeto de nível C, a reutilização de IP’s de processamento de sinal agora está se tornando realidade. A automação do fluxo permite se ter IPs em C, descritos a nível funcional, fácil de modificar e lidar com novas especificações e fácil de ressintetizar. Outro benefício: o tamanho da descrição do código escrito manualmente (C, em vez de RTL) é reduzido por um fator de aproximadamente 10 vezes. Isto reduz o tempo de modificação, assim como o número de erros funcionais manualmente introduzidos no silício final.
34
Figura 14. Curva de aprendizagem.
Outro benefício das ferramentas de automação de HLS é a exploração de micro-arquitetura. Ou seja, o projetista pode gerar rapidamente várias micro-arquiteturas e selecionar aquela que mais se adéqua às especificações do projeto. A Figura 15 basicamente descreve uma mudança de paradigma: freqüência de clock pode ser parcialmente de correlata em restrições de throughput. Isto significa que, focando as restrições funcionais (throughput/latência), o designer pode explorar diversas soluções que satisfazem as especificações, usando várias freqüências de clock. Graças a possibilidade de produzir essas diferentes arquiteturas rapidamente pela ferramenta de HLS mudando a freqüência de clock, o projetista pode escolher o projeto de mais baixa velocidade que não terá a penalidade de área da solução de alta velocidade gerada.
Figura 15. Um benefício da automação: exploração.
A HLS está sendo implantada também para as necessidades de mais automação e mais otimização. Reordenação aritmética profunda é uma dessas necessidades, a corrente geração de ferramentas é efetivamente limitada em termos de reordenação aritmética.
35 A Capacidade das ferramentas de HLS é outro parâmetro a ser reforçado, mesmo que as ferramentas tenham progredido muito nos últimos anos. A bem conhecida Lei de Moore existe e ainda as ferramentas tem que seguir a capacidade de integração das indústrias de semicondutores.
2.7 JAVA PARSER
Para os programadores, escrever um parser para a gramática sempre foi uma tarefa propensa a erros. Especialmente quando lidamos com uma gramática como Java que tem tantas aplicações. E também é uma tarefa demorada obter um parser para a gramática. Portanto, tem havido uma série de pesquisas sobre geração automática de um compilador de uma especificação formal de uma linguagem de programação. Nesta dissertação utilizamos destes conceitos para extrair informações valiosas a partir do código fonte dado como entrada. Por esse motivo, optou-se por usar um destas ferramentas de geração de parsers, presentes no estado da arte, em vez de escrever um parser próprio a partir do zero.
Algumas dessas ferramentas para compilador bem conhecidas são:
• Lex &Yacc: Lex constrói analisadores léxicos de expressões regulares. Yacc converte uma especificação de gramática em um compilador table-driven que pode produzir código quando ele tinha analisado com êxito produções da gramática.
• Flex & Bison: Eles são projetos produzidos pela Free Software Foundation´s GNU, são versões melhoradas de Lex e Yacc para uso em plataformas que não executam um sistema operacional Unix ou derivados.
• DFA & ANTLR (Componentes de PCCTS7): Eles oferecem as mesmas funções que Lex e Yacc. No entanto, as gramáticas ANTLR que aceita são LL(k) gramáticas, em oposição às gramáticas LALR utilizados por Yacc.
Para essa dissertação foi utilizada a ferramenta Java Compiler Compiler (JavaCC) para esse propósito de gerar um parser tanto para Java quanto SystemVerilog.
2.7.1. JAVACC
JavaCC (Java Compiler Compiler) é o gerador de parser mais popular para uso com aplicações construídas em Java [39]. É uma ferramenta que lê uma especificação de gramática e a converte para um programa Java que pode reconhecer uma descrição que corresponde à gramática de acordo com a especificação definida pelo criador da gramática.
JavaCC foi lançado pela Sun com o nome JACK. A última versão foi lançada pela Metamata Inc. Web Gain1 foi a empresa zeladora dele por um tempo. Atualmente, JavaCC pode ser obtido a partir da Web a partir do site da Sun Micro system2. Além do próprio gerador de parser, JavaCC fornece outras capacidades normais relacionadas à
1
http://www.webgain.com
2
36 geração de parsers, tais como construção de árvore (via uma ferramenta chamada JJTree), as ações, depuração e etc. JavaCC não possui bibliotecas de tempo de execução (como arquivos JAR). Os únicos arquivos que são necessários para o parser são aqueles gerados pelo JavaCC.
JavaCC é capaz de ler uma descrição de uma linguagem (a gramática) e gerar o código, escrito em Java, que irá ler e analisar essa linguagem. JavaCC é particularmente útil quando você tem que escrever código para lidar com uma linguagem de entrada que tem uma estrutura complexa. Neste caso, elaborar manualmente um módulo de entrada, sem a ajuda de um gerador de analisador pode ser uma tarefa difícil.
O analisador léxico do parser JavaCC gerado tem um recurso para manter comentários quando eles são definidos como tokens especiais. Símbolos especiais são ignorados durante a análise, mas estes tokens estão disponíveis (ao contrário de itens ignorados, como espaços em branco) para o processamento pelas ferramentas.
Na Figura 16, a entrada é composta de uma descrição da especificação da gramática da linguagem que é salva em um arquivo com extensão .jj. Uma vez processados se tem como saída os arquivos Java que tem o código do parser que pode processar a linguagem que está de acordo com a gramática no processo de especificação. Estes arquivos Java, quando são compilados, geram um compilador para a gramática que foi especificada.
Figura 16. Entrada e saída do JavaCC.
Uma vez que o código do parser é gerado, ele é compilado com o compilador Java (javac) para obter o parser. O código de resultado é usado para analisar a gramática desejada, veja a Figura 17.
Figura 17. Compilando o parser gerado pelo JavaCC e usando-o para obter a AST.
2.8 REPRESENTAÇÃO INTERMEDIÁRIA E EXTRAÇÃO DE INFORMAÇÃO (DIAGRAMA)
Nesta seção, apresentamos alguns modelos que usam técnicas para a extração de informações a partir do código fonte. Uma representação intermediária (RI) é uma estrutura de dados, geralmente construída a partir de uma descrição de um programa ou