You are on page 1of 44

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA CURSO DE CINCIA DA COMPUTAO

IMPLEMENTAO DE UMA TRANSFORMADA RPIDA DE FOURIER PARA COMPUTAO RECONFIGURVEL DE ALTO DESEMPENHO
TRABALHO DE GRADUAO

Tiago de Albuquerque Reis

Santa Maria, RS, Brasil 2008

IMPLEMENTAO DE UMA TRANSFORMADA RPIDA DE FOURIER PARA COMPUTAO RECONFIGURVEL DE ALTO DESEMPENHO

por

Tiago de Albuquerque Reis

Trabalho de Graduao apresentado ao Curso de Cincia da Computao da Universidade Federal de Santa Maria (UFSM, RS), como requisito parcial para a obteno do grau de Bacharel em Cincia da Computao

Orientador: Profa Dra Andrea Schwertner Charo Co-orientador: Dr. Haroldo Fraga de Campos Velho

Trabalho de Graduao No 259 Santa Maria, RS, Brasil 2008

Universidade Federal de Santa Maria Centro de Tecnologia Curso de Cincia da Computao

A Comisso Examinadora, abaixo assinada, aprova o Trabalho de Graduao

IMPLEMENTAO DE UMA TRANSFORMADA RPIDA DE FOURIER PARA COMPUTAO RECONFIGURVEL DE ALTO DESEMPENHO elaborado por Tiago de Albuquerque Reis como requisito parcial para obteno do grau de Bacharel em Cincia da Computao

COMISSO EXAMINADORA: Profa Dra Andrea Schwertner Charo (Presidente/Orientador)

Prof. Dr. Benhur de Oliveira Stein (UFSM)

Prof. Dr. Giovani Baratto (UFSM)

Santa Maria, 1 de fevereiro de 2008.

AGRADECIMENTOS

Agradeo inicialmente minha famlia, em especial: aos meus avs Nildo e Gladir, que foram praticamente meus segundos pais; minha madrinha Nilda, uma das maiores culpadas (se no a maior) por eu fazer computao ao me presentear meu primeiro computador, e tambm por todo seu carinho e apoio sempre que precisei; ao meu irmo, Lucas, por me mostrar o quo mais tranqila e chata seria a vida de lho nico; ao meu padrinho Paulo, pelo seu apoio e por (juntamente com meu av) me fazer ser colorado; e por ltimo e mais importante, minha me que simplesmente foi meu maior exemplo de vida. Agradeo minha orientadora Andrea Charo, por me despertar interesse em ser pesquisador (e professor) e, principalmente, pela enorme dedicao e pacincia na minha iniciao como tal. Ao meu co-orientador Haroldo de Campos Velho, pela oportunidade de utilizar o INPE nesse trabalho e por sua orientao. banca avaliadora, Benhur Stein e Giovani Baratto, por sua grande contribuio para a melhoria deste trabalho. Agradeo tambm a todos os professores do curso que atravs de bons e maus exemplos, ajudaram na minha formao. minha namorada, Thiely, que apesar da falta de pacincia nos apertos de nal de semestre, sempre esteve ao meu lado, amenizou os momentos difceis e melhorou ainda mais os bons momentos. Agradeo meus colegas por formarem uma turma sem igual e me ajudarem a agentar a faculdade. Em especial ao Cristiano, Eduardo, Leandro, Mrcio, Matheus e Rodolfo que alm de colegas foram grandes amigos nessa jornada. EDF para sempre. Tambm a todos os membros do LSC, que ajudaram na minha iniciao cientca. Agradeo o Centro de Processamento de Dados da UFSM pela oportunidade de estgio e, em especial, a toda a Diviso de Redes e Sistemas Bsicos (antigo Suporte) pelos ensinamentos e companheirismo. Agradeo tambm a todos os meus amigos que de uma forma ou de outra me ajudaram a chegar at aqui.

Tem gente que gasta seu tempo com compras, eu gasto meu tempo pirando nos sons da oresta. X ISPA D IVINA

RESUMO

Trabalho de Graduao Curso de Cincia da Computao Universidade Federal de Santa Maria IMPLEMENTAO DE UMA TRANSFORMADA RPIDA DE FOURIER PARA COMPUTAO RECONFIGURVEL DE ALTO DESEMPENHO Autor: Tiago de Albuquerque Reis Orientador: Profa Dra Andrea Schwertner Charo Co-orientador: Dr. Haroldo Fraga de Campos Velho Local e data da defesa: Santa Maria, 1 de fevereiro de 2008. A computao recongurvel uma abordagem de desenvolvimento de sistemas em que a aplicao dene a estrutura do processador. Essa abordagem vem ganhando espao na computao de alto desempenho, pois permite criar sistemas hbridos implementados como uma combinao de hardware e software, apresentando desempenho superior ao de sistemas implementados unicamente em software. Neste trabalho, tem-se como objetivo a implementao de uma transformada rpida de Fourier para possvel utilizao em computao recongurvel. Essa implementao pode ser usada para aumentar o desempenho de aplicaes que utilizem esse mtodo numrico. Este trabalho se faz importante por explorar este novo paradigma de computao de alto desempenho e, ao mesmo tempo, fazer com que a aplicaes aproveitem melhor os recursos de hardware disponveis em um computador hbrido Cray XD1, equipado com processadores recongurveis do tipo FPGA (Field-programmable Gate Array). Para tal, deciciu-se implementar em FPGA um algoritmo que calcula uma transformada rpida de Fourier por esse algoritmo constituir um ncleo computacional bastante utilizado em diversas aplicaes na rea de meteorologia. Essa implementao foi simulada e apresentou resultados satisfatrios em nmero de ciclos de relgio necessrios para realizar a funo.

Palavras-chave: FPGA, transformada rpida de Fourier, computao recongurvel, computao de alto desempenho.

ABSTRACT

Graduation Work Graduation Program in Computer Science Federal University of Santa Maria IMPLEMENTATION OF A FAST FOURIER TRANSFORM FOR HIGH PERFORMANCE RECONFIGURABLE COMPUTING Author: Tiago de Albuquerque Reis Advisor: Profa Dra Andrea Schwertner Charo Coadvisor: Dr. Haroldo Fraga de Campos Velho Recongurable computing is an approach to system design where the application denes the processor structure. This approach is useful for high performance computing, allowing the creation of hybrid systems as a combination of hardware and software, presenting a higher performance than software-only implementations. This work has the goal of implementing a fast Fourier transform for possible use in recongurable computing. This implementation can be used to increase the performance of applications that make use of such numerical method. This work is important for exploring this new high performance paradigm and, at the same time, make applications use more efciently the hardware resources available in a Cray XD1 supercomputer, equipped with FPGA (Field-programmable Gate Array) recongurable processors. The fast Fourier transform algorithm was chosen because it is a computational kernel used in several meteorological applications. This implementations was simulated and presented a satisfactory number of clock cycles to execute this function.

Keywords: FPGA, fast Fourier transform, recongurable computing, high performance computing.

LISTA DE FIGURAS

Figura 2.1 Arquitetura de FPGA genrica. Fonte: (MAXFIELD, 2004) . . . . . . . . . . 15 Figura 2.2 Elementos de um bloco lgico programvel. Fonte: (MAXFIELD, 2004) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Figura 3.1 Figura 3.2 Figura 3.3 Figura 3.4 Figura 4.1 Figura 4.2 Figura 4.3 Figura 4.4 Operao de borboleta - DIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operao de borboleta - DIF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Grafo do algoritmo radix-2 por decimao no tempo . . . . . . . . . . . . . . . . . Grafo do algoritmo radix-2 por decimao na freqncia . . . . . . . . . . . . . Viso lgica do chassis do XD1. Fonte: (CRAY, 2005a) . . . . . . . . . . . . . . Conexes do FPGA. Fonte: (CRAY, 2005a) . . . . . . . . . . . . . . . . . . . . . . . . . Topo de um projeto HDL para o Cray XD1. Fonte: (CRAY, 2005a) . . . RapidArray Transport Core. Fonte: (CRAY, 2005b) . . . . . . . . . . . . . . . . . 21 21 22 23 24 25 28 29 31 32 32 33 34 34 35 36 37 38 38 39

Figura 5.1 Portas do mdulo que calcula o fator twiddle . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.2 Portas do mdulo calcula a borboleta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.3 Arquitetura da borboleta implementada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.4 Arquitetura da FFT implementada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.5 Algoritmo FFT implementado em VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.6 Resultado obtido em simulao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.7 Resultado obtido em programa de alto nvel . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.8 Portas utilizadas do mdulo RapidArray Transport Client . . . . . . . . . . . . Figura 5.9 Estrutura dos records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.10 Exemplo de requisio via hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.11 Portas do mdulo FFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.12 Arquitetura implementada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

LISTA DE TABELAS

Tabela 3.1 Exemplo de ordenao por bit-invertido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Tabela 5.1 Ciclos de relgio necessrios para calcular a FFT . . . . . . . . . . . . . . . . . . . . 40

LISTA DE ABREVIATURAS E SIGLAS

API DIF DIT ESL FFT FPGA HDL IEEE IP LUT QDR RAM SRAM VHDL

Application Programming Interface Decimation-in-frequency Decimation-in-time Eletronic System Level Fast Fourier Transform Field-programmable Gate Array Hardware Description Language Institute of Electrical and Electronic Engineering Intellectual Property Lookup Table Quad Data Rate Random Access Memory Static Random Access Memory VHSIC Hardware Description Language

VHSIC Very High Speed Integrated Circuit

SUMRIO

INTRODUO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 14 14 15 16 16 17 18 19 19 19 19 20 20 21 24 24 25 25 26 26 26 27 28 30 30 30 33 35 38

2 COMPUTAO RECONFIGURVEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 FPGA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Programao de FPGAs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1 VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.2 Ferramentas ESL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.3 Ambiente de programao escolhido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 TRANSFORMADA DE FOURIER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1 Introduo transformada de Fourier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Contnua . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2 Discreta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Transformada rpida de Fourier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Algoritmos radix-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2 Outros algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 CRAY XD1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1 Arquitetura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1 Interconexo RapidArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.2 Recursos de memria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Programando o Cray XD1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 FPGA Control Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.2 Operaes administrativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.3 Transferncia de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Congurando o FPGA do XD1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 IMPLEMENTAO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Implementao da operao borboleta em VHDL . . . . . . . . . . . . . . . . . . . . . . . 5.3 Implementao da FFT em VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4 Conectando a FFT nos mdulos da Cray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5 Avaliao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

CONCLUSO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

REFERNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

12

1 INTRODUO

A computao recongurvel um ramo emergente na computao de alto desempenho que utiliza processadores especiais, ditos recongurveis, cujos circuitos so denidos pelo algoritmo a ser executado. Sua utilizao em ambientes de alto desempenho geralmente se d em sistemas hbridos implementados em uma combinao de hardware e software. Essa abordagem tem se mostrado eciente, pois explora nveis adicionais de paralelismo (PETERSON; SMITH, 2001). Por si s, a computao recongurvel tem mostrado speed-ups signicativos em relao a implementaes somente em software (LEVINE, 1999). Como exemplo de dispositivo recongurvel podemos citar o Field-programmable Gate Array (FPGA), dispositivo semi-condutor com blocos lgicos e interligaes programveis. Os blocos lgicos, tambm chamados clulas lgicas, podem ser programados para realizar desde simples funes lgicas at funes matemticas complexas. A vantagem da utilizao de FPGAs se d pela possibilidade de alteraes no prprio design do processador, ao invs de utilizar processadores programveis por software (PETERSEN, 1995). Em arquiteturas de alto desempenho, uma tendncia a construo de sistemas que combinam processadores tradicionais e processadores recongurveis. Nestes casos, as aplicaes precisam ser adaptadas para tirar proveito do hardware recongurvel. Para evitar o porte total de uma aplicao para FPGA, que uma operao onerosa, pode-se implementar em hardware apenas certos ncleos computacionais que consomem grande parte do tempo de processamento e so empregados em diferentes aplicaes. Um exemplo deste tipo de operao a transformada rpida de Fourier, que est presente em diversas aplicaes na rea de meteorologia. Uma transformada rpida de Fourier (Fast Fourier Transform - FFT) um algoritmo eciente para calcular a transformada discreta de Fourier e sua inversa. A FFT revo-

13

lucionou o uso de polinmios trigonomtricos interpolatrios, organizando o problema de forma que o nmero de pontos usados pode ser facilmente fatorado em potncias de dois (BURDEN; FAIRES, 1997). Esse mtodo de grande importncia para vrias aplicaes, como resoluo de equaes diferenciais parciais e multiplicao de inteiros grandes (COOLEY; TUKEY, 1965). O principal objetivo deste trabalho implementar uma transformada rpida de Fourier em um processador recongurvel. Essa transformada rpida de Fourier poder ser aplicada no modelo meteorolgico DYNAMO (VELHO; CLAEYSSEN, 1992; LYNCH; Ireland Meteorological Service, 1984), em uso no Instituto Nacional de Pesquisas Espaciais (INPE). Com isso, espera-se melhorar o desempenho de aplicaes meteorolgicas que tm esse mtodo numrico como ncleo computacional, fazendo com que ele execute no FPGA. A metodologia de desenvolvimento deste trabalho compreende um estudo aprofundado da transformada rpida de Fourier, seus algoritmos e diculdades de implementao. Alm disso, necessria uma familiarizao com a programao para FPGAs e seus ambientes de desenvolvimento, para ento implementar, testar e simular a transformada rpida de Fourier em hardware. O restante deste documento est organizado da seguinte forma: no captulo 2 apresentase uma reviso sobre computao recongurvel, processadores recongurveis e congurao de FPGAs; no captulo 3 descreve-se a transformada de Fourier, suas variaes e algoritmos. No captulo 4 apresenta-se o Cray XD1 e seus detalhes de programao e congurao. Por m, no captulo 5 descreve-se a implementao e apresenta-se uma avaliao da implementao proposta.

14

2 COMPUTAO RECONFIGURVEL

Este captulo apresenta uma reviso de conceitos e tecnologias para computao recongurvel. Inicialmente apresenta-se uma breve introduo a este paradigma e, em seguida, discute-se FPGAs e sua utilizao no contexto da computao recongurvel. Por m, apresenta-se uma introduo programao de FPGAs, mostrando as opes e ferramentas para esse m.

2.1 Introduo
Computao recongurvel um paradigma de computao que combina o alto desempenho do hardware com a exibilidade do software utilizando processadores recongurveis (TODMAN et al., 2005). Essa abordagem tem como objetivo preencher a lacuna entre o hardware e o software, alcanando assim um desempenho maior que o software enquanto mantm um nvel de exibilidade maior que o hardware (COMPTON; HAUCK, 2002). Na computao de alto desempenho, a utilizao de computao recongurvel vantajosa pela possibilidade de explorar mltiplos tipos e nveis de paralelismo (PETERSON; SMITH, 2001). O conceito de computao recongurvel foi proposto na dcada de 1960 por Gerald Estrin, cuja idia era ter um arranjo de processadores recongurveis controlados por um processador tradicional. Nessa arquitetura, o processador conguraria o hardware recongurvel para executar uma determinada tarefa e, assim que esse terminasse o processamento, o reconguraria para outra tarefa (ESTRIN et al., 1963). Vrias tentativas de se criar computadores recongurveis apareceram nas dcadas de 1980 e 1990, mas no obtiveram sucesso por limitaes de tecnologia. At que em 1991 surgiu o primeiro computador recongurvel, o Algotronix CHS2X4 (KEAN, 2007). Processadores recongurveis somente se rmaram comercialmente com o FPGA, inventado

15

em 1984 por Ross Freeman.

2.2 FPGA
Um FPGA um dispositivo semi-condutor que possui blocos lgicos e interconexes programveis. Esse dispositivo permite a implementao de circuitos lgicos relativamente grandes que consistem de um arranjo desses blocos lgicos e interconexes, contidos em um nico circuito integrado. Assim, ele pode ser utilizado para computao hbrida, onde parte da execuo se d em um processador tradicional controlado por software e outra parte em um processador programado exclusivamente para realizar determinada tarefa. Um FPGA composto de trs componentes bsicos: blocos lgicos, chaves de interconexo e blocos de entrada e sada. Sua estrutura pode ser vista na gura 2.1, com exceo dos blocos de entrada e sada que se localizam nas extremidades da malha.

Figura 2.1: Arquitetura de FPGA genrica. Fonte: (MAXFIELD, 2004) Os blocos lgicos so formados por uma tabela de busca, tambm chamada LUT (Lookup Table), um multiplexador e um ip-op. Um exemplo de bloco lgico, como mostrado na gura 2.2, possui quatro entradas, duas sadas e um sinal de relgio. A tabela de busca utilizada para implementar a lgica do bloco, visto que uma tabela de busca com n bits pode codicar um funo Booleana de n entradas atravs de tabela verdade.

16

Figura 2.2: Elementos de um bloco lgico programvel. Fonte: (MAXFIELD, 2004)

2.3 Programao de FPGAs


A denio do comportamento de um FPGA, assim como qualquer outro dispositivo de hardware, pode ser feita atravs de uma linguagem de descrio de hardware (Hardware Description Language - HDL). O circuito projetado em HDL transformado em um netlist, utilizando alguma ferramenta de automao de design eletrnico, que ento ser transformada em um arquivo binrio que congura o FPGA, utilizando ferramentas disponibilizadas pelos fabricantes do dispositivo. 2.3.1 VHDL Esta linguagem surgiu na dcada de 1980 como linguagem de descrio de hardware VHSIC (Very High Speed Integrated Circuits) e em 1987 foi aprovado como padro da IEEE (Institute of Electrical and Electronic Engineering) (MARRA et al., 2001). Atualmente , juntamente com Verilog, a linguagem de descrio de hardware mais utilizada. Do ponto de vista do desenvolvedor de hardware, VHDL de grande utilidade, pois permite denir o comportamento do hardware de maneira parecida com linguagens de alto nvel e permite tambm denir portas de entrada e sada do componente de maneira intuitiva. Como linguagem de descrio de hardware, VHDL bastante poderosa, mas do ponto de vista do programador, ela uma linguagem de desenvolvimento lento, pois o programador precisa se preocupar com vrios detalhes inexistentes em linguagens de alto nvel.

17

Utilizar VHDL para programao comparvel programar em linguagem Assembly. Pensando nisso, principalmente pelo crescente uso de FPGAs em aplicaes de alto desempenho, exitem esforos para aumentar a produtividade dos programadores atravs da metodologia ESL (Eletronic System Level). 2.3.2 Ferramentas ESL ESL um novo paradigma que promete alavancar a produtividade de desenvolvimento para FPGAs, elevando o nvel de abstrao em relao a linguagens de descrio de hardware. Com ele possvel desenvolver um programa em uma linguagem de alto nvel, como C, e traduzi-lo de maneira otimizada em hardware (LASS, 2006). Para o desenvolvimento deste trabalho, pesquisou-se algumas solues deste tipo a m de selecionar uma ferramenta adequada e, ao mesmo tempo, conhecer os avanos recentes nesta rea. Estas ferramentas sero apresentadas nas prximas sees. 2.3.2.1 FpgaC FpgaC um compilador de cdigo aberto para a linguagem C que gera, ao invs de binrios, um circuito digital que executa o programa compilado. Tem como objetivo melhorar a ecincia do desenvolvimento para computao recongurvel, substituindo as linguagens de descrio de hardware por uma linguagem de alto nvel (PENTINMAKI; MENON; BASS, 2006). Um programa em C compilado com FpgaC gera um netlist para ser transformado, utilizando ferramentas do fabricante do FPGA, no binrio que carregado para o FPGA. Apesar de ser um alternativa que pode facilitar bastante o desenvolvimento de uma aplicao para FPGA, no ser utilizado por incompatibilidade com a verso da ferramenta disponibilizada pelo fabricante do FPGA que ser programado. 2.3.2.2 C2VHDL C2VHDL um tradutor de C para VHDL, desenvolvido na Universidade do Estado do Rio de Janeiro. Tambm tem como objetivo facilitar a construo de hardware atravs de linguagens de alto nvel, mas de forma mais genrica pois um cdigo VHDL pode ser importado para qualquer ferramenta de gerao de binrios para FPGA (MARRA et al., 2001). Os desenvolvedores do C2VHDL no disponibilizam a ferramenta, o que impossibilita

18

sua utilizao nesse trabalho. 2.3.2.3 Outras ferramentas Existem diversas ferramentas para traduo de C para HDL (VHDL e/ou Verilog) e compilao de C para netlists. Dentre elas podemos citar: Impulse C, Catapult C e Handel C. Todas estas ferramentas so comercializadas a preos em torno de milhares de dlares. 2.3.3 Ambiente de programao escolhido As ferramentas pesquisadas possuem caractersticas indesejveis para este trabalho, como incompatibilidade com o modelo de FPGA (Virtex II Pro, da Xilinx) a ser utilizado e alto custo de aquisio. Assim, optou-se por implementar a soluo diretamente em VHDL. Outro fator que levou a essa deciso foi o fato de que o algoritmo da FFT no muito extenso e, portanto, o ganho de tempo com a utilizao de ESL no compensaria o tempo gasto pesquisando outras opes. Para a implementao em VHDL, foi utilizada a ferramenta VHDL Simili 3.1 (Symphony EDA, 2007), desenvolvido pela Symphony EDA. Esta escolha deu-se pela familiaridade obtida com essa ferramenta em outras oportunidades. Com essa ferramenta possvel editar, compilar e simular cdigos em VHDL. Para integrao com FPGA ser utilizada a ferramenta Foundation 9.2i da Xilinx. atravs dela que ser gerado o binrio para ser carregado pelo FPGA.

19

3 TRANSFORMADA DE FOURIER

Neste captulo apresenta-se uma introduo transformada de Fourier. Inicialmente apresenta-se a transformada e sua discretizao. Na seqncia, descreve-se a transformada rpida de Fourier, alguns algoritmos para seu processamento e suas caractersticas.

3.1 Introduo transformada de Fourier


Formulada por Jean-Baptiste Joseph Fourier, a transformada de Fourier mostra que funes no peridicas podem ser expressas por integrais de funes senoidais de freqncias diferentes, cada uma multiplicada por um coeciente prprio, desde que a rea sob a curva dessa funo seja nita. 3.1.1 Contnua Para uma funo contnua de uma varivel f(t), a transformada de Fourier F(f) denida por F (f ) = e sua inversa por f (t) = onde ej = cos() + jsen() e j = 3.1.2 Discreta Seja uma srie de nmeros complexos x(k) com N amostras, a transformada X(k) denida por X(n) = e sua inversa por
N 1 k=0 kn x(k)WN , para n = 0, 1, ..., N-1

f (t)ej2f t dt

F (f )ej2f t df

1.

20
N 1 k=0 kn X(k)WN , para n = 0, 1, ..., N-1

x(n) = 1/N

onde WN = ej2/N (fator twiddle). Podemos observar que para calcular X(k) para um determinado valor de k, so necessrias N multiplicaes complexas e N-1 somas complexas. Ou seja, so necessrias N 2 multiplicaes complexas e N(N-1) somas complexas para se obter os N valores da srie transformada. Em termos de esforo computacional, a transformada discreta tem complexidade O(N 2 ), o que a caracteriza como lenta e inecaz para aplicaes de alto desempenho.

3.2 Transformada rpida de Fourier


Para otimizar a resoluo da transformada discreta foi proposto um mtodo eciente para esse clculo: a transformada rpida de Fourier (COOLEY; TUKEY, 1965). A transformada rpida de Fourier (Fast Fourier Transform - FFT), tambm chamada algoritmo Cooley-Tukey, tem como idia bsica dividir a transformada discreta em transformadas menores recursivamente, am de diminuir o esforo computacional. Existem diversos algoritmos para o clculo da FFT, entre eles, os radix-2 sero apresentados com mais detalhes nas prximas sees. 3.2.1 Algoritmos radix-2 Esses algoritmos foram desenvolvidos por Cooley e Tukey em 1965 e necessitam que N se seja potncia de 2, da seu nome. Podem ser aplicados no domnio do tempo, chamado de decimao no tempo ou DIT (decimation-in-time) e no domnio da freqncia, chamado de decimao na freqncia ou DIF (decimation-in-frequency). A equao da transformada discreta pode ser reescrita utilizando a operao chamada "borboleta"(guras 3.1 e 3.2), que aplicada a dois pontos da srie de cada vez. Essa operao consiste de uma multiplicao complexa e duas somas complexas. Para aplicar o algoritmo de decimao no tempo a entrada precisa ser rearranjada para a ordem bit-invertido de ndices (vide tabela 3.2.1), onde os elementos so separados em dois grupos de acordo com o bit menos signicativo na primeira separao, com o segundo bit menos signicativo na segunda separao e assim sucessivamente. Depois de re-arranjada, a srie passa por log2 N etapas onde N/2 borboletas (como a da gura 3.1) so aplicadas, conforme a gura 3.3, onde o algoritmo aplicado a uma srie de 8

21

Tabela 3.1: Exemplo de ordenao por bit-invertido ndice 0 1 2 3 4 5 6 7 Equivalente em binrio 000 001 010 011 100 101 110 111 Binrio em bit-invertido 000 100 010 110 001 101 011 111 ndice em bit-invertido 0 4 2 6 1 5 3 7

amostras.

Figura 3.1: Operao de borboleta - DIT

Figura 3.2: Operao de borboleta - DIF O algoritmo de decimao na freqncia ligeiramente diferente, tendo como entrada a srie na ordem normal, mas seu resultado ordenado em bit-invertido. Possui o mesmo nmero de etapas e borboletas (como a da gura 3.2), mas aplicado conforme a gura 3.4. Esses algoritmos aplicam um total de (N/2)log2 N operaes de borboleta, totalizando (N/2)log2 N multiplicaes complexas e N log2 N somas complexas, o que em termos de esforo computacional signica uma complexidade de ordem O(N log2 N ). 3.2.2 Outros algoritmos Os algoritmos radix-2 podem ser estendidos para radix-4, radix-8, radix-16, que melhoram o desempenho por necessitarem de menos etapas e menos operaes de borboleta por etapa, mas necessitam que o tamanho das sries sejam potncias de 4, 8 e 16 respectivamente.

22

Figura 3.3: Grafo do algoritmo radix-2 por decimao no tempo Existem outras tentativas de melhorar o desempenho da FFT, como o algoritmo splitradix proposto por R. Yavne (YAVNE, 1968), que mescla borboletas de 2 e 4 entradas para diminuir o nmero total de operaes aritmticas. Na sua forma original tambm possui a desvantagem de necessitar que o tamanho da srie seja de potncia de 4, mas pode ser combinado com qualquer outro algoritmo de FFT para suprir essa desvantagem. Existem ainda outras variaes como os algoritmos prime-factor (GOOD, 1958), de Bruun (BRUUN, 1978), de Rader (RADER, 1968) e de Bluestein (BLUESTEIN, 1968), mas suas caractersticas esto fora do escopo deste trabalho.

23

Figura 3.4: Grafo do algoritmo radix-2 por decimao na freqncia

24

4 CRAY XD1

Neste captulo apresenta-se uma descrio da arquitetura do supercomputador XD1 da Cray e suas particularidades de programao e utilizao. Esse captulo visa ressaltar aspectos importantes para o desenvolvimento de aplicaes hbridas.

4.1 Arquitetura
O XD1 composto por seis blades, onde cada blade possui dois processadores Opteron de 64 bits, de 1 a 8 GB de memria DDR SDRAM por processador, dois processadores RapidArray, um FPGA Virtex II Pro da Xilinx e um processador de gerenciamento, que monitora o hardware (CRAY, 2005a). Uma viso lgica do chassis do Cray XD1 por ser vista na gura 4.1.

Figura 4.1: Viso lgica do chassis do XD1. Fonte: (CRAY, 2005a)

25

O FPGA se conecta com um dos processadores RapidArray locais para comunicao com os processadores Opteron, com processadores RapidArray de blades vizinhas e com quatro mdulos de memria QDRII SRAM de 64 Mbytes, como mostra a gura 4.2.

Figura 4.2: Conexes do FPGA. Fonte: (CRAY, 2005a)

4.1.1 Interconexo RapidArray A interconexo RapidArray o barramento utilizado para conectar processadores RapidArray dentro de um chassis e entre chassis e, conseqentemente, processadores, memria e FPGAs. um barramento de banda larga, baixa latncia, no bloqueante que pode chegar a at 96 GB/s dentro de um chassis (CRAY, 2005a). 4.1.2 Recursos de memria No XD1 o FPGA tem acesso a quatro tipos de memria. As mais rpidas so a RAM distribuda e a RAM de bloco (Block RAM), que residem dentro do Virtex II Pro, e possuem 18Kbits e 16 KBytes de tamanho respectivamente. O FPGA possui acesso a quatro mdulos de memria Quad Data Rate de segunda gerao (QDR II) SRAM de 64 MBytes de tamanho cada. Tambm pode acessar a memria

26

principal do sistema que possui vrios Gigabytes de espao.

4.2 Programando o Cray XD1


Para a criao de programas que utilizem o FPGA, a Cray disponibiliza uma API para comunicao com o FPGA. Essa API permite realizar operaes administrativas e transferncia de dados. Tambm disponibilizada uma ferramenta, o FPGA Control Utility, que auxilia nas operaes administrativas. 4.2.1 FPGA Control Utility Essa ferramenta utilizada para tarefas como carregar e descarregar o binrio, mas tem como principal funo a converso do binrio gerado pelo software da Xilinx para o formato da Cray. Para isso, a ferramenta utiliza informaes como o Part Number da Cray e a freqncia de sinais de relgio desejada para converter para o novo formato. 4.2.2 Operaes administrativas As operaes administrativas disponveis na API englobam as operaes necessrias para congurar o ambiente. A seguir, sero apresentadas as principais operaes: fpga_open: cria um descritor de arquivo para o dispositivo, esse descritor ser utilizado em todas as outras operaes da API. fpga_load: carrega o binrio, j convertido para o formato da Cray, para o FPGA. equivalente a carregar o binrio utilizando o FPGA Control Utility. fpga_reset: reseta o FPGA, ativando o sinal de reset presente no mdulo RapidArray Transport Core. fpga_start: desativa o sinal de reset, fazendo com que a lgica comece a executar. fpga_status: retorna o estado do FPGA, que o valor de um registrador do RapidArray Transport Core. fpga_is_loaded: retorna verdadeiro caso o FPGA possua um binrio carregado. fpga_unload: apaga o binrio carregado no FPGA. fpga_close: fecha o arquivo do dispositivo.

27

4.2.3 Transferncia de Dados Para a transferncia de dados entre os Opteron e o FPGA exitem trs opes: mapear a memria interna do FPGA no espao de memria da aplicao, acessar uma diretamente uma posio nica da memria do FPGA ou reservar um espao na memria da aplicao para o FPGA acessar diretamente (CRAY, 2005c). Para o mapeamento da memria interna do FPGA, primeiramente faz-se uma chamada de mapeamento que retorna um ponteiro para aquela regio. Leituras e gravaes nessa regio so feitas atravs desse ponteiro, como se fosse um vetor. A funo da API para esse tipo de transferncia : fpga_memmap: mapeia o nmero de bytes passado como parmetro da memria interna do FPGA para o espao de memria da aplicao, retornando um ponteiro para o primeiro byte dessa regio. O acesso direto uma nica posio da memria do FPGA feito atravs de duas funes da API, uma de escrita e uma de leitura: fpga_wrt_appif_val: escreve um valor em um endereo, ambos passados como parmetro, na memria interna do FPGA. fpga_rd_appif_val: l o contedo de um endereo, passado como parmetro, da memria interna do FPGA. Para reservar um espao da memria da aplicao para ser acessada pelo FPGA, a API disponibiliza um mtodo que aloca essa regio de memria para esse m. Aps essa regio ser alocada, necessrio que o programa comunique o FPGA o endereo base da regio, o que pode ser feito utilizando qualquer uma das abordagens descritas anteriormente. As funes da API destinadas esse m so: fpga_register_ftrmem: reserva um espao da memria da aplicao para ser acessada pelo FPGA, do tamanho passado como parmetro. fpga_dereg_ftrmem: libera a memria previamente alocada.

28

4.3 Congurando o FPGA do XD1


A congurao do FPGA com a lgica do usurio se d pela insero dessa lgica em um ambiente j estabelecido pela Cray. O ambiente consiste de um RapidArray Transport Core, de um QDR II Core e um gerador de ciclos de relgio. Esse ambiente pode ser visualizado na gura 4.3.

Figura 4.3: Topo de um projeto HDL para o Cray XD1. Fonte: (CRAY, 2005a) A lgica do usurio deve ser adaptada para se comunicar com o mdulo RapidArray Transport Core (gura 4.4), que o responsvel pelo tratamento das requisies vindas do processador e por mandar requisies para o processador. O RapidArray Transport Core possui quatro grupos de sinais, para envio e recebimento de requisies e para envio e recebimento de respostas essas requisies. O mdulo QDR II Core opcional, pois a lgica do usurio pode usar somente a memria interna. Possui quatro grupos de sinais, para leitura e escrita em cada uma dos quatro mdulos de memria QDRII SRAM (CRAY, 2005d).

29

Figura 4.4: RapidArray Transport Core. Fonte: (CRAY, 2005b)

30

5 IMPLEMENTAO

Este captulo descreve a implementao do trabalho, apresentando a implementao da FFT em hardware e sua adaptao para utilizar os mdulos da Cray. Por m, apresentase uma avaliao sobre o resultado.

5.1 Introduo
Para a implementao da FFT em VHDL, foi escolhido o algoritmo radix-2 por decimao no tempo, por ser um algoritmo simples e, por ser menos otimizado, pode ressaltar o quo valiosa a utilizao de uma implementao hbrida para o clculo da FFT. O estudo da FFT mostrou que a parte central do algoritmo a operao de borboleta, sendo que o resto do algoritmo se limita a calcular os parmetros dessa operao. Sendo assim, iniciou-se a implementao por essa operao. Todos os mdulos a seguir foram implementados utilizando a biblioteca math_real da IEEE para operaes com nmeros reais. Essa biblioteca foi utilizada para acelerar o desenvolvimento da FFT e partir rapidamente para o acoplamento com os mdulos da Cray e da Xilinx. Como essa biblioteca no sintetizvel para FPGA, necessrio que essas operaes de nmeros reais sejam implementadas. Por no haver tempo hbil, optou-se pelo acoplamento por ser algo menos explorado.

5.2 Implementao da operao borboleta em VHDL


Para o clculo da borboleta do algoritmo radix-2 so necessrios como entrada os dois nmeros complexos, o nmero da etapa de clculo e o grupo de borboletas da etapa atual. Como sada, essa borboleta tem dois nmeros complexos. O nmero da etapa e o grupo de borboletas da etapa atual so utilizados para o clculo do fator twiddle e esse clculo muitas vezes serve para mais de uma borboleta. Por isso,

31

foi decidido, por questo de otimizao, pela separao do clculo do fator da borboleta. Assim, a borboleta passa a receber um nmero complexo (o resultado do clculo do fator) como parmetro ao invs do nmero da etapa e do grupo de borboletas. Para a construo da borboleta em hardware, foi desenvolvido um registrador de nmeros complexos. Esse registrador possui como entrada dois nmeros de ponto utuante, um sinal de carga e um sinal de relgio e tem como sada dois nmeros de ponto utuante. As entradas de ponto utuante so armazenadas na borda de subida do relgio desde que o sinal de carga esteja ligado. Esse registrador de nmeros complexos ser utilizado para armazenar os valores de sada da borboleta e o resultado do clculo do fator twiddle. Para o clculo do fator, foram criados dois mdulos que recebem o nmero da etapa e o grupo de borboletas, onde um calcula o seno e o outro o cosseno baseado nessas entradas. As operaes de seno e cosseno foram calculadas utilizando as respectivas funes da biblioteca da IEEE. Essas operaes poderiam ser facilmente implementadas utilizando consulta a uma tabela de resultados pois as funes de seno e cosseno so aplicadas a um nmero pequeno de valores. Depois do clculo, esses valores so armazenados no registrador destinado a esse m. Para o clculo da borboleta propriamente dita, foi criado um mdulo que l as entradas e o registrador do fator twiddle e grava o resultado nos registradores de sada. As portas de entrada e sada do mdulo twiddle e do ncleo da borboleta podem ser vistos nas guras 5.1 e 5.2 respectivamente. entity twiddle is port(clock : in std_logic; grupo : in real; passo : in real; sr : out real; si : out real ); end twiddle;

------

relogio grupo de borboletas passo atual saida real saida imaginaria

Figura 5.1: Portas do mdulo que calcula o fator twiddle Com essa arquitetura, mostrada na gura 5.3, a borboleta implementada ca modularizada e completamente independente da plataforma. Nos testes, esse modelo mostrou que funciona e consegue calcular a borboleta em 2 ciclos de relgio, mas pode utilizar

32

entity nucleo_borboleta is port(ar : in real; ai : in real; br : in real; bi : in real; wr : in real; wi : in real; r1r : out real; r1i : out real; r2r : out real; r2i : out real ); end entity nucleo_borboleta;

-----------

entrada A real entrada A imaginaria entrada B real entrada B imaginaria parte real do W parte imaginaria do W saida 1 real saida 1 imaginaria saida 2 real saida 2 imaginaria

Figura 5.2: Portas do mdulo calcula a borboleta pipeline para calcular o fator twiddle da prxima etapa enquanto calcula a borboleta da etapa atual. Dessa forma, obtm-se uma vazo de um ciclo de relgio.
Twiddle
nmero do grupo de borboletas
cosseno

etapa

seno

Borboleta
R1 A real A imaginrio R1 real A + WB R1 imaginrio

R2 B real B imaginrio R2 real A - WB R2 imaginrio

Figura 5.3: Arquitetura da borboleta implementada

33

5.3 Implementao da FFT em VHDL


Para o clculo da FFT, foi criado um novo mdulo que conecta o mdulo da borboleta com o mdulo do fator twiddle e utiliza-se um lao que implementa o algoritmo radix-2, semelhante ao cdigo em C que realiza essa mesma funo. Nessa implementao considera-se que o vetor de entrada j est ordenado por bit-invertido e no foi levado em considerao a interface entre a FFT em VHDL e o programa que ir executla, comportando-se como se os dados j tivessem sido copiados para a memria. Essa arquitetura pode ser vista na gura 5.4 e o algoritmo implementado na gura 5.5
Twiddle
nmero do grupo de borboletas
cosseno

etapa

seno

FFT

Borboleta
R1 A real A imaginrio A + WB

R2 B real B imaginrio A - WB

Figura 5.4: Arquitetura da FFT implementada Essa implementao foi simulada utilizando-se vetores de entrada com quatro e oito nmeros complexos. Os dois vetores precisaram, para serem totalmente computados, de um nmero de ciclos de relgio igual ao nmero de operaes realizadas (soma do nmero de borboletas com o nmero de clculos de fator twiddle), sendo 7 (4 + 3) para o vetor

34

wait until clockevent and clock = 0; passo := 1; while passo < N loop -- percorre os logN passos grupo_borb := 0; while grupo_borb < passo loop grupo <= real(grupo_borb); -- envia para o twiddle etapa <= real(passo); -- envia para o twiddle wait until clockevent; -- espera um wait until clockevent; -- ciclo de relogio i := grupo_borb; while i < N loop -- percorre borboletas do grupo ar <= xreal(i); -ai <= ximag(i); -- envia os valores br <= xreal(i + passo); -- para a borboleta bi <= ximag(i + passo); -wait until clockevent; -- espera um wait until clockevent; -- ciclo de relogio xreal(i) := r1r; -ximag(i) := r1i; -- recebe os valores xreal(i + passo) := r2r; -- da borboleta ximag(i + passo) := r2i; -i := 2 * passo + i; end loop; grupo_borb := grupo_borb + 1; end loop; passo := passo * 2; end loop; Figura 5.5: Algoritmo FFT implementado em VHDL de tamanho quatro e 19 (12 + 7) para o de tamanho oito. Genericamente, precisa-se de (N/2)log2 N +
(log2 N )1 k=0

2k ciclos de relgio para concluir a tarefa.

A corretude da implementao pode ser visualizada comparando os resultado obtidos com a simulao (gura 5.6) e com a execuo de um programa escrito em linguagem C (gura 5.7) para o mesmo vetor de entrada.

Figura 5.6: Resultado obtido em simulao

35

Figura 5.7: Resultado obtido em programa de alto nvel

5.4 Conectando a FFT nos mdulos da Cray


Para poder utilizar a FFT em um FPGA real necessrio conect-la s entradas e sadas do chip e estabelecer um protocolo de comunicao com dispositivos, como processador e memria. Para ajudar nessas questes, a Cray disponibiliza algumas Propriedades Intelectuais (Intellectual Properties - IP), que so mdulos pr-compilados em um formato no-visualizvel. O principal desses IPs o RapidArray Transport Core, responsvel por conectar os sinais da lgica do usurio e estabelecer um protocolo de comunicao com a malha RapidArray Transport e, conseqentemente, ao processador e memria (CRAY, 2005b). Dos sinais que esse mdulo repassa lgica do usurio, so utilizados somente os que correspondem s requisies do processador. Esses sinais so repassados para o mdulo RapidArray Transport Client disponibilizado pela Cray para fazer a interface entre o RapidArray Transport Core e a lgica do usurio. Esse mdulo possui diversos sinais (gura 5.8) mas somente dois foram usados, para entrada e sada com a Block RAM. Esses sinais so do tipo record e suas estruturas e seus subtipos so mostradas na gura 5.9. Para gravar, por exemplo, o valor 42 na posio 0 da Block RAM o sinal t_rt_req preenchido como mostrado na gura 5.10. Utilizando esses dois sinais tanto o processador quanto o FPGA (mais precisamente os mdulos RapidArray Transport Client e FFT) se comunicam com a Block RAM e com os registradores internos. exemplo do RapidArray Transport Client, o mdulo FFT recebe um t_rt_responses da Block RAM e envia t_rt_req, como pode ser visto na gura 5.11. Essa abordagem foi escolhida pois o FPGA no precisa iniciar uma transao, a implementao ca simplicada se o FPGA apenas responder requisies do processador.

36

entity rt_client is port ( -- Global signals reset_n : in std_logic; user_clk : in std_logic; user_enable : in std_logic; rt_ready : in std_logic; -- RT Interface -- Fabric Request Interface ... -- User Response Interface ... -- Block RAM Interface rt_responses : in t_rt_responses; rt_req : out t_rt_req ); end entity rt_client; Figura 5.8: Portas utilizadas do mdulo RapidArray Transport Client Essas requisies so todas feitas memria interna e atravs dela que se d a comunicao entre o RapidArray Transport Client e a FFT. Dessa forma, a aplicao que utiliza essa implementao primeiramente mapeia a memria interna do FPGA para a transferncia dos dados e, aps o m da transferncia, grava o valor 1 em um registrador de congurao interno do FPGA. Isso sinaliza para a lgica do usurio que todos os dados j esto na memria interna e que o mdulo da FFT j pode comear a executar. Aps o trmino do clculo da FFT, o mdulo grava no mesmo registrador o valor 0, o que sinaliza a aplicao que o clculo j terminou e que a aplicao j pode utilizar os dados. A memria interna instanciada dentro da lgica do usurio utilizando o IP Block RAM da Xilinx. Esse IP gratuito, mas s pode ser usado em FPGAs desse fabricante. Para acessar a Block RAM, utiliza-se outro mdulo que funciona como interface entre a lgica do usurio e a Block RAM. Como tanto o RapidArray Transport Core quanto o mdulo FFT necessitam acessar a memria interna, foi necessrio colocar um multiplexador na sua entrada e um demultiplexador em sua sada, ambos controlados pelo mdulo FFT. O mesmo foi feito para os registadores internos. Para acesso a esses registradores tambm usado um IP da Xi-

37

type t_rt_req is record rd : t_rt_sel; wr : t_rt_sel; addr : t_rt_block_addr; wdata : t_byte_array(7 downto 0); mask : std_logic_vector(7 downto 0); end record t_rt_req; type t_rt_sel is array (t_rt_blocks) of std_logic; subtype t_rt_block_addr is std_logic_vector(t_rt_block_decodelow-1 downto 3); subtype t_rt_block_decode is std_logic_vector(26 downto 23); type t_byte_array is array(natural range <>) of std_logic_vector(7 downto 0); type t_rt_responses is array (t_rt_blocks) of t_rt_resp; type t_rt_resp is record rdata : t_byte_array(7 downto 0); busy : std_logic; end record t_rt_resp; type t_rt_blocks is (regs, bram, qdr2); Figura 5.9: Estrutura dos records linx que os implementa e um mdulo de interface. Foi necessrio tambm colocar um multiplexador na entrada dos registradores, mas a sada ligada diretamente ao mdulo RapidArray Transport Core, pois a FFT no l valores dos registradores. A arquitetura nal da implementao pode ser vista na gura 5.12. Essa arquitetura se conecta com o mdulo RapidArray Transport Core, mostrado na gura 4.4, e sua entrada e sada correspondem aos sinais Fabric Request Interface explicitados nessa gura. Essa soluo comeou a ser testada no FPGA do Cray XD1 do INPE, mas por problemas tcnicos ocorridos durante os testes, estes tiveram que ser cancelados e, portanto, a avaliao se dar somente por simulao.

38

valor := "00000000000000000000000000000000 00000000000000000000000000101010"; -- 42 bytes(7) bytes(6) bytes(5) bytes(4) bytes(3) bytes(2) bytes(1) bytes(0) := := := := := := := := valor(63 downto 56); valor(55 downto 48); valor(47 downto 40); valor(39 downto 32); valor(31 downto 24); valor(23 downto 16); valor(15 downto 8); valor(7 downto 0); <= 1; -- bram == Block RAM <= 0; "00000000000000000000"; -- 0 "11111111"; -- quais bytes serao escritos bytes;

rt_req.wr(bram) rt_req.rd(bram) rt_req.addr <= rt_req.mask <= rt_req.wdata <=

Figura 5.10: Exemplo de requisio via hardware entity fft is port(user_clk reset_n start bram_resp to_reg fft_req ); end entity fft;

: : : : : :

in std_logic; in std_logic; in std_logic; -- sinal para comecar in t_rt_responses; out std_logic; -- para registradores out t_rt_req

Figura 5.11: Portas do mdulo FFT

5.5 Avaliao
Essa avaliao foi feita atravs de simulao utilizando a ferramenta ISE Foundation da Xilinx. Como essa implementao no foi utilizada em um FPGA real, sua avaliao se d em nmero de ciclos de relgio necessrios para terminar a tarefa. Esses nmeros de ciclos de relgio foram obtidos atravs de simulao e podero mudar em uma implementao sintetizvel. Inicialmente, necessrio um ciclo para inicializar e 2 ciclos para comear a gravar na Block RAM, devido ao multiplexador na entrada e interface da Block RAM, e N ciclos para gravar N nmeros reais de 64 bits.

39

MUX

Interface Block RAM

DEMUX RapidArray Transport Client FFT

MUX

Interface Registradores

Figura 5.12: Arquitetura implementada Aps o termino da gravao dos dados na memria interna, so necessrios 3 ciclos para gravar no registrador e para o mdulo FFT ler do registrador o sinal para comear a executar. Como mencionado anteriormente, o mdulo FFT necessita de (N/2)log2 N +
(log2 N )1 k=0

2k

ciclos de relgio para calcular a FFT de N nmeros complexos. Como a aplicao no precisa copiar os dados de volta para a memria principal do sistema, o resultado obtido com (N/2)log2 N +
(log2 N )1 k=0

2k + 2N + 6 ciclos de relgio.

Considerando que a memria interna do Virtex II Pro tem 16 Kbytes de espao, somente 2048 nmeros reais, ou 1024 nmeros complexos, podem ser armazenados simultaneamente. Caso N ultrapasse 1024, necessrio dividir o vetor e aplicar a FFT separadamente. Para isso, necessrio copiar os dados j calculados para a memria principal do sistema. Isso necessita de 3 ciclos de relgio para o mdulo FFT sinalizar que terminou de calcular, 3 ciclos para comear a ler os dados da Block RAM e 2048 ciclos para ler os 1024 nmeros complexos. Note que esse nmero xo para cada troca de contexto, pois caso N seja maior que 1024 ele ser um mltiplo de 1024 deixando a memria sempre cheia. Caso N seja 2048, por exemplo, a FFT precisar ser aplicada 4 vezes, o que necessita de 3 cpias para a memria principal, totalizando uma penalidade de 6162 ciclos de re-

40

Tabela 5.1: Ciclos de relgio necessrios para calcular a FFT Tamanho do vetor Ciclos necessrios 128 837 256 1797 512 3845 1024 8197 2048 38950 4096 120958

lgio. A tabela 5.5 mostra o nmero de ciclos de relgio necessrios para calcular a FFT para alguns tamanhos do vetor de entrada. Considerando que a freqncia mxima do Virtex II Pro de 200 MHz, ou seja, 200 milhes de ciclos por segundo, nota-se que, mesmo com as cpias para a memria principal, o nmero de ciclos se mantm bem abaixo desse valor.

41

6 CONCLUSO

Este trabalho apresentou a implementao parcial de uma transformada rpida de Fourier em hardware para ser executada em um FPGA da Xilinx, contido no supercomputador XD1 da Cray. Primeiramente, foi estudada a transformada rpida de Fourier, para entender seu funcionamento e suas possveis diculdades de implementao. Em seguida, foram estudadas diversas ferramentas para desenvolvimento em hardware para escolher a melhor maneira de implementar a FFT. Com a FFT em VHDL implementada, foram estudados os mdulos disponibilizados pela Cray e pela Xilinx para fazer o acoplamento do mdulo FFT com o resto do sistema. Assim foi possvel fazer uma simulao em software usando uma implementao muito parecida com a implementao nal em hardware. O estgio atual de implementao est prximo de executar em um FPGA real e pode ser complementado futuramente para se tentar acelerar aplicaes que utilizem FFT. Para isso, necessrio a implementao das operaes com nmeros reais (incluindo seno e cosseno) para substituir a biblioteca no sintetizvel da IEEE e alguns testes para vericar se a comunicao simulada com o processador condiz com a real comunicao com o processador. A avaliao se deu atravs de simulao e mostrou que a implementao vlida e consegue calcular a FFT em um nmero de ciclos de relgio razoavelmente pequeno. Essa implementao deixa espao para melhorias de desempenho, principalmente na aplicao da FFT, aplicando vrias operaes de borboleta em paralelo. Como trabalho futuro, pode-se terminar o acoplamento da implementao com um FPGA real e medir o possvel ganho de desempenho que pode ser obtido com essa abordagem.

42

REFERNCIAS

BLUESTEIN, L. I. A linear ltering approach to the computation of the discrete Fourier transform. Northeast Electronics Research and Engineering Meeting Record 10, [S.l.], p.218219, 1968. BRUUN, G. z-Transform DFT lters and FFTs. IEEE Trans. on Acoustics, Speech and Signal Processing (ASSP) 26, [S.l.], p.5663, 1978. BURDEN, R. L.; FAIRES, J. D. Numerical Analysis. [S.l.]: Cole Publishing Company, 1997. COMPTON, K.; HAUCK, S. Recongurable Computing: a survey of systems and software. ACM Computing Surveys, [S.l.], v.34, n.2, p.171210, 2002. COOLEY, J. W.; TUKEY, J. W. An Algorithm for the Machine Calculation of Complex Fourier Series. Mathematics of Computation, [S.l.], v.19, n.90, p.297301, 1965. CRAY, I. Cray XD1 FPGA Development. [S.l.]: Cray, Inc., Seattle, WA, 2005. CRAY, I. Design of Cray XD1 RapidArray Transport Core. [S.l.]: Cray, Inc., Seattle, WA, 2005. CRAY, I. Cray XD1 Programming. [S.l.]: Cray, Inc., Seattle, WA, 2005. CRAY, I. Design of Cray XD1 QDR II SRAM Core. [S.l.]: Cray, Inc., Seattle, WA, 2005. ESTRIN, G.; BUSSEL, B.; TURN, R.; BIBB, J. Parallel Processing in a Restructurable Computer System. IEEE Transactions on Electronic Computers, [S.l.], v.12, n.5, p.747755, 1963.

43

GOOD, I. J. The interaction algorithm and practical Fourier analysis. J. R. Statist. Soc. B 20, [S.l.], p.361372, 1958. KEAN, T. Algotronix History. [S.l.]: Algotronix, 2007. LASS, S. ESL Tools Make FPGAs Nearly Invisible to Designers. Xcell Journal, Third Quarter 2006, [S.l.], p.68, 2006. LEVINE, B. A Systematic Implementation of Image Processing Algorithms on Congurable Computing Hardware. 1999. Dissertao (Mestrado) University of Tennessee, Knoxville. LYNCH, P.; Ireland Meteorological Service. Dynamo: a one-dimensional primitive equation model. [S.l.]: Ireland Meteorological Ofce, 1984. MARRA, F.; COELHO, V.; MOURELLE, L.; NEDJAH, N. Tradutor de C para VHDL C2VHDL. Revista Eletrnica de Iniciao Cientca, Ano I, Vol. I, No. I, [S.l.], 2001. MAXFIELD, C. M. The Design Warriors Guide to FPGAs. [S.l.]: Elsevier, 2004. PENTINMAKI, I.; MENON, R.; BASS, J. FPGA C Compiler. [S.l.]: Sourceforge, 2006. PETERSEN, R. J. An Assessment of the Suitability of Recongurable Systems for Digital Signal Processing. 1995. Tese (Doutorado) Brigham Young University. Dept. of Electrical and Computer Engineering. PETERSON, G.; SMITH, M. Programming High Performance Recongurable Computers. SSGRR 2001, [S.l.], 2001. RADER, C. M. Discrete Fourier transforms when the number of data samples is prime. Proc. IEEE 56, [S.l.], p.11071108, 1968. Symphony EDA. VHDL Simili - Version 3.1. [S.l.]: Symphony EDA, 2007. TODMAN, T.; CONSTANTINIDES, G.; WILTON, S.; MENCER, O.; LUK, W.; CHEUNG, P. Recongurable Computing: architectures and design methods. IEE Proceedings: Computer & Digital Techniques, Vol. 152, No. 2, March 2005, [S.l.], p.193 208, 2005.

44

VELHO, H. F. C.; CLAEYSSEN, J. C. R. Singular Value Decomposition in the Numerical Integration of an Atmospheric Model. XIII Congresso bero-Latino-americano de Mtodos Computacionais para a Engenharia, [S.l.], 1992. YAVNE, R. An economical method for calculating the discrete Fourier transform. Proc. AFIPS Fall Joint Computer Conf. 33, [S.l.], p.115125, 1968.

You might also like